Upload
jeremius-achterberg
View
102
Download
0
Embed Size (px)
Citation preview
1
Algorithmen und Datenstrukturen
Dipl. Inform. Andreas Wilkens
2
Suchalgorithmen
Definition “Suchen”:
Unter Suchen versteht man das Auffinden eines bestimmten Datums in einer gegebenen Datenmenge anhand eines Suchkriteriums, des sogenannten Suchschlüssels.
3
Suchalgorithmen
Für die Wahl eines bestimmten Suchalgorithmus ist es wichtig zu wissen, ob der zu durchsuchende Datenbestand bereits sortiert vorliegt oder nicht.
Weiterhin ist es wichtig zu wissen, ob die zu durchsuchenden Schlüsselwerte mehrfach in verschiedenen Datensätzen vorkommen dürfen oder ob sie eindeutig im gesamten Datenbestand sind.
4
Sequentielles Suchen
sequentiell = aufeinanderfolgend
Verfahren: Gesamter Datenbestand wird nacheinander mit dem
Suchschlüssel verglichen bis entweder der Vergleich erfolgreich war oder alle Datensätze verarbeitet wurden.
Geeignet für unsortierte und sortierte Datenbestände.
5
Sequentielle Suche Beispiel 3 15 7 99 87 54 50 94 55 89 4 23 1 2 19
Wenn “54” gesucht wird, dann müssen 6 Vergleiche durchgeführt werden.
Wenn “19” gesucht wird, dann müssen 15 Vergleiche durchgeführt werden.
Wenn “20” gesucht wird, müssen ebenfalls 15 Vergleiche durchgeführt werden, anschließend steht fest, dass “20” nicht im Datenbestand enthalten ist.
6
Sequentielles Suchen
Nachteile sehr zeitaufwendig eignet sich nicht für große Datenbestände
Vorteile einfach zu realisieren ( Programmierung) eignet sich für kleine Datenbestände eignet sich auch für unsortierte Datenbestände
7
Sequentielles Suchen
Aufwand Der Aufwand beim sequentiellen Suchen ist abhängig
von der Anzahl der Datensätze. worst case:
bei n Datensätzen müssen n Vergleiche durchgeführt werden (gesuchter Schlüssel im letzten Datensatz oder gar nicht vorhanden)
8
Binäre Suche nur geeignet für sortierte Datenbestände Schlüsselwerte müssen eindeutig sein (dürfen also
nicht mehrfach im Datenbestand vorkommen) Teile-und-herrsche-Prinzip Verfahren:
Vergleiche das mittlere Element des Datenbestands mit dem Suchschlüssel.
Wenn Übereinstimmung dann fertig. Wenn Suchschlüssel größer, dann Suche in rechter Hälfte
fortsetzen. ( mittleres Element der rechten Hälfte) Wenn Suchschlüssel kleiner, dann Suche in linker Hälfte
fortsetzen. ( mittleres Element der linken Hälfte)
9
Binäre Suche Beispiel: 3 5 9 17 22 30 32 36 42 43 49 53 55 61 66
Suchschlüssel: 30
[3..66] Vergleiche mit 36: 30<36 linke Hälfte
[3..32] Vergleiche mit 17: 30>17 rechte Hälfte
[22..32] Vergleiche mit 30: 30=30 gefunden!
10
Binäre Suche Vorteile:
zeitsparender gegenüber der seq. Suche weniger Vergleiche nötig geeignet für große Datenbestände
Nachteile: erfordert sortierten Datenbestand eignet sich nicht, wenn Datenbestand in
verketteter Liste vorliegt, da Bestimmung des Mittelelments zu aufwendig ist
11
Binäre Suche Bei einem Datenbestand von 1 000
000 Datensätzen werden maximal 20 rekursive Aufrufe benötigt, bis feststeht ob – und wenn ja – an welcher Stelle ein bestimmtes Element steht.
12
Interpolationssuche Stellt Verbesserung der binären Suche dar. Versucht zu „erraten“, wo sich der
gesuchte Schlüssel im betrachteten Intervall befinden könnte, anstatt immer nur mit dem mittleren Element zu vergleichen.
Vergleichbar mit der Suche in einem dicken Telefonbuch: Beginnt der Name mit „B“, sucht man weiter vorne, beginnt er mit „W“, sucht man weiter hinten.
13
Interpolationssuche Bei der binären Suche wurde die Mitte
bestimmt, um dort den nächsten Vergleich durchzuführen:
m = (l + r) / 2 = l + ½ (r - l)
Bei der Interpolationssuche ersetzt man nun den Faktor ½ durch eine geeignete Schätzung für die wahrscheinliche (oder erwartete) Position des Suchschlüssels.
14
Interpolationssuche
key - data[left]mitte = left + ——————————————————————————— * (right - left)
data[right] - data[left]
Voraussetzung: die Schlüsselwerte im Intervall
data[left], ... , data[right] sind Zahlenwerte und einigermaßen gleichverteilt
mitte wird bei der Berechnung korrekt gerundet
15
InterpolationssucheBeispiel 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15(absolute Gleichverteilung: jeder Wert ist genau einmal vorhanden)
Suchschlüssel key=5
1. Durchgang: left=0, right=14Die Berechnung ergibt: mitte=4
D.h. bereits der erste Vergleich trifft ins Schwarze!
16
InterpolationssucheBeispiel 2
1 4 5 6 7 8 10 11 13 14 16 18 20 21 22(weitgehende Gleichverteilung: zwischen dem kleinsten und dem größten Wert gibt es nur wenige Lücken)
Suchschlüssel key=6
1. Durchgang: left=0, right=14Die Berechnung ergibt: mitte=3
D.h. auch hier trifft der erste Vergleich!
17
InterpolationssucheBeispiel 3
1 4 5 6 7 8 10 11 13 14 16 18 20 21 22Suchschlüssel key=18
1. Durchgang: left=0, right=14Die Berechnung ergibt: mitte=11
D.h. auch hier trifft der erste Vergleich!
18
Interpolationssuche Vorteile:
I.d.R. weniger Vergleiche nötig als bei binärer Suche
Nachteile: setzt gleichmäßig verteilte
Schlüsselwerte voraus (ist in der Praxis nicht unbedingt gegeben)
Berechnung von „mitte“ ist komplexer
19
Interpolationssuche Der Quellcode der
Interpolationssuche entspricht dem der Binären Suchen mit der einzigen Änderung, dass die Berechnung vom “mitte” entsprechend geändert wird.