Algorithmen I

Werbung
Algorithmen I
Prof. Jörn Müller-Quade
07.06.2017
Institut für Theoretische Informatik
Web:
https://crypto.iti.kit.edu/index.php?id=799
(Folien von Peter Sanders)
KIT Institut für Theoretische Informatik
1
Adressierbare Prioritätslisten
Procedure build({e1 , . . . , en }) M:= {e1 , . . . , en }
Function size return |M|
Procedure insert(e) M:= M ∪ {e}
Function min return min M
Function deleteMin e:= min M ; M:= M \ {e}; return e
Function remove(h : Handle) e:= h; M:= M \ {e}; return e
Procedure decreaseKey(h : Handle, k : Key)
assert key(h) ≥ k ; key(h):= k
Procedure merge(M 0 ) M:= M ∪ M 0
KIT Institut für Theoretische Informatik
2
Adressierbare Prioritätslisten: Anwendungen
Greedy-Algorithmus:
while
solution not complete
do
add the best available piece to the solution
update piece priorities
// e.g., using addressable priority queue
Beispiele:
I Dijkstras Algorithmus für kürzeste Wege
I Jarník-Prim Algorithmus für minimale Spannbäume
I Scheduling: Jobs
→
am wenigsten belastete Maschine
I Hierarchiekonstruktion für Routenplanung
I Suche nach erfüllenden Belegungen aussagenlog. Formeln?
KIT Institut für Theoretische Informatik
3
Adressierbare Binäre Heaps
1
Problem:
3
Elemente bewegen sich.
4
Dadurch werden Elementverweise ungültig.
7
68
9
Ausweg: Unbewegliche Vermittler-Objekte.
Invariante: proxy(e) verweist auf Position von e .
(Ein)
Vermittler bei jeder Vertauschung aktualisieren.
Rückverweis Element
→
1
Vermittler
3
4
7
6
8
9
Laufzeit:
O(log n)
für alle Operationen ausser merge und buildHeap, die
O(n)
brauchen.
KIT Institut für Theoretische Informatik
4
Adressierbare Prioritätslisten Laufzeiten
Operation
build
size
min
insert
deleteMin
remove
decreaseKey
merge
Binary Heap
Fibonacci-Heap (Buch)
O(n)
O(1)
O(1)
O(log n)
O(log n)
O(log n)
O(log n)
O(n)
O(n)
O(1)
O(1)
O(1)
O(log n)
O(log n)
O(1) am.
O(1)
KIT Institut für Theoretische Informatik
5
Prioritätslisten: Zusammenfassung
I Häug benötigte Datenstruktur
I Adressierbarkeit ist nicht selbstverständlich
I Binäre Heaps sind einfache, relativ eziente Implementierung
KIT Institut für Theoretische Informatik
6
Was haben wir jenseits von Prioritätslisten gelernt?
I implizites Layout von Binärbäumen
∑j j 2j
I Heapsort (inplace!)
I
KIT Institut für Theoretische Informatik
7
Sortierte Folgen
KIT Institut für Theoretische Informatik
8
Sortierte Folgen:
he1 , . . . , en i
mit
e1 ≤ · · · ≤ en
kennzeichnende Funktion:
M.locate(k):= addressof
min {e
∈ M : e ≥ k}
Navigations−Datenstruktur
2
3
5
7
11
13
17
19
00
Annahme: Dummy-Element mit Schlüssel ∞
Achtung: In Abbildungen sieht ∞ wie 00 aus
KIT Institut für Theoretische Informatik
9
Statisch: Sortiertes Feld mit binärer Suche
// Find min {i ∈ 1..n + 1 : a[i] ≥ k}
Function locate(a[1..n], k : Element)
(`, r ):= (0, n + 1)
// Assume a[0] = −∞, a[n + 1] = ∞
while ` + 1 < r do
invariant 0 ≤ ` < r ≤ n + 1 and a[`] < k ≤ a[r ]
m:= b(r + `)/2c
// ` < m < r
if k ≤ a[m] then r := m else `:= m
return r
Übung:
Übung:
Müssen die Sentinels
∞
/
−∞
tatsächlich vorhanden sein?
Variante von binärer Suche:
bestimme
`, r
so dass
a[`..r − 1] = [k, . . . , k], a[` − 1] < k
und
a[r ] > k
KIT Institut für Theoretische Informatik
10
Statisch: Sortiertes Feld mit binärer Suche
// Find min {i ∈ 1..n + 1 : a[i] ≥ k}
Function locate(a[1..n], k : Element)
(`, r ):= (0, n + 1)
// Assume a[0] = −∞, a[n + 1] = ∞
while ` + 1 < r do
invariant 0 ≤ ` < r ≤ n + 1 and a[`] < k ≤ a[r ]
m:= b(r + `)/2c
// ` < m < r
if k ≤ a[m] then r := m else `:= m
return r
O(log n)
Beweisidee: r − `
Zeit:
halbiert sich in jedem Schritt
KIT Institut für Theoretische Informatik
11
Binäre Suche Beispiel: k = 15
Function
locate(a[1..n], k : Element)
// min {i ∈ 1..n + 1 : a[i] ≥ k}
(`, r ):= (0, n + 1)
// Assume a[0] = −∞, a[n + 1] = ∞
while ` + 1 < r do
invariant 0 ≤ ` < r ≤ n + 1 and a[`] < k ≤ a[r ]
m:= b(r + `)/2c
// ` < m < r
if k ≤ a[m] then r := m else `:= m
return r
Indizes:
Einträge:
[0,
1,
2,
3,
4,
5,
6,
7,
8,
9]
[−∞,
2,
3,
5,
7,
11,
13,
17,
19,
[−∞,
2,
3,
5,
7,
11,
13,
17,
19,
[−∞,
2,
3,
5,
7,
11,
13,
17,
19,
[−∞,
2,
3,
5,
7,
11,
13,
17,
19,
∞]
∞]
∞]
∞]
KIT Institut für Theoretische Informatik
12
Dynamische Sortierte Folgen Grundoperationen
insert, remove, update, locate
(M.locate(k):= min {e
O(log n)
∈ M : e ≥ k})
KIT Institut für Theoretische Informatik
13
Mehr Operationen
hmin, . . . , a, . . . , b, . . . , maxi
min: Erstes Listenelement
Zeit
O(1)
max: Letztes Listenelement
Zeit
O(1)
// O(log n + |result|)
rangeSearch(a, b)
hi
h:= locate(a)
while h → e ≤ b do
result:=
result.pushBack(h
→ e)
Navigations−Datenstruktur
h:= h →next
return
result
2
3
5
7
11
13
17
19
00
KIT Institut für Theoretische Informatik
14
Noch mehr Operationen
I (re)build: Navigationsstruktur für sortierte Liste aufbauen
I
I
hw , . . . , xi.concat(hy , . . . , zi) = hw , . . . , x, y , . . . , zi
hw , . . . , x, y , . . . , zi.split(y ) = (hw , . . . , xi, hy , . . . , zi)
Zählen:
rank, select, rangeSize
O(n)
O(log n)
O(log n)
O(log n)
KIT Institut für Theoretische Informatik
15
Abgrenzung
Hash-Tabelle: nur insert, remove, nd. Kein locate, rangeQuery
Sortiertes Feld: nur bulk-Updates. Aber:
Hybrid-Datenstruktur oder log
n
M geometrisch wachsende
statische Datenstrukturen
Prioritätsliste: nur insert, deleteMin, (decreaseKey, remove). Dafür:
schnelles merge
Sortierte Folgen allgemein: die eierlegende Wollmilchdatenstruktur.
Etwas langsamer als speziellere Datenstrukturen
KIT Institut für Theoretische Informatik
16
Sortierte Folgen Anwendungen
I Best-First Heuristiken
I Algorithmische Geometrie: Sweepline-Datenstrukturen
I Datenbankindex
I ...
KIT Institut für Theoretische Informatik
17
Anwendungsbeispiel: Best Fit Bin Packing
Procedure
binPacking(s)
B : SortedSequence
// used bins sorted by free capacity
foreach e ∈ s by decreasing element size
// sort
if ¬∃b ∈ B : free(b) ≥ e then B.insert(new bin)
locate b ∈ B with smallest free(b) ≥ e
insert e into bin b
Zeit:
O(|s| log |s|)
Qualität: gut. Details: nicht hier
KIT Institut für Theoretische Informatik
18
Binäre Suchbäume
Blätter: Elemente
einer sortierten Folge.
Innere Knoten v = (k, `, r ),
(Spalt-Schlüssel,
Invariante:
über
über
`
r
linker Teilbaum, rechter Teilbaum).
erreichbare Blätter haben Schlüssel
erreichbare Blätter haben Schlüssel
≤k
>k
17
7
3
13
2
2
5
3
5
11
7
11
19
13
17
19
00
KIT Institut für Theoretische Informatik
19
Varianten, Bemerkungen
I Dummy-Element im Prinzip verzichtbar
I Oft speichern auch innere Knoten Elemente
I Suchbaum wird oft als Synomym für sortierte Folge verwendet.
(Aber das vermischt (eine) Implementierung mit der Schnittstelle)
17
7
3
2
13
5
11
19
KIT Institut für Theoretische Informatik
20
Herunterladen