[PYTHON] Lassen Sie uns nach numerischen Werten durch lineare Suche / 2-Minuten-Suche suchen

Hallo. Vielen Dank für Ihre Unterstützung m (_ _) m Es ist fast drei Wochen her, seit ich am 23.9. Mit dem Posten begonnen habe. Es macht Spaß in kürzester Zeit (lacht).

Nun, diesmal ist es eine Suche. Beginnen wir mit einer linearen Suche. Du musst nicht bereit sein. 図1.PNG Überprüfen Sie einfach in der Reihenfolge von links, ob der gesuchte Wert mit dem Defizit übereinstimmt.

linear_search.py


def search(x,key):
    
    for i in range(len(x)):
        if x[i] == key:
            print(f"value is placed at x[{i}]")
            break
 #Letzte Amtszeit x[6] !=Für Schlüssel, wenn x oben erwähnt[i] ==Weil es den Schlüssel übergibt
 #Geben Sie die folgende if-Anweisung so ein, wie sie ist.
 #i == len(x)-Wenn es 1 ist, ist es fehlgeschlagen.
        if i == len(x)-1:
            print("fail to serch")
            break


if __name__ == "__main__":
    x = [6,4,3,2,1,2,8]                      #Geben Sie ein Array an
    key = int(input("enter search value: ")) #Geben Sie den Wert ein, den Sie suchen möchten
    search(x,key)

Als nächstes folgt eine 2-minütige Suche. Die Voraussetzungen für die lineare Suche sind sehr unterschiedlich. Ich habe den Unterschied als Bild gemacht. 図2.PNG Bei der linearen Suche vergleichen wir gegebene Dinge vom Ende, Die 2-minütige Suche geht nicht so. Einmal ausrichten. Bitte beachten Sie, dass der Start völlig anders ist. (? _ ?)(? _ ?)(?_?) Ja, ich werde trotzdem mit dem nächsten Schritt fortfahren. 図3.PNG Wenn Sie nach ** 3 ** suchen, können Sie es auf einmal finden, indem Sie es mit dem Medianwert vergleichen (lacht). Aber was ist, wenn Sie einen Wert unter 3 suchen? 図4.PNG Was ist, wenn der Wert, den Sie finden möchten, ** 1 ** ist? Wenn es nicht der Medianwert 2 von [1, 2, 2] ist, ist er noch geringer. Schauen Sie sich einfach x [0] an, in dem die 1 gespeichert ist. Wenn Sie immer noch nicht den Wert haben, den Sie suchen, suchen Sie in erster Linie nach etwas Es wird im vorbereiteten Array nicht vorhanden sein. Mendoia Argo ist nicht gut, wenn es nicht einmal organisiert ist, aber es scheint ziemlich berühmt zu sein. Diesmal habe ich es rekursiv geschrieben.

binary_search.py


def binary_search(x,left,right,key):
    cen = (left + right)//2
    if left > right:
        print(f"left is {left},right is {right}")
        print("faile to search")
        return None
    if x[cen] == key:
        return print(f"found at x[{cen}]")

    #Median x[cen]Ist größer als der Suchschlüssel
    if x[cen] > key:
        print(f"left is {left},cen is {cen}")
        binary_search(x,left,cen-1,key)#cen-Einer"-1"Ist das Miso!!!

    #Median x[cen]Ist kleiner als der Suchschlüssel
    if x[cen] < key:
        print(f"cen is {cen},right is {right}")
        binary_search(x,cen+1,right,key)#cen+Einer"+1"Ist das Miso!!!
    
if __name__ == "__main__":
    x =[1,2,2,3,4,6,8]
    
    binary_search(x,0,len(x)-1,1)

Ausführungsergebnis.py


left is 0,cen is 3
left is 0,cen is 1
found at x[0]

Wählen Sie die linke Seite und verengen Sie sie allmählich. Ich habe versucht, das Bild durch Erhöhen der Array-Länge neu zu erstellen. Dies ist möglicherweise leichter zu verstehen (Median rot, ** wenn Sie nach 7 suchen **). 図5.PNG Was ist, wenn Sie nicht nach ** 7 ** suchen? Bitte beachten Sie das unten beschriebene ** Miso **.

miso.py


    #Median x[cen]Ist größer als der Suchschlüssel
    if x[cen] > key:
        print(f"left is {left},cen is {cen}")
        binary_search(x,left,cen-1,key)#cen-Einer"-1"Ist das Miso!!!

    #Median x[cen]Ist kleiner als der Suchschlüssel
    if x[cen] < key:
        print(f"cen is {cen},right is {right}")
        binary_search(x,cen+1,right,key)#cen+Einer"+1"Ist das Miso!!!

Nur für den Fall, dass Sie es ausführen, werden die folgenden Kommentare angezeigt.

Ausführungsergebnis.py


left is 5,right is 4 
faile to search

Korrekt. links> rechts wird realisiert. Was meinst du?

Wenn Sie nach ** 6 ** suchen Geben Sie ** ein, wenn x [cen]> Schlüssel: ** in der Beschreibung.

Das Ergebnis ist ** binary_search (x, left, cen-1, key) **. An diesem Punkt links == rechts, also unter Berücksichtigung der obigen Formel links> rechts, rechts ??. Dies ist der Mechanismus der Umkehrung. Wenn Sie so weit kommen, können Sie sagen, dass es nichts gibt, oder? ??

Wenn jemand es einfacher schreiben kann Wir entschuldigen uns für die Unannehmlichkeiten, bedanken uns jedoch für Ihr Verständnis. m (_ _) m

Recommended Posts

Lassen Sie uns nach numerischen Werten durch lineare Suche / 2-Minuten-Suche suchen
[Excel] Suche nach doppelten Werten (Zeichen)