10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren...

111
10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort 269

Transcript of 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren...

Page 1: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

10. Sortieren III

Untere Schranken für das vergleichsbasierte Sortieren, Radix- undBucketsort

269

Page 2: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

10.1 Untere Grenzen fur Vergleichbasiertes Sortieren

[Ottman/Widmayer, Kap. 2.8, Cormen et al, Kap. 8.1]

270

Page 3: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Untere Schranke fur das Sortieren

Bis hierher: Sortieren im schlechtesten Fall benötigt Ω(n log n)Schritte.

Geht es besser?

Nein:TheoremVergleichsbasierte Sortierverfahren benötigen im schlechtesten Fallund im Mittel mindestens Ω(n log n) Schlüsselvergleiche.

271

Page 4: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Untere Schranke fur das Sortieren

Bis hierher: Sortieren im schlechtesten Fall benötigt Ω(n log n)Schritte.

Geht es besser? Nein:TheoremVergleichsbasierte Sortierverfahren benötigen im schlechtesten Fallund im Mittel mindestens Ω(n log n) Schlüsselvergleiche.

271

Page 5: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Vergleichsbasiertes Sortieren

Algorithmus muss unter n! vielen Anordnungsmöglichkeiten einerFolge (Ai)i=1,...,n die richtige identifizieren.

Zu Beginn weiss der Algorithmus nichts.Betrachten den “Wissensgewinn” des Algorithmus alsEntscheidungsbaum:

Knoten enthalten verbleibende MöglichkeitenKanten enthalten Entscheidungen

272

Page 6: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Vergleichsbasiertes Sortieren

Algorithmus muss unter n! vielen Anordnungsmöglichkeiten einerFolge (Ai)i=1,...,n die richtige identifizieren.Zu Beginn weiss der Algorithmus nichts.

Betrachten den “Wissensgewinn” des Algorithmus alsEntscheidungsbaum:

Knoten enthalten verbleibende MöglichkeitenKanten enthalten Entscheidungen

272

Page 7: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Vergleichsbasiertes Sortieren

Algorithmus muss unter n! vielen Anordnungsmöglichkeiten einerFolge (Ai)i=1,...,n die richtige identifizieren.Zu Beginn weiss der Algorithmus nichts.Betrachten den “Wissensgewinn” des Algorithmus alsEntscheidungsbaum:

Knoten enthalten verbleibende MöglichkeitenKanten enthalten Entscheidungen

272

Page 8: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Vergleichsbasiertes Sortieren

Algorithmus muss unter n! vielen Anordnungsmöglichkeiten einerFolge (Ai)i=1,...,n die richtige identifizieren.Zu Beginn weiss der Algorithmus nichts.Betrachten den “Wissensgewinn” des Algorithmus alsEntscheidungsbaum:

Knoten enthalten verbleibende Möglichkeiten

Kanten enthalten Entscheidungen

272

Page 9: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Vergleichsbasiertes Sortieren

Algorithmus muss unter n! vielen Anordnungsmöglichkeiten einerFolge (Ai)i=1,...,n die richtige identifizieren.Zu Beginn weiss der Algorithmus nichts.Betrachten den “Wissensgewinn” des Algorithmus alsEntscheidungsbaum:

Knoten enthalten verbleibende MöglichkeitenKanten enthalten Entscheidungen

272

Page 10: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Entscheidungsbaum

a < b

b < c

abc a < c

acb cab

b < c

a < c

bac bca

cba

Ja Nein

Ja Nein Ja Nein

Ja Nein Ja Nein

abc acb cab bac bca cba

abc acb cab bac bca cba

acb cab bac bca

273

Page 11: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Entscheidungsbaum

Die Höhe eines binären Baumes mit L Blättern ist mindestenslog2 L. ⇒ Höhe des Entscheidungsbaumesh ≥ log n! ∈ Ω(n log n).11

Somit auch die Länge des längsten Pfades im Entscheidungsbaum∈ Ω(n log n).

