|
1
|
- Ein Suchverfahren in geordneten Feldern
|
|
2
|
- Schnelles Suchverfahren in geordneten Feldern
- Verwandte Verfahren
- Sequentielle Suche
- Interpolationssuche
- Fibonaccisuche
- Blocksuche
|
|
3
|
- Sortierter Array AR[0..n-1] mit lexikalischer Ordnung K (z.B. <,
strcmp)
- AR[0] ≤ AR[1] ≤ … AR[i] … ≤ AR[n-1]
- Fragestellung:
- Ist Objekt (Zahl, Zeichenkette etc.) S in AR enthalten ?
- Beispiel:
|
|
4
|
- Vergleiche das mittlere Element des Arrays (Pivotelement) mit dem
Suchelement.
- Wenn gleich, dann ist das Suchelement gefunden
- wenn Pivotelement kleiner als das Suchelement, dann suche in der linken
Arrayhälfte weiter
- wenn Pivotelement größer als das Suchelement, suche in der rechten
Arrayhälfte weiter
|
|
5
|
- Array[n/2]< S =>
weiter rekursiv mit Array[n/2..n]
- Array[n/2]> S =>
weiter rekursiv mit Array[1..n/2]
- Array[n/2]== S
ist S gefunden
- Array[n/2] == {}
S nicht vorhanden
|
|
6
|
|
|
7
|
|
|
8
|
|
|
9
|
|
|
10
|
- Algorithmenklassifikation
- Divide and Conquer Strategie ("Teile und herrsche")
- Divide: Zerlege Problem in zwei gleich große Teilprobleme
- Conquer: Löse Teilproblem auf dieselbe Art
|
|
11
|
- Ja, da bei jedem Schleifendurchlauf oder Rekursionsaufruf das
Suchintervall halbiert wird.
- Voraussetzung ist natürlich, dass der Algorithmus richtig umgesetzt
wird !
|
|
12
|
- Der Algorithmus benötigt
- Minimal 1 Suchelement = Mittelelement
- Maximal log2n Suchelement ist Blatt
- Durchschnittlich log2n
– 1 Hälfte der Knoten im Suchzweig
Vergleiche.
- Anmerkung: log2n = log n / log 2
|
|
13
|
- Jeder Schleifendurchlauf halbiert das Intervall der Länge K.
- Beendet, wenn Intervalllänge = 1
- K1=K, K2=K1/2, K3=K2/2=K1/2/2=K1/4
…
- K = 2N-1
- N = log2K
|
|
14
|
|
|
15
|
- Balanzierter binärer Baum der Höhe n
- Knotenanzahl K = = 2n-1
- n = log2K
- Ø = Ø(K/2) = Ø ( ) = log2K - 1
|
|
16
|
- Falls nicht sortierter Array vorliegt, müssen die Kosten des Sortierens
mitberücksichtigt werden
- Programmiersprachen
- C - bsearch Funktion
- Java – binarySearch (Arrays, Collections)
- Einfach zu implementieren für Arrays
- Zusätzliche andere auf der lexikalischen Ordnung basierende
Vergleichsfunktionen notwendig
- Sortierte Stichwortliste in Wörterbüchern
|
|
17
|
- Bei bekannten Intervallen nur innerhalb des passenden Intervalls suchen
- Bei Alphabet innerhalb A, B … Z getrennt
- Erweiterung der Suchfunktion
|
|
18
|
|
|
19
|
|
|
20
|
- Interpolationssuche
- Zuerst grobe Abschätzung, wo sich der gesuchte Wert befinden könnte –
Telefonbuch; gleichverteilte Werte
- Fibonaccisuche
- Suchbereich nach Fibonacci-Folge aufgeteilt
|
|
21
|
|