Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
gf_informatik:suchen_und_sortieren:binaersuche:anleitung [2023-06-06 13:40] – [Binäre Suche – eine kleine Anleitung] gra | gf_informatik:suchen_und_sortieren:binaersuche:anleitung [2025-02-16 08:54] (aktuell) – [3: Wiederholte Schritte in der while-Schleife:] hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ## Binäre Suche – eine kleine | + | ## Binäre Suche – Erklärung und Anleitung |
Wir schreiben eine Funktion namens '' | Wir schreiben eine Funktion namens '' | ||
Zeile 5: | Zeile 5: | ||
- Das mittlere Element entspricht dem gesuchten Element. Also geben wir den Index des mittleren Elements zurück und sind fertig. | - Das mittlere Element entspricht dem gesuchten Element. Also geben wir den Index des mittleren Elements zurück und sind fertig. | ||
- Das mittlere Element ist grösser als das gesuchte Element. Also schränken wir den Suchbereich ein, sodass alles ab der Mitte rechts nicht weiter betrachtet wird. | - Das mittlere Element ist grösser als das gesuchte Element. Also schränken wir den Suchbereich ein, sodass alles ab der Mitte rechts nicht weiter betrachtet wird. | ||
- | - Das mittlere Element ist grösser | + | - Das mittlere Element ist kleiner |
Bei 2. und 3. wird der Suchbereich halbiert und es ergibt sich daraus eine neue Mitteposition. Das Element an dieser Position verleichen wir erneut mit dem gesuchten Element. Wir wiederholen diese Schritte solange, bis: | Bei 2. und 3. wird der Suchbereich halbiert und es ergibt sich daraus eine neue Mitteposition. Das Element an dieser Position verleichen wir erneut mit dem gesuchten Element. Wir wiederholen diese Schritte solange, bis: | ||
Zeile 13: | Zeile 13: | ||
Wir programmieren also einen Algorithnus, | Wir programmieren also einen Algorithnus, | ||
- | ### 1: Einmalige Schritte vor der While-Schleife | + | ### 1: Einmalige Schritte vor der while-Schleife |
Nachdem wir den Funktionskopf hingeschrieben haben, legen wir die beiden Variablen '' | Nachdem wir den Funktionskopf hingeschrieben haben, legen wir die beiden Variablen '' | ||
Zeile 23: | Zeile 23: | ||
</ | </ | ||
++++ | ++++ | ||
+ | ### 2: Bedingung der while-Schleife | ||
+ | Wir müssen so lange suchen, wie wir den Suchbereich noch verkleinern können. Es kann sein, dass solange gesucht wird, bis der Suchbereich sich nur noch auf ein einziges Element beschränkt. Dann sind die Variablen '' | ||
- | ### 2: While-Schleife | + | ++++ Python| |
- | Wir müssen so lange suchen, wie wir den Suchbereich noch verkleinern können. | + | <code python> |
+ | while left <= right: | ||
+ | </ | ||
+ | ++++ | ||
+ | ### 3: Wiederholte Schritte in der while-Schleife: | ||
+ | Zuerst berechnen wir die Mitteposition. Sie ergibt sich aus zwei Schritten: Erstens von der rechten Position die linke abziehen und diesen Wert durch 2 teilen. Zweitens die linke Position hinzuaddieren. Also: '' | ||
+ | |||
+ | Danach vergleichen wir das Element an der Mitteposition mit dem gesuchten Element. Da es drei Möglichkeiten gibt, ist eine '' | ||
+ | * Wenn das Element an der Mitteposition gleich gross ist wie das gesuchte Element, geben wir die Mitteposition zurück. | ||
+ | * Wenn das Element an der Mitteposition kleiner ist als das gesuchte Element, befindet sich das gesuchte Element rechts davon. Wir begrenzen | ||
+ | * Wenn das Element an der Mitteposition grösser ist als das gesuchte Element, befindet sich das gesuchte Element links davon. Wir begrenzen den Suchbreich auf die linke Hälfte, indem wir die Variable '' | ||
- | jhtfjhfjhgfj | ||
++++ Python| | ++++ Python| | ||
+ | <code python> | ||
+ | | ||
+ | if li[middle] == el: | ||
+ | return middle | ||
+ | elif li[middle] < el: | ||
+ | left = middle + 1 | ||
+ | else: | ||
+ | right = middle - 1 | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | |||
+ | ### 4: Letzer Schritt nach der while-Schleife | ||
+ | Wenn wir uns in der Funktion und nach der while-Schleife befinden, heisst das: | ||
+ | Wir sind nie zur Zeile '' | ||
+ | Die Bedingung der while-Schleife ist nicht mehr erfüllt, das heisst: es ist kein Suchbereich mehr übrig. | ||
+ | Also geben wir '' | ||
+ | |||
+ | ++++ Python – Gesamte Funktion| | ||
<code python> | <code python> | ||
def binary_search(li, | def binary_search(li, | ||
left = 0 | left = 0 | ||
right = len(li)-1 | right = len(li)-1 | ||
+ | while left <= right: | ||
+ | middle = (left + right) //2 | ||
+ | if li[middle] == el: | ||
+ | return middle | ||
+ | elif li[middle] < el: | ||
+ | left = middle + 1 | ||
+ | else: | ||
+ | right = middle - 1 | ||
+ | return None | ||
</ | </ | ||
- | +++ | + | ++++ |
- | + | ||
- | {{ : | + | |