Bleibt zu zeigen: mittlere Länge M(n) eines PfadesM(n) ∈ Ω(n log n).

11logn! ∈ Θ(n logn):logn! =

∑nk=1 log k ≤ n logn.

logn! =∑n

k=1 log k ≥∑n

k=n/2 log k ≥ n2· log n

2.

274

Page 12: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Untere Schranke im Mittel

Tbl

Tbr

← br →← bl →

Entscheidungsbaum Tn mit n Blättern, mittlereTiefe eines Blatts m(Tn)

Annahme: m(Tn) ≥ log n nicht für alle n.

Wähle kleinstes b mit m(Tb) < log n⇒ b ≥ 2

bl + br = b, oBdA bl > 0 und br > 0⇒bl < b, br < b⇒ m(Tbl) ≥ log bl undm(Tbr) ≥ log br

275

Page 13: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Untere Schranke im Mittel

Mittlere Tiefe eines Blatts:

m(Tb) =blb

(m(Tbl) + 1) +brb

(m(Tbr) + 1)

≥ 1

b(bl(log bl + 1) + br(log br + 1)) =

1

b(bl log 2bl + br log 2br)

≥ 1

b(b log b) = log b.

Widerspruch. Die letzte Ungleichung gilt, da f(x) = x log x konvex ist und für eine konvexeFunktion gilt f((x + y)/2) ≤ 1/2f(x) + 1/2f(y) (x = 2bl, y = 2br einsetzen).12

Einsetzen von x = 2bl, y = 2br, und bl + br = b.

12allgemein f(λx+ (1− λ)y) ≤ λf(x) + (1− λ)f(y) für 0 ≤ λ ≤ 1.276

Page 14: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

10.2 Radixsort und Bucketsort

Radixsort, Bucketsort [Ottman/Widmayer, Kap. 2.5, Cormen et al, Kap. 8.3]

277

Page 15: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix Sort

Vergleichsbasierte Sortierverfahren: Schlüssel vergleichbar (< oder>, =). Ansonsten keine Voraussetzung.

Andere Idee: nutze mehr Information über die Zusammensetzungder Schlüssel.

278

Page 16: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix Sort

Vergleichsbasierte Sortierverfahren: Schlüssel vergleichbar (< oder>, =). Ansonsten keine Voraussetzung.

Andere Idee: nutze mehr Information über die Zusammensetzungder Schlüssel.

278

Page 17: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Annahme: Schlüssel darstellbar als Wörter aus einem Alphabet mitm Elementen.

Beispiele

m = 10 Dezimalzahlen 183 = 18310m = 2 Dualzahlen 1012m = 16 Hexadezimalzahlen A016m = 26 Wörter “INFORMATIK”

m heisst die Wurzel (lateinisch Radix) der Darstellung.

279

Page 18: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Annahme: Schlüssel darstellbar als Wörter aus einem Alphabet mitm Elementen.Beispiele

m = 10 Dezimalzahlen 183 = 18310m = 2 Dualzahlen 1012m = 16 Hexadezimalzahlen A016m = 26 Wörter “INFORMATIK”

m heisst die Wurzel (lateinisch Radix) der Darstellung.

279

Page 19: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Annahme: Schlüssel darstellbar als Wörter aus einem Alphabet mitm Elementen.Beispiele

m = 10 Dezimalzahlen 183 = 18310

m = 2 Dualzahlen 1012m = 16 Hexadezimalzahlen A016m = 26 Wörter “INFORMATIK”

m heisst die Wurzel (lateinisch Radix) der Darstellung.

279

Page 20: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Annahme: Schlüssel darstellbar als Wörter aus einem Alphabet mitm Elementen.Beispiele

m = 10 Dezimalzahlen 183 = 18310m = 2 Dualzahlen 1012m = 16 Hexadezimalzahlen A016

m = 26 Wörter “INFORMATIK”

m heisst die Wurzel (lateinisch Radix) der Darstellung.

