Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp) 2 1
Überblick Grundlagen Suchalgorithmen Sortieralgorithmen Analyse von Algorithmen 3 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) 4 2
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: [3..32] Vergleiche mit 17: [22..32] Vergleiche mit 30: 30<36 linke Hälfte 30>17 rechte Hälfte 30=30 gefunden! 5 Binäre Suche int search( int l, int r, int akey ) { int result = -1; int m; if (l <= r) { m = (l+r)/2; if (data[m].key == akey) { result = m; else { if (data[m].key < akey) { result = search( m+1, r, akey ); else { result = search( l, m-1, akey ); // if return result; 6 3
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 7 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. 8 4
Binäre Suche 2. Variante int BinSearch( int akey ) { int l, r, m; l = 0; r = N-1; while (l < r) { m = (l + r) / 2; if (data[m].key < akey) { l = m + 1; else { r = m; if (data[r].key == akey) { return(r); else { return(-1); 9 Binäre Suche 2. Variante Welche Unterschiede gibt es zwischen den beiden hier vorgestellten Varianten der binären Suche? 10 5
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. 11 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. 12 6
Interpolationssuche akey - data[l].key m = l + (r - l) data[r].key - data[l].key Voraussetzung: die Schlüsselwerte im Intervall data[l].key,..., data[r].key sind Zahlenwerte und einigermaßen gleichverteilt m wird bei der Berechnung korrekt gerundet 13 Interpolationssuche Beispiel 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 akey=5 1. Durchgang: l=0, r=14 Die Berechnung ergibt: m=4 D.h. bereits der erste Vergleich trifft ins Schwarze! 14 7
Interpolationssuche Beispiel 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 akey=6 1. Durchgang: l=0, r=14 Die Berechnung ergibt: m=3 D.h. auch hier trifft der erste Vergleich! 15 Interpolationssuche Beispiel 3 1 4 5 6 7 8 10 11 13 14 16 18 20 21 22 Suchschlüssel akey=18 1. Durchgang: l=0, r=14 Die Berechnung ergibt: m=11 D.h. auch hier trifft der erste Vergleich! 16 8
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 m ist komplexer 17 Interpolationssuche Der Quellcode der Interpolationssuche entspricht dem der Binären Suchen mit der einzigen Änderung, dass die Berechnung vom m entsprechend geändert wird. 18 9