1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

Preview:

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.

Recommended