279

Page 21: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Annahme: Schlüssel darstellbar als Wörter aus einem Alphabet mitm Elementen.Beispiele

m = 10 Dezimalzahlen 183 = 18310m = 2 Dualzahlen 1012m = 16 Hexadezimalzahlen A016m = 26 Wörter “INFORMATIK”

m heisst die Wurzel (lateinisch Radix) der Darstellung.

279

Page 22: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Schlüssel =m-adische Zahlen mit gleicher Länge.

Verfahren z zur Extraktion der k-ten Ziffer eines Schlüssels inO(1) Schritten.

Beispielz10(0, 85) = 5z10(1, 85) = 8z10(2, 85) = 0

280

Page 23: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Schlüssel =m-adische Zahlen mit gleicher Länge.Verfahren z zur Extraktion der k-ten Ziffer eines Schlüssels inO(1) Schritten.

Beispielz10(0, 85) = 5z10(1, 85) = 8z10(2, 85) = 0

280

Page 24: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Annahmen

Schlüssel =m-adische Zahlen mit gleicher Länge.Verfahren z zur Extraktion der k-ten Ziffer eines Schlüssels inO(1) Schritten.

Beispielz10(0, 85) = 5z10(1, 85) = 8z10(2, 85) = 0

280

Page 25: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

Schlüssel mit Radix 2.

Beobachtung: Wenn k ≥ 0,

z2(i, x) = z2(i, y) für alle i > k

undz2(k, x) < z2(k, y),

dann x < y.

281

Page 26: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

Idee:

Starte mit maximalem k.Binäres Aufteilen der Datensätze mit z2(k, ·) = 0 vs. z2(k, ·) = 1wie bei Quicksort.k ← k − 1.

282

Page 27: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 28: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 29: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 30: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 31: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 32: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 33: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 34: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 35: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Radix-Exchange-Sort

0111 0110 1000 0011 0001

0111 0110 0001 0011 1000

0011 0001 0110 0111 1000

0001 0011 0110 0111 1000

0001 0011 0110 0111 1000

283

Page 36: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Algorithmus RadixExchangeSort(A, l, r, b)Input : Array A der Lange n, linke und rechte Grenze 1 ≤ l ≤ r ≤ n,

Bitposition bOutput : Array A, im Bereich [l, r] nach Bits [0, . . . , b] sortiert.if l > r and b ≥ 0 then

i← l − 1j ← r + 1repeat

repeat i← i + 1 until z2(b, A[i]) = 1 and i ≥ jrepeat j ← j + 1 until z2(b, A[j]) = 0 and i ≥ jif i < j then swap(A[i], A[j])

until i ≥ jRadixExchangeSort(A, l, i− 1, b− 1)RadixExchangeSort(A, i, r, b− 1)

284

Page 37: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Analyse

RadixExchangeSort ist rekursiv mit maximaler Rekursionstiefe =maximaler Anzahl Ziffern p.

Laufzeit im schlechtesten Fall O(p · n).

285

Page 38: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122 323

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 39: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122

3

238

181929

121 131 21 122 3 23 8 18 19 29

286

Page 40: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122

3

23

8

181929

121 131 21 122 3 23 8 18 19 29

286

Page 41: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122

3

23

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 42: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122 3

23

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 43: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

121

13121

122 3

23

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 44: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

121131

21

122 3

23

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 45: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

121131

21

122 323

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 46: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122 323

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 47: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122 323

818

19

29

121 131 21 122 3 23 8 18 19 29

286

Page 48: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122 323

818

1929

121 131 21 122 3 23 8 18 19 29

286

Page 49: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 122 121 131 23 21 19 29

0 1 2 3 4 5 6 7 8 9

12113121

122 323

818

1929

121 131 21 122 3 23 8 18 19 29286

Page 50: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)

121 131 21 122 3 23 8 18 19 29

0 1 2 3 4 5 6 7 8 9

38

1819

