19
1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

Embed Size (px)

Citation preview

Page 1: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

1

Algorithmen und Datenstrukturen

Dipl. Inform. Andreas Wilkens

Page 2: 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.

Page 3: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.

Page 4: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.

Page 5: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.

Page 6: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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

Page 7: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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)

Page 8: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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)

Page 9: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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!

Page 10: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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

Page 11: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.

Page 12: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.

Page 13: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.

Page 14: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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

Page 15: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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!

Page 16: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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!

Page 17: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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!

Page 18: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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

Page 19: 1 Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens

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.