Datenstrukturen und Algorithmen SS07 Datum: 23.5.2007 Michael Belfrage mbe@student.ethz.ch belfrage.net/eth
Programm von Heute Nachbesprechung Serie 7 Aufgabe 2 (Triangulierung) Scanline Prinzip (revisited) Amortisierte Analyse Median bestimmen in O(n) Alte/Neue Challenge der Woche
Aufgabe 2 (Triangulierung) Gegeben: Menge von n Punkten Zu zeigen: Die Berechnung deren Triangulierung hat mind. Laufzeit von Θ(n log n) (im Einheitskostenmodell)
Aufgabe 2 (Triangulierung) Lösungsansatz: Reduzierung auf ein anderes Problem, dessen mind. Komplexität wir schon kennen In unserem Fall: das Sortieren (vergleichsbasiert) Es gibt nur eine mögliche Triangulierung in der oben dargestellten Situation. Somit haben wir ein Verfahren um eine Liste S={s 1,...,s n } zu sortieren: Ordne die s i zu (x i,y i ) := (s i,0), setze noch einen weiteren Punkt oberhalb z.b. (s 1,1) und mache die Triangulierung. Nun suchen wir die kleinste Koordinate, und können danach alle s i nacheinander durchgehen.
Scanline Prinzip Algorithmus: Q:= Haltepunkte; -- Meist nach x-koord. sortiert (Min-/Maxheap) L:= Void; -- Menge der aktiven Objekte -- Meist nach y-koord. sortiert (AVL-Baum) while Q /= {} do begin Gehe zum nächsten Haltepunkt in Q; aktualisiere(l); Gebe Teillösungen aus; --falls vorhanden end
Scanline Prinzip Wasser-Installation (Aufgabe 8.3)
Scanline Prinzip Flächenberechnung (Aufgabe 8.4)
Amortisierte Analyse Was ist Amortisierte Analyse? Wieso A.A.? Wann A.A.? Let s start with an example...
Amortisierte Analyse Es hat einen Drucker, welcher genug Toner hat für 1 000 Druckaufträge. Kosten für einen Ausdruck: 0.10 Fr. falls es noch genug Toner hat 0.10 Fr. + 100Fr. falls es keinen Toner mehr hat. (da man eine neue Tonerkartusche kaufen muss)
Amortisierte Analyse Was sind nun die Kosten im Worst-Case? Antwort: 100.10 Fr. Da diese Abschätzung sehr pessimistisch ist obwohl korrekt braucht man ein neues Mass: Amortisierten Kosten Von franz. amortir, tilgen Idee: Lasse die billigeren Operationen für die teure(n) bezahlen
Amortisierte Analyse Konkret im Beispiel: Neue amortisierten Kosten für einen Ausdruck: 0.10 Fr. + 0.10 Fr. = 0.20 Fr. falls es noch genug Toner hat Spendenbox Die zusätzlichen 10 Rappen, werden zu Spendezwecken aufbewahrt
Amortisierte Analyse Nachdem nun 1 000 Personen gedruckt haben, wird der Toner leer sein, jedoch wird auch 1 000. 0.10Fr. = 100Fr. in der Spendenbox liegen. Somit kann die 1 001-te Person einen neue Tonerkartusche aus dem Spendengeld kaufen und kann für 0.10Fr. drucken (+ wiederum 0.10Fr. in die nun leere Spendenbox hineintun)
Amortisierte Analyse Fazit: Amort. Kosten für einen Ausdruck: 0.20 Fr. falls es noch genug Toner hat 0.20 Fr. falls es keinen Toner mehr hat. Somit in allen Fällen 0.20Fr. bzw. amortisierte Kosten von 0.20Fr.
Amortisierte Analyse Verallgemeinert: Es hat einen Drucker, welcher genug Toner hat für n Druckaufträge. Eine neue Tonerkartusche kostet n 0.10Fr. Kosten für einen Ausdruck: 0.10 Fr. falls es noch genug Toner hat 0.10 Fr. + n 0.10Fr. falls es keinen Toner mehr hat. Somit amortisierte Kosten von: 0.10Fr. + 0.10Fr. = O(1) (Da unabhängig von n)
Amortisierte Analyse Amortisierte Kosten heisst also: Die Kosten die entstehen, wenn die billigeren Operationen für die teureren bezahlen, sodass die Kosten sich ausgleichen Oft ist dieses Geld hinterlegen von vorher nicht so einfach, denn es hat vielleicht mehrere Spezialfälle, und es ist nicht sofort ersichtlich wieviel Geld man nun hinterlegen soll, je nach Operation.
Amortisierte Analyse Deshalb wird zur Verallgemeinerung eine Balancefunktion Bal l benutzt (auch Potenzialfunktion genannt), um die amort. Kosten zu berechnen Betrachten wir nun alle Operationen zeitlich nacheinander: t l, seien jeweils die tatsächlichen Kosten der l-ten Operation a l, seien die amortisierten Kosten der l-ten Operation
Amortisierte Analyse Die Idee ist schlussendlich dass: tl a l In Worten: Die Summe der tatsächlichen Kosten nach allen Operationen soll nicht grösser sein als die der amortisierten. (Sonst wäre unserer Beweis sinnlos)
Amortisierte Analyse Wir definieren die amortisierten Kosten im l-ten Schritt nun folgendermassen: a l =t l +Bal l Bal l 1 Erklärung: Wir führen die (schon erwähnte) Balance-Funktion ein, welche zusehen soll, dass die Kosten in jedem Schritt amortisiert etwa gleich bleiben soll. (Balance-Funktion ist also sowas wie Geld-Hinterlegen ). Die amortisierten Kosten sind somit jeweils die tatsächlichen Kosten + die Differenz von nacheinanderfolgenden Balance-Funktionen.
Amortisierte Analyse Die Balance-Funktion kann man nun beliebig nach Lust und Laune definieren, mit irgendeiner Eigenschaft vom Problem, welche sich mit der Zeit verändert. Das ist die Stärke der Balance-Funktion, dass sie völlig unabhängig sein kann, da folgendes gilt: al = (t l +Bal l Bal l 1 )=( t l )+Bal n Bal 0 Wir müssen also nur sicherstellen, dass der Wert der Balance-Funktion am Ende minus dem Wert am Anfang nicht negativ ist, dann haben wir schon alles gezeigt.
Amortisierte Analyse Nun ein Beispiel um das ganze zu Illustrieren: Nehmen wir einfachheitshalber wieder das Druckerproblem.
Amortisierte Analyse Es hat einen Drucker, welcher genug Toner hat für n Druckaufträge. t l Tatsächliche Kosten für einen Ausdruck bei der l-ten Operation (bzw. Person): 0.10 Fr. falls es noch genug Toner hat 0.10 Fr. + n 0.10Fr. O(1) O(n) falls es keinen Toner mehr hat. (da man einen neue Tonerkartusche kaufen muss)
Amortisierte Analyse Wir definieren die amortisierten Kosten im l-ten Schritt nun wie erwähnt: a l =t l +Bal l Bal l 1 Als Balance-Funktion wählen wir was kreatives, vielleicht z.b. den Tonerstand in [ml]
Amortisierte Analyse l Bal l Bal l Bal l 1 0 n - 1 n 1-1 2 n 2-1 3 n 3-1......... n 1 1-1 n 0-1 n + 1 n + n n + 2 n 1-1 n + 3 n 2-1.........
Amortisierte Analyse al = (t l +Bal l Bal l 1 )=( t l )+Bal n+1 Bal 0 = 0 =n 0.10Fr.+n 0.10Fr.+0=2n 0.10Fr. (t 0 +...+t n ) t n+1 tl a l = al n+1 2 0.10Fr.=0.20Fr. O(1)
Median in O(n) Der Algorithmus heisst Korrekterweise: Blum-Floyd-Pratt-Rivest-Tarjan (BFPRT) Selektionsalgorithmus [1973]
BFPRT Algorithmus Gegeben: Menge S mit n Elementen Gesucht: Der Median von S, d.h. das (n/2) kleinste Element (abgerundet) Gezeigt wird: (Verallgemeinerung) Das i-kleinste Element von S bestimmen n/2 ist ein Spezialfall davon
BFPRT Algorithmus Vorgehen: Wähleeinkleinesungeradesk 5 Algorithmus: (1) S:={a 1,a 2,a 3,...,a n } z.b. k=5 TeiledasS instückedergrössek, bis auf eines, welches kleiner sein kann. Wirhabentotalalso n k solchegruppen.
BFPRT Algorithmus Algorithmus:... (2) Sortiere jedes der Blöcke (der Grösse k) (3) Bestimme den Median von jedem Block (4) Bestimme den Median dieser Mediane (rekursiv) S:={a 1,a 2,a 3,...,a n }
BFPRT Algorithmus Algorithmus:... (5) Teile das S auf in: S l :={x S:x<s}undS r :={x S:x>s} (6.1) Falls S l i, bestimme das i-kleinste Element von S l rekursiv (6.2) Falls S l =i 1, ist s die Lösung (6.3) Sonst ist S l <i 1, bestimme das (i S l 1) -kleinste Element von S r
BFPRT Algorithmus Berechnung der Laufzeit: Wir bestimmen nun das T(n), die Anzahl der Vergleiche im worst-case. n sind die Anzahl Elemente von S Sehen wir uns die Schritte also nochmals an... Beweis weicht leicht vom Buch/ML ab Ich finde es so einfacher/klarer...
BFPRT Algorithmus Vorgehen: Wähleeinkleinesungeradesk 5 Algorithmus: (1) S:={a 1,a 2,a 3,...,a n } z.b. k=5 TeiledasS instückedergrössek, bis auf eines, welches kleiner sein kann. Wirhabentotalalso n k solchegruppen. in grün jeweils Anzahl Vergleiche (1): gratis
BFPRT Algorithmus Algorithmus:... (2) Sortiere jedes der Blöcke (der Grösse k) (3) Bestimme den Median von jedem Block (4) Bestimme den Median dieser Mediane (rekursiv) S:={a 1,a 2,a 3,...,a n } Anzahl Vergleiche um k Elemente zu sortieren (2): C k. n k (3): gratis n k (4): T( )
BFPRT Algorithmus Algorithmus:... (5) Teile das S auf in: (5): (6): T( n ) S l :={x S:x<s}undS r :={x S:x>s} (6.1) Falls S l i, bestimme das i-kleinste Element von S l rekursiv (6.2) Falls S l =i 1, ist s die Lösung (6.3) Sonst ist S l <i 1, bestimme das (i S l 1) -kleinste Element von n 2 3 4 S r
BFPRT Algorithmus 3 4 Wieso T( n ) bei (6)? Man kann jeweils immer mind. 1/4 ausschliessen, siehe Skizze (das ist auch der eigentliche Clou vom ganzen Algo) S:={a 1,a 2,a 3,...,a n } S r ={x S:x>s} S l ={x S:x<s} s
BFPRT Algorithmus Zusammenfassend haben wir also: (4) (6) (2) (5) T(n) T( n k )+T( 3 4 n )+ n C k k+ n 2 Und wir wollen zeigen, dass: T(n) c n,(c=konst.)
BFPRT Algorithmus Induktionsbeweis: Verankerung: wähle ein genug grosses n 0, s.d. Ind.Schritt: T(n) T( n k )+T( 3 4 n )+ n C k k+ n 2 c ( n k )+c ( 3 4 n )+ n C k k+ n 2 c ( n k )+c (3n)+ nc 4 k k+ n 2 =( c+c 3+ 1C k 4 k k+ 1) n 2! c n - Eine notwendige Bedingung an das c ist somit: T(n 0 ) c n 0 c 1 k C k+ 1 2 1 1 k 3 4 - Für k=5,7,9,... findet man entsprechende c (ausser für k=3)
Andere Selektionsalgorithmen Es gibt eine Reihe weiterer Algos: Bester (im Moment): (2+ε) n+o(n) [Dor/Zwick 2001] Beste bekannte untere Schranke: 2 n o(n) [Bent/John 1985] f(x) f o(g)heisstlim x g(x) =0
Alte Challenge der Woche Gegeben: Eine Menge S bestehend aus n Tupel der Form (x 1,x 2,...,x d ), wobei x i R (d steht also für die Dimension der Tupel) Gesucht: Algorithmus/Datenstruktur welche möglichst Effizient bestimmt ob ein beliebiges Tupel t S ist. Geforderte Laufzeit: O(d + log(n)) (d.h. die Laufzeit für das suchen nach irgendeinem Element, nachdem eine Datenstruktur aufgebaut ist.)
Museumsproblem [Klee 1973]
The Challenge
The Challenge
The Challenge 1 2 3 n
The Challenge Zu zeigen: Wenn n die Anzahl Wände sind im Museum, dann braucht es höchstens n/3 [abgerundet] Wachen.
Ende der Stunde. Questions?