12121

1222329

131

3 8 18 19 121 21 122 23 29

287

Page 51: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)

121 131 21 122 3 23 8 18 19 29

0 1 2 3 4 5 6 7 8 9

38

1819

12121

1222329

131

3 8 18 19 121 21 122 23 29

287

Page 52: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)

121 131 21 122 3 23 8 18 19 29

0 1 2 3 4 5 6 7 8 9

38

1819

12121

1222329

131

3 8 18 19 121 21 122 23 29287

Page 53: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 19 121 21 122 23 29

0 1 2 3 4 5 6 7 8 9

38

1819212329

121122131

3 8 18 19 21 23 29 121 122 131

288

Page 54: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 19 121 21 122 23 29

0 1 2 3 4 5 6 7 8 9

38

1819212329

121122131

3 8 18 19 21 23 29 121 122 131

288

Page 55: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Bucket Sort (Sortieren durch Fachverteilen)3 8 18 19 121 21 122 23 29

0 1 2 3 4 5 6 7 8 9

38

1819212329

121122131

3 8 18 19 21 23 29 121 122 131288

Page 56: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementationsdetails

Bucketgrösse sehr unterschiedlich. Zwei Möglichkeiten

Verkettete Liste für jede Ziffer.Ein Array der Länge n, Offsets für jede Ziffer in erstem Durchlaufbestimmen.

289

Page 57: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementationsdetails

Bucketgrösse sehr unterschiedlich. Zwei Möglichkeiten

Verkettete Liste für jede Ziffer.

Ein Array der Länge n, Offsets für jede Ziffer in erstem Durchlaufbestimmen.

289

Page 58: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementationsdetails

Bucketgrösse sehr unterschiedlich. Zwei Möglichkeiten

Verkettete Liste für jede Ziffer.Ein Array der Länge n, Offsets für jede Ziffer in erstem Durchlaufbestimmen.

289

Page 59: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

11. Elementare Datentypen

Abstrakte Datentypen Stapel, Warteschlange,Implementationsvarianten der verketteten Liste, amortisierteAnalyse [Ottman/Widmayer, Kap. 1.5.1-1.5.2, Cormen et al, Kap.10.1.-10.2,17.1-17.3]

290

Page 60: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Abstrakte Datentypen

Wir erinnern uns13 (Vorlesung Informatik I)

Ein Stack ist ein abstrakter Datentyp (ADT) mit Operationen

push(x, S): Legt Element x auf den Stapel S.pop(S): Entfernt und liefert oberstes Element von S, oder null.top(S): Liefert oberstes Element von S, oder null.isEmpty(S): Liefert true wenn Stack leer, sonst false.emptyStack(): Liefert einen leeren Stack.

13hoffentlich291

Page 61: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Abstrakte Datentypen

Wir erinnern uns13 (Vorlesung Informatik I)

Ein Stack ist ein abstrakter Datentyp (ADT) mit Operationen

push(x, S): Legt Element x auf den Stapel S.

pop(S): Entfernt und liefert oberstes Element von S, oder null.top(S): Liefert oberstes Element von S, oder null.isEmpty(S): Liefert true wenn Stack leer, sonst false.emptyStack(): Liefert einen leeren Stack.

13hoffentlich291

Page 62: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Abstrakte Datentypen

Wir erinnern uns13 (Vorlesung Informatik I)

Ein Stack ist ein abstrakter Datentyp (ADT) mit Operationen

push(x, S): Legt Element x auf den Stapel S.pop(S): Entfernt und liefert oberstes Element von S, oder null.

top(S): Liefert oberstes Element von S, oder null.isEmpty(S): Liefert true wenn Stack leer, sonst false.emptyStack(): Liefert einen leeren Stack.

13hoffentlich291

Page 63: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Abstrakte Datentypen

Wir erinnern uns13 (Vorlesung Informatik I)

Ein Stack ist ein abstrakter Datentyp (ADT) mit Operationen

