T(n)

Werbung
Datenstrukturen und
Algorithmen
VO 708.031
03.11.2010
[email protected]
1
Wiederholung
• Elementare Datenstrukturen: Liste, Stack, Schlange
• Rekursionen: einfacher zu implementieren, aber oft erhöhter
Laufzeit- und Speicherbedarf
• Rekursive Zeitgleichungen: Lösen durch rekursives Einsetzen
• Divide-and-Conquer: rekursives Aufteilen in Teilprobleme und
Zusammenfassen der Teillösungen
• Merge-Sort: Sortieralgorithmus nach Divide-and-Conquer
Prinzip
03.11.2010
[email protected]
2
Wiederholung
• Sortieren durch Verschmelzen (Merge-Sort):
T(n) = 2T(n/2) + O(n)
⇒ T(n) = O(n*log n)
03.11.2010
[email protected]
S(n)=O(n)
3
Halden (heaps)
• Definition:
Eine Halde (Heap) ist ein lineares Feld A[1..n], wobei gilt:
A[i] ≥ max {A[2i], A[2i+1]}, für i=1,2,…,n/2
• Beispiel:
• Jede absteigende Sortierung ist eine Halde, aber nicht umgekehrt
• Es gibt mehrere Möglichkeiten gegebene Werte als Halde zu formulieren
03.11.2010
[email protected]
4
Halden (heaps)
• Darstellung als Binärbaum:
Eigenschaften:
• A[1] ist das Maximum (Wurzel)
• Nur letztes Niveau evtl. inkomplett
• Jeder Teilbaum ist wieder eine Halde
i 
Vater (i ) =  
2
Links(i ) = 2i
Höhe h = ld n 
Rechts(i ) = 2i + 1
03.11.2010
[email protected]
5
Aufbau einer Halde
• Zentrale Prozedur ist das Verhalden eines Elementes
Voraussetzung: Die Teilbäume mit Wurzel LINKS(i) und RECHTS(i) sind Halden,
aber Element i verletzt möglicherweise die Haldenbedingung
Laufzeit: T(n) = O(log n)
03.11.2010
[email protected]
6
Aufbau einer Halde
• Algorithmus zum Aufbau einer Halde aus einem linearen Feld
A[1..n]:
– Blätter sind bereits Halden (A[n/2+1..n])
– Laufzeit: T(n) = n/2*O(log n) = O(n*log n)
– Aber: Element der Höhe h kann in O(h) Zeit verhaldet
werden ⇒ Laufzeit T(n) = O(n)
03.11.2010
[email protected]
7
Sortieren mit Halden
• Idee: Verwende die Tatsache, dass Maximum immer an erster
Stelle steht
Nach Haldenaufbau:
Vertausche A[1], A[n]
Verkleinere Halde um 1
Verhalde A[1]
03.11.2010
[email protected]
8
Sortieren mit Halden
• Idee: Verwende die Tatsache, dass Maximum immer an erster
Stelle steht
HEAPSORT(A)
1: BAUE_HALDE(A)
2: FOR i=n DOWNTO 2
3:
VERTAUSCHE(A[1],A[i])
4:
N = N-1
5:
VERHALDE(A,1)
BAUE_HALDE
N≤n aktuelle Haldengröße:
VERHALDE
T(n) = O(n) + (n-1) * O(log n) =
O(n*log n)
03.11.2010
[email protected]
9
Heap-Sort
• Vergleich:
– Insertion-Sort: T(n) = O(n2), aber in-place
– Merge-Sort: T(n) = O(n*log n), aber Θ(n) Zusatzspeicher
– Heap-Sort: T(n) = O(n*log n), und in-place
• Heap-Sort kombiniert die Vorteile der beiden anderen
Algorithmen
• Design-Prinzip: Verwendung einer speziellen Datenstruktur
(heap) die bestimmte effiziente Operationen ermöglicht
(Maximum in O(1) Zeit)
03.11.2010
[email protected]
10
Prioritäts-Warteschlangen
• Definition:
Eine Warteschlange ist eine Datenstruktur, die auf einer
Menge A folgende Operationen erlaubt:
EINFÜGEN(A,x)
A=A∪{x}
MAXIMUM(A)
return max A
ENTFERNE_MAX(A)
A=A\{max A}
• Anwendung: Job-Scheduling; der Job maximaler Priorität wird
dynamisch bestimmt und berechnet
03.11.2010
[email protected]
11
Prioritäts-Warteschlangen
• Operationen auf einer Halde A:
T(n) = O(1)
T(n) = O(log n)
T(n) = O(log n)
03.11.2010
[email protected]
12
Prioritäts-Warteschlangen
• Der Aufbau einer Halde mittels EINFÜGEN ist ineffizient:
BAUE_HALDE_LANGSAM(A)
1: N=1
2: FOR i=2 TO n
3:
EINFÜGEN(A,A[i])
T(n) = Θ(n*log n)
T(n) = O(n)
03.11.2010
[email protected]
13
Danke für Ihre Aufmerksamkeit!
Bis zum nächsten Mal.
(Donnerstag, 10. Nov. 2011, 11:15, i13)
03.11.2010
[email protected]
14
Herunterladen