ppt-Format

Werbung
ExternspeicherAlgorithmen
Algorithmen und Datenstrukturen 2
Petra Mutzel
Technische Universität Wien
Institut für Computergraphik und Algorithmen
Durchwandern eines Arrays
for (i=0; i<N; i++) D[i]=i;
C=Permute(D)
Lineares Durchlaufen:
for (i=0; i<N; i++) A[D[i]]=A[D[i]]+1;
Zufälliges Durchlaufen:
for (i=0; i<N; i++) A[C[i]]=A[C[i]]+1;
sec
Durchwandern eines Arrays
9,00
8,00
7,00
6,00
5,00
zufällig
linear
4,00
3,00
2,00
1,00
0,00
18
19
20
21
22
23
Größe 2k
24
25
k
223=8.388.608
sec
Durchwandern eines Arrays
10,00
Logarithmische Skalierung
zufällig
linear
1,00
18
19
20
21
22
23
Größe 2k
24
25
k
Hierarchisches Speichermodell moderner Computer
Externspeicher
CPU
Cache
main
(internal)
memory
Faktor 100 schneller
als
Faktor 1000-106
schneller als
secondary memory
Probleme klassischer Algorithmen
• Ein Zugriff im Hauptspeicher spricht jeweils
eine Speicherzelle an und liefert jeweils eine
Einheit zurück
• Ein Zugriff im Externspeicher (ein I/O) liefert
jeweils einen ganzen Block von Daten
zurück
• Meist keine Lokalität bei Speicherzugriffen,
und deswegen mehr Speicherzugriffe als
nötig
Problem ist aktueller denn je, denn
• Geschwindigkeit der Prozessoren
verbessert sich zwischen 30%-50%
im Jahr;
• Geschwindigkeit des Speichers nur
um 7%-10% pro Jahr
• „One of the few resources increasing
faster than the speed of computer
hardware is the amount of data to be
processed.“
Das Theoretische Sekundärspeichermodell
(Parallel Disk Modell)
Modell von Vitter
und Shriver 1994
M=
Anzahl der
Elemente
im Hauptspeicher
CPU
Rechenoperationen können
nur mit Daten im Hauptspeicher getätigt werden
Annahme: B<=M/2
main
(internal)
memory
Externspeicher
voneinander
unabhängig
B = Anzahl der Elemente,
die in einen Block passen
Analyse von Externen Algorithmen
• Anzahl der ausgeführten I/OOperationen
• Anzahl der ausgeführten CPUOperationen im RAM-Modell
• Anzahl der belegten Blöcke auf
dem Sekundärspeicher
Untere Schranken im EM-Modell
• Einlesen einer Menge von N Elementen
benötigt mindestens Θ(N/B) I/O‘s
• Sortieren einer Menge von N Elementen
benötigt mindestens
Θ(N/B log1+M/B (1+N/B)) (o.Bw.)
• Suche in dynamischen Daten von N
Elementen benötigt mindestens Zeit
Θ(log N / log B) I/O-Operationen
Externspeicherdatenstruktur für
Prioritätswarteschlangen
• Dynamische Datenstruktur für
Elemente: Schlüssel + Information
• Operationen:
– Get_Min: Ausgabe der Elemente mit
kleinstem Schlüssel
– Del_Min: Ausgabe und Entfernung des
kleinsten Elements
– Insert: Einfügen eines neuen Elements
Welche Datenstrukturen kennen Sie dafür?
Externe Array-Heaps
• Im internen Arbeitsspeicher: Heap
• Im externen Speicher: Menge von
sortierten Feldern unterschiedlicher
Länge
Die Anzahl der Plätze in einem Slot von Li+1
Externe
Array-Heaps
entspricht der Anzahl aller Plätze in Li
Lemma 1: li+1=li (μ+1)
L Schichten Li
L3
li=(cM)i/Bi-1
l3=l2(μ+1)
L2
L1
l2
c=1/7
L<=4
μ=(cM/B)-1 μ
μ
Slots:
enthalten
sortierte Folge
oder sind leer
Operation Insert
• Fügt neue Elemente immer in den internen Heap
H ein
• Falls kein Platz mehr in H ist, dann werden
vorher l1=cM dieser Elemente in den
Sekundärspeicher bewegt:
– Falls freier Slot in L1 existiert, dann werden diese
Elemente in sortierter Folge dorthin bewegt
– Sonst: Alle Elemente in L1 werden mit den neuen
Elementen aus H zu einer sortierten Liste gemischt, die
dann in einen freien Slot von L2 geschrieben werden.
– Falls L2 auch kein freier Slot, wiederhole L3,...bis frei.
Operation Del_Min
• Invariante: Das kleinste Element befindet sich
immer in H
• Dazu: Heap wird in zwei Heaps geteilt: H1 und
H2:
– H1 enthält immer die neu eingefügten Elemente,
maximal 2cM
– H2 speichert maximal die kleinsten B Elemente in
jedem belegten Slot j in jeder Schicht Li
• Lemma 2: Es befinden sich maximal cM(2+L)
Elemente im Hauptspeicher
• Zusätzlich wird (μ+1)B=cM gebraucht, um die μ
Slots plus eine Overflow Folge zu mischen
Es muss gelten: M>=cM(3+L);
Operation
Del_Min
Daraus folgt: bei c=1/7 => L<=4
• Invariante: Das kleinste Element befindet sich
immer in H
• Dazu: Heap wird in zwei Heaps geteilt: H1 und
H2:
– H1 enthält immer die neu eingefügten Elemente,
maximal 2cM
– H2 speichert maximal die kleinsten B Elemente in
jedem belegten Slot in L
• Lemma 2: Es befinden sich maximal cM(2+L)
Elemente im Hauptspeicher
• Zusätzlich wird (μ+1)B=cM gebraucht, um die μ
Slots plus eine Overflow Folge zu mischen
Operationen (1)
• Merge-Level (i,S,S´):
– produziert eine sortierte Folge S´ durch das
Mischen der sortierten Folge der μ Slots in Li
(inkl. der ersten Blocks in H2) und die sortierte
Sequenz S.
– Analyse: O(li+1/B) I/O´s
• Store(i;S):
– Annahme: Li enthält einen leeren Slot und die
Folge S besitzt Länge im Bereich [li/2 , li]
– S wird in einen leeren Slot von Li gespeichert
und seine kleinsten B Elemente werden nach
H bewegt.
– Analyse: O(li/B) I/O´s
Operationen (2)
• Load (i,j):
– Holt die nächsten B kleinsten Elemente vom j-ten
Slot aus Li in den internen Heap H2.
– Analyse: O(1) I/O´s
• Compact(i):
– Annahme: es existieren mind. 2 Slots in Li, mit
Gesamtzahl an Elementen (inkl. H), höchstens li.
– Diese beiden Slots werden gemischt, und in einen
freien Slot von Li eingetragen. Damit wird ein Slot in
Li frei.
– S wird zu diesem freien Slot bewegt (kleinste B
Elemente nach H).
– Analyse: O(li/B) I/O´s
Operation Insert
• Fügt neue Elemente immer in den internen Heap
H ein
• Falls kein Platz mehr in H1 ist, dann werden die
größten l1=cM Elemente nach L1 bewegt (und
die kleinsten B davon nach H2):
– Falls freier Slot in L1 existiert, dann wird Store(1,S)
aufgerufen
– Sonst: Alle Elemente in L1 enthalten mindestens li/2
Elemente: Merge-Level(i,S,S´)
– Falls freier Slot in L2 existiert, dann: Store(2,S)
– Sonst: wiederhole L3,...bis frei.
Operation Del_Min
• Das kleinste Element wird vom internen Heap entfernt
(H1 oder H2).
• Falls in H2: dann korrespondiert dieses zu Slot j einer
Schicht Li.
• Falls es das letzte Element in H2 ist, das zu j gehört,
dann werden die nächsten B Elemente von Slot j nach
H2 mittels Load(i,j) bewegt.
• Nach jedem Load(i,j) wird Compact(i) bei Bedarf
aufgerufen
Korrektheit
• Lemma 3: Das kleinste Element ist immer in H
(H1 oder H2).
• Lemma 4: Es ist immer ein freier Platz für neue
Elemente vorhanden.
I/O Schranken
• Annahme: cM>3B
• Lemma 5: Nach N Operationen existieren
höchstens L<=logcM/B(N/B) Schichten.
• Lemma 6: Store(i,S) benötigt höchstens 3li/B
I/O´s. Compact(i+1) und Merge-Level(i,S,S´)
benötigen höchstens 3li+1/B I/O´s.
I/O Schranken
Theorem:
Annahme: cM>3B und 0<c<1/3 und N<=B(cM/B)1/c-3
In einer Folge von N Operationen der Art Insert und Del_Min
benötigt
– Insert amortisiert 18/B(log cM/B(N/B)) I/O´s und
– Del_Min 7/B amortisierte I/O´s.
Speicherplatzbedarf
Lemma 7: Jede Schicht enthält höchstens einen Slot, der
nicht-leer und aus weniger als li/2 Elementen besitzt.
Theorem 2: Die Gesamtanzahl der benützten Blöcke ist
höchstens 2(X/B)+2, wobei X die Anzahl der Elemente im
Heap H ist. Der Gesamtspeicherplatz im Arbeitsspeicher
beträgt cM(3+L).
Insert: zuerst Insert, dann Del_Min
100000
10000
radix heap
array heap
buffer tree
B-tree
1000
100
10
1
1
5
10
25
50
75 100 150 200
*106
Del_Min: zuerst Insert, dann Del_Min
100000
10000
radix heap
array heap
buffer tree
B-tree
1000
100
10
1
1
5
10
25
50
75 100 150 200
*106
Insert: Zufällige Folge
1000000
100000
10000
radix heap
array heap
buffer tree
1000
100
10
1
1
5
10
25
50
75 100 150 200
*106
Del_Min: Zufällige Folge
1000000
100000
10000
radix heap
array heap
buffer tree
1000
100
10
1
1
5
10
25
50
75 100 150 200
*106
Literatur
Die Vorlesung hält sich eng an:
Andreas Crauser: LEDA-SM: External Memory Algorithms and Data
Structures in Theory and Praxis. Dissertation, Max-Planck-Institut für
Informatik, Saarbrücken, 2001. Kapitel 4: Priority Queues;
http://www.mpi-sb.mpg.de/~crauser/degrees.html
Klaus Brengel, Andreas Crauser, Paolo Ferragina, Ulrich Meyer: An
Experimental Study of Priority Queues in External Memory, Proc. of the
Workshop on Algorithmic Engineering (WAE ´99), Lecture Notes in
Computer Science 1668, 345-359, Springer-Verlag, 1999
Vielen Dank
Herunterladen