push(x, S): Legt Element x auf den Stapel S.pop(S): Entfernt und liefert oberstes Element von S, oder null.top(S): Liefert oberstes Element von S, oder null.

isEmpty(S): Liefert true wenn Stack leer, sonst false.emptyStack(): Liefert einen leeren Stack.

13hoffentlich291

Page 64: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Abstrakte Datentypen

Wir erinnern uns13 (Vorlesung Informatik I)

Ein Stack ist ein abstrakter Datentyp (ADT) mit Operationen

push(x, S): Legt Element x auf den Stapel S.pop(S): Entfernt und liefert oberstes Element von S, oder null.top(S): Liefert oberstes Element von S, oder null.isEmpty(S): Liefert true wenn Stack leer, sonst false.

emptyStack(): Liefert einen leeren Stack.

13hoffentlich291

Page 65: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Abstrakte Datentypen

Wir erinnern uns13 (Vorlesung Informatik I)

Ein Stack ist ein abstrakter Datentyp (ADT) mit Operationen

push(x, S): Legt Element x auf den Stapel S.pop(S): Entfernt und liefert oberstes Element von S, oder null.top(S): Liefert oberstes Element von S, oder null.isEmpty(S): Liefert true wenn Stack leer, sonst false.emptyStack(): Liefert einen leeren Stack.

13hoffentlich291

Page 66: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Push

top xn xn−1 x1 null

x

push(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf den Wertvon top.

2 Setze top auf den Knotem mit x.

292

Page 67: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Push

top xn xn−1 x1 null

x

push(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf den Wertvon top.

2 Setze top auf den Knotem mit x.

292

Page 68: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Push

top xn xn−1 x1 null

x

push(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf den Wertvon top.

2 Setze top auf den Knotem mit x.

292

Page 69: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Pop

top xn xn−1 x1 null

r

pop(S):

1 Ist top=null, dann gib null zurück2 Andernfalls merke Zeiger p von top in r.3 Setze top auf p.next und gib r zurück

293

Page 70: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Pop

top xn xn−1 x1 null

r

pop(S):

1 Ist top=null, dann gib null zurück

2 Andernfalls merke Zeiger p von top in r.3 Setze top auf p.next und gib r zurück

293

Page 71: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Pop

top xn xn−1 x1 null

r

pop(S):

1 Ist top=null, dann gib null zurück2 Andernfalls merke Zeiger p von top in r.

3 Setze top auf p.next und gib r zurück

293

Page 72: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Pop

top xn xn−1 x1 null

r

pop(S):

1 Ist top=null, dann gib null zurück2 Andernfalls merke Zeiger p von top in r.3 Setze top auf p.next und gib r zurück

293

Page 73: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Analyse

Jede der Operationen push, pop, top und isEmpty auf dem Stackist in O(1) Schritten ausführbar.

294

Page 74: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Queue (Schlange / Warteschlange / Fifo)

Queue ist ein ADT mit folgenden Operationen:

enqueue(x,Q): fügt x am Ende der Schlange an.dequeue(Q): entfernt x vom Beginn der Schlange und gibt xzurück (null sonst.)head(Q): liefert das Objekt am Beginn der Schlage zurück (nullsonst.)isEmpty(Q): liefert true wenn Queue leer, sonst false.emptyQueue(): liefert leere Queue zurück.

295

Page 75: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Queue (Schlange / Warteschlange / Fifo)

Queue ist ein ADT mit folgenden Operationen:

enqueue(x,Q): fügt x am Ende der Schlange an.

dequeue(Q): entfernt x vom Beginn der Schlange und gibt xzurück (null sonst.)head(Q): liefert das Objekt am Beginn der Schlage zurück (nullsonst.)isEmpty(Q): liefert true wenn Queue leer, sonst false.emptyQueue(): liefert leere Queue zurück.

295

Page 76: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Queue (Schlange / Warteschlange / Fifo)

Queue ist ein ADT mit folgenden Operationen:

enqueue(x,Q): fügt x am Ende der Schlange an.dequeue(Q): entfernt x vom Beginn der Schlange und gibt xzurück (null sonst.)

head(Q): liefert das Objekt am Beginn der Schlage zurück (nullsonst.)isEmpty(Q): liefert true wenn Queue leer, sonst false.emptyQueue(): liefert leere Queue zurück.

295

Page 77: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Queue (Schlange / Warteschlange / Fifo)

Queue ist ein ADT mit folgenden Operationen:

enqueue(x,Q): fügt x am Ende der Schlange an.dequeue(Q): entfernt x vom Beginn der Schlange und gibt xzurück (null sonst.)head(Q): liefert das Objekt am Beginn der Schlage zurück (nullsonst.)

isEmpty(Q): liefert true wenn Queue leer, sonst false.emptyQueue(): liefert leere Queue zurück.

295

Page 78: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Queue (Schlange / Warteschlange / Fifo)

Queue ist ein ADT mit folgenden Operationen:

enqueue(x,Q): fügt x am Ende der Schlange an.dequeue(Q): entfernt x vom Beginn der Schlange und gibt xzurück (null sonst.)head(Q): liefert das Objekt am Beginn der Schlage zurück (nullsonst.)isEmpty(Q): liefert true wenn Queue leer, sonst false.

emptyQueue(): liefert leere Queue zurück.

295

Page 79: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Queue (Schlange / Warteschlange / Fifo)

Queue ist ein ADT mit folgenden Operationen:

enqueue(x,Q): fügt x am Ende der Schlange an.dequeue(Q): entfernt x vom Beginn der Schlange und gibt xzurück (null sonst.)head(Q): liefert das Objekt am Beginn der Schlage zurück (nullsonst.)isEmpty(Q): liefert true wenn Queue leer, sonst false.emptyQueue(): liefert leere Queue zurück.

295

Page 80: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

x null

enqueue(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf null.2 Wenn tail 6= null , setze tail.next auf den Knoten mit x.3 Setze tail auf den Knoten mit x.4 Ist head = null, dann setze head auf tail.

296

Page 81: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

x null

enqueue(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf null.

2 Wenn tail 6= null , setze tail.next auf den Knoten mit x.3 Setze tail auf den Knoten mit x.4 Ist head = null, dann setze head auf tail.

296

Page 82: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

x null

enqueue(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf null.2 Wenn tail 6= null , setze tail.next auf den Knoten mit x.

3 Setze tail auf den Knoten mit x.4 Ist head = null, dann setze head auf tail.

296

Page 83: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

x null

enqueue(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf null.2 Wenn tail 6= null , setze tail.next auf den Knoten mit x.3 Setze tail auf den Knoten mit x.

4 Ist head = null, dann setze head auf tail.

296

Page 84: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

x null

enqueue(x, S):

1 Erzeuge neues Listenelement mit x und Zeiger auf null.2 Wenn tail 6= null , setze tail.next auf den Knoten mit x.3 Setze tail auf den Knoten mit x.4 Ist head = null, dann setze head auf tail.

296

Page 85: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Invarianten!x1 x2 xn−1 xn

head tail

null

Mit dieser Implementation gilt

entweder head = tail = null,oder head = tail 6= null und head.next = nulloder head 6= null und tail 6= null und head 6= tail undhead.next 6= null.

297

Page 86: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Invarianten!x1 x2 xn−1 xn

head tail

null

Mit dieser Implementation gilt

entweder head = tail = null,

oder head = tail 6= null und head.next = nulloder head 6= null und tail 6= null und head 6= tail undhead.next 6= null.

297

Page 87: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Invarianten!x1 x2 xn−1 xn

head tail

null

Mit dieser Implementation gilt

entweder head = tail = null,oder head = tail 6= null und head.next = null

oder head 6= null und tail 6= null und head 6= tail undhead.next 6= null.

297

Page 88: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Invarianten!x1 x2 xn−1 xn

head tail

null

Mit dieser Implementation gilt

entweder head = tail = null,oder head = tail 6= null und head.next = nulloder head 6= null und tail 6= null und head 6= tail undhead.next 6= null.

297

Page 89: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

r

dequeue(S):

1 Merke Zeiger von head in r. Wenn r = null, gib r zurück.2 Setze den Zeiger von head auf head.next.3 Ist nun head = null, dann setze tail auf null.4 Gib den Wert von r zurück.

298

Page 90: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

r

dequeue(S):

1 Merke Zeiger von head in r. Wenn r = null, gib r zurück.

2 Setze den Zeiger von head auf head.next.3 Ist nun head = null, dann setze tail auf null.4 Gib den Wert von r zurück.

298

Page 91: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

r

dequeue(S):

1 Merke Zeiger von head in r. Wenn r = null, gib r zurück.2 Setze den Zeiger von head auf head.next.

3 Ist nun head = null, dann setze tail auf null.4 Gib den Wert von r zurück.

298

Page 92: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

r

dequeue(S):

1 Merke Zeiger von head in r. Wenn r = null, gib r zurück.2 Setze den Zeiger von head auf head.next.3 Ist nun head = null, dann setze tail auf null.

4 Gib den Wert von r zurück.

298

Page 93: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Queuex1 x2 xn−1 xn

head tail

null

r

dequeue(S):

1 Merke Zeiger von head in r. Wenn r = null, gib r zurück.2 Setze den Zeiger von head auf head.next.3 Ist nun head = null, dann setze tail auf null.4 Gib den Wert von r zurück.

298

Page 94: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Analyse

Jede der Operationen enqueue, dequeue, head und isEmpty aufder Queue ist in O(1) Schritten ausführbar.

299

Page 95: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementationsvarianten verketteter ListenListe mit Dummy-Elementen (Sentinels).

x1 x2 xn−1 xn

head tail

Vorteil: Weniger Spezialfälle!

Variante davon: genauso, dabei Zeiger auf ein Element immereinfach indirekt gespeichert.

300

Page 96: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementationsvarianten verketteter ListenListe mit Dummy-Elementen (Sentinels).

x1 x2 xn−1 xn

head tail

Vorteil: Weniger Spezialfälle!

Variante davon: genauso, dabei Zeiger auf ein Element immereinfach indirekt gespeichert.

300

Page 97: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementationsvarianten verketteter Listen

Doppelt verkettete Liste

null x1 x2 xn−1 xn null

head tail

301

Page 98: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Ubersicht

enqueue insert delete search concat(A) Θ(1) Θ(1) Θ(n) Θ(n) Θ(n)(B) Θ(1) Θ(1) Θ(n) Θ(n) Θ(1)(C) Θ(1) Θ(1) Θ(1) Θ(n) Θ(1)(D) Θ(1) Θ(1) Θ(1) Θ(n) Θ(1)

(A) = Einfach verkettet(B) = Einfach verkettet, mit Dummyelement(C) = Einfach verkettet, mit einfach indirekter Elementaddressierung(D) = Doppelt verkettet

302

Page 99: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Prioritatswarteschlange (Priority Queue)

Priority Queue = Warteschlange mit Prioritäten.

Operationen

insert(x,p,Q): Füge Objekt x mit Priorität p ein.extractMax(Q): Entferne Objekt x mit höchster Priorität undliefere es.

303

Page 100: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Prioritatswarteschlage

Mit einem Max-Heap!

Also

insert in Zeit O(?) undextractMax in Zeit O(?).

304

Page 101: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Prioritatswarteschlage

Mit einem Max-Heap!

Also

insert in Zeit O(log n) undextractMax in Zeit O(?).

304

Page 102: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Implementation Prioritatswarteschlage

Mit einem Max-Heap!

Also

insert in Zeit O(log n) undextractMax in Zeit O(log n).

304

Page 103: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Multistack

Multistack unterstützt neben den oben genannten Stackoperationennoch

multipop(s,S): Entferne die min(size(S), k) zuletzt eingefügtenObjekte und liefere diese zurück.

Implementation wie beim Stack. Laufzeit von multipop ist O(k).

305

Page 104: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Akademische Frage

Führen wir auf einem Stack mit n Elementen n mal multipop(k,S)aus, kostet das dann O(n2)?

Sicher richtig, denn jeder multipop kann Zeit O(n) haben.

Wie machen wir es besser?

306

Page 105: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Akademische Frage

Führen wir auf einem Stack mit n Elementen n mal multipop(k,S)aus, kostet das dann O(n2)?

Sicher richtig, denn jeder multipop kann Zeit O(n) haben.

Wie machen wir es besser?

306

Page 106: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Akademische Frage

Führen wir auf einem Stack mit n Elementen n mal multipop(k,S)aus, kostet das dann O(n2)?

Sicher richtig, denn jeder multipop kann Zeit O(n) haben.

Wie machen wir es besser?

306

Page 107: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Idee (Accounting)

Wir führen ein Kostenmodell ein:

Aufruf von push: kostet 1 CHF und zusätzlich 1 CHF kommt aufsBankkontoAufruf von pop: kostet 1 CHF, wird durch Rückzahlung vomBankkonto beglichen.

Kontostand wird niemals negativ. Also: maximale Kosten: Anzahlder push Operationen mal zwei.

307

Page 108: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

FormalisierungBezeichne ti die realen Kosten der Operation i. PotentialfunktionΦi ≥ 0 für den “Kontostand” nach i Operationen. Φi ≥ Φ0 ∀i.Amortisierte Kosten der i-ten Operation:

ai := ti + Φi − Φi−1.

Es gilt

n∑i=1

ai =n∑

i=1

(ti + Φi − Φi−1) =

(n∑

i=1

ti

)+ Φn − Φ0 ≥

n∑i=1

ti.

Ziel: Suche Potentialfunktion, die teure Operationen ausgleicht.308

Page 109: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Beispiel Stack

Potentialfunktion Φi = Anzahl Elemente auf dem Stack.

push(x, S): Reale Kosten ti = 1. Φi − Φi−1 = 1. AmortisierteKosten ai = 2.pop(S): Reale Kosten ti = 1. Φi − Φi−1 = −1. AmortisierteKosten ai = 0.multipop(k, S): Reale Kosten ti = k. Φi − Φi−1 = −k.Amortisierte Kosten ai = 0.

Alle Operationen haben konstante amortisierte Kosten! ImDurchschnitt hat also Multipop konstanten Zeitbedarf.

309

Page 110: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Beispiel binarer Zahler

Binärer Zähler mit k bits. Im schlimmsten Fall für jede Zähloperationmaximal k Bitflips. Also O(n · k) Bitflips für Zählen von 1 bis n. Gehtdas besser?

Reale Kosten ti = Anzahl Bitwechsel von 0 nach 1 plus AnzahlBitwechsel von 1 nach 0.

...0 1111111︸ ︷︷ ︸l Einsen

+1 = ...1 0000000︸ ︷︷ ︸l Nullen

.

⇒ ti = l + 1

310

Page 111: 10. Sortieren III - lec.inf.ethz.chlec.inf.ethz.ch/DA/2017/slides/daLecture7.pdf · 10. Sortieren III Untere Schranken für das vergleichsbasierte Sortieren, Radix- und Bucketsort

Beispiel binarer Zahler

...0 1111111︸ ︷︷ ︸l Einsen

+1 = ...1 0000000︸ ︷︷ ︸l Nullen

Potentialfunktion Φi: Anzahl der 1-Bits von xi.

⇒ Φi − Φi−1 = 1− l,

⇒ ai = ti + Φi − Φi−1 = l + 1 + (1− l) = 2.

Amortisiert konstante Kosten für eine Zähloperation.

311