• Keine Ergebnisse gefunden

Kapitel 7 Sortieren

N/A
N/A
Protected

Academic year: 2022

Aktie "Kapitel 7 Sortieren"

Copied!
246
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Kapitel 7 Sortieren

Grundbegriffe

Klassifikation von Sortierverfahren

Quicksort

Bucketsort

Heapsort

(2)

Sortieren

Grundbegriffe

Sortieren: Umordnen einer Folge von

Objekten a1, ..., an in eine Folge ai , ..., ai , so daß bezgl. einer Ordnung ≤ gilt:

ai 1≤ ... ≤ ai n

1 n

(3)

Sortieren

Grundbegriffe

Stabilität: relative Reihenfolge

gleichrangiger Objekte wird nicht verändert, d. h.

ij<ik, falls ai =ai und j<k.

Wichtig für vorsortierte Datenmengen!

Beispiel: erst Sortierung nach Nachnamen, dann Sortierung nach Vornamen →

Sortierung nach Nachnamen soll erhalten bleiben.

j k

(4)

Sortieren

Grundbegriffe

Internes Sortieren: Datenmenge während des Sortierens vollständig im Hauptspeicher.

Externes Sortieren: Datenmenge überwiegend auf externen Speichern

Beispiel:

Bubblesort: intern

Sortieren durch Mischen: extern

(5)

Sortieren

Grundbegriffe

Zeitbedarf:

Bewiesen: worst-case mindestens O(n log n) Vergleiche

Forderung: Nur Sortierverfahren betrachten, die diese Schranke erreichen.

Platzbedarf: Wenig zusätzlicher Speicher (Sortieren in-situ)

(6)

Sortieren

Klassifikation v. Sortierverfahren

Sortieren durch ...

Abzählen Einfügen Austauschen Auswählen Mischen

Bucketsort Shell-Sort Bubblesort Quicksort

Heapsort

(7)

Sortieren

Quicksort - Idee

Gebräuchlichstes internes Sortierverfahren (C.A.R. Hoare, 1962)

Idee (rekursives Divide-and-Conquer-Verfahren):

Gegeben lineares Array A mit n Elementen:

Transportiere die n/2 kleinsten Elemente nach A[1], ..., A[n/2] und die n/2 größten Elemente nach A[n/2+1], ..., A[n]

Wende Verfahren rekursiv auf die erste Hälfte

an.Wende Verfahren rekursiv auf die zweite Hälfte an.

(8)

Sortieren

Quicksort - Idee

Gebräuchlichstes internes Sortierverfahren (C.A.R. Hoare, 1962)

Idee (rekursives Divide-and-Conquer-Verfahren):

Gegeben lineares Array A mit n Elementen:

Transportiere die n/2 kleinsten Elemente nach A[1], ..., A[n/2] und die n/2 größten Elemente nach A[n/2+1], ..., A[n]

Wende Verfahren rekursiv auf die erste Hälfte

an.Wende Verfahren rekursiv auf die zweite Hälfte an.

Divide

Vorbereitung

(9)

Sortieren

Quicksort - Idee

Gebräuchlichstes internes Sortierverfahren (C.A.R. Hoare, 1962)

Idee (rekursives Divide-and-Conquer-Verfahren):

Gegeben lineares Array A mit n Elementen:

Transportiere die n/2 kleinsten Elemente nach A[1], ..., A[n/2] und die n/2 größten Elemente nach A[n/2+1], ..., A[n]

Wende Verfahren rekursiv auf die erste Hälfte

an.Wende Verfahren rekursiv auf die zweite Hälfte an.

(10)

Sortieren

Quicksort - Idee

Gebräuchlichstes internes Sortierverfahren (C.A.R. Hoare, 1962)

Idee (rekursives Divide-and-Conquer-Verfahren):

Gegeben lineares Array A mit n Elementen:

Transportiere die n/2 kleinsten Elemente nach A[1], ..., A[n/2] und die n/2 größten Elemente nach A[n/2+1], ..., A[n]

Wende Verfahren rekursiv auf die erste Hälfte

an.Wende Verfahren rekursiv auf die zweite Hälfte an.

Divide

(11)

Sortieren

Quicksort - Idee

Gebräuchlichstes internes Sortierverfahren (C.A.R. Hoare, 1962)

Idee (rekursives Divide-and-Conquer-Verfahren):

Gegeben lineares Array A mit n Elementen:

Transportiere die n/2 kleinsten Elemente nach A[1], ..., A[n/2] und die n/2 größten Elemente nach A[n/2+1], ..., A[n]

Wende Verfahren rekursiv auf die erste Hälfte

an.Wende Verfahren rekursiv auf die zweite Hälfte an.

(12)

Sortieren

Quicksort - Idee

Gebräuchlichstes internes Sortierverfahren (C.A.R. Hoare, 1962)

Idee (rekursives Divide-and-Conquer-Verfahren):

Gegeben lineares Array A mit n Elementen:

Transportiere die n/2 kleinsten Elemente nach A[1], ..., A[n/2] und die n/2 größten Elemente nach A[n/2+1], ..., A[n]

Wende Verfahren rekursiv auf die erste Hälfte

an.Wende Verfahren rekursiv auf die zweite Hälfte

an. Conquer

(13)

Sortieren

Quicksort - Median

Wie findet man die Mitte?

Definition

Sei M={m1, ..., mn} eine Menge mit einer Ordnung

. Das Objekt x∈M mit der Eigenschaft

|{mi | mi≤x}| ≈ |{mi | x≤mi}|

heißt Median.

(“links vom Median liegen soviele Elemente wie rechts”)

(14)

Sortieren

Quicksort - Median - Beispiel

Beachte: meist Median≠Mittelwert Beispiel: 1, 10, 100

Median: 10

Mittelwert: 55,5

7 Elemente ≤, 8 Elemente ≥

(15)

Sortieren

Quicksort - Median - Beispiel

(16)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

(17)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

(18)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57 30 21 16 7

(19)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

(20)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

(21)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

(22)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57 16 7

(23)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57 16 7 30 21

(24)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57

(25)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

(26)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7

(27)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16

(28)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16 21

(29)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16 21 30

(30)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16 21 30 57

(31)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16 21 30 57 62

(32)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16 21 30 57 62 78

(33)

Sortieren

Quicksort - Median - Beispiel

30 62 21 16 80 7 78 57

30 21 16 7 62 80 78 57

16 7 30 21 62 57 80 78

7 16 21 30 57 62 78 80

(34)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(35)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(36)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(37)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(38)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(39)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(40)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(41)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(42)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(43)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(44)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(45)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(46)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(47)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(48)

Sortieren

Quicksort - Algorithmus

procedure quick (l, r: 1...n);

vor i, j: 1...n; x, w: Objekt;

begin i:=l; j:=r;

"Bestimme Median x in A[l] ... A[r]";

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then begin

"tausche A[i] und A[j]"; i:= i+1; j:= j-1 until i > j;end

if l < j then quick (l,j);

if i < r then quick (i,r);

end

(49)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

(50)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

Median: 30

(51)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i

Median: 30

(52)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(53)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(54)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(55)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(56)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(57)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i

Median: 30

(58)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i

Median: 30

(59)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(60)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(61)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

Median: 30

(62)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

7

Median: 30

(63)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

i j

7 30

Median: 30

(64)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

j

7 30

Median: 30

(65)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

j

7 30

i

Median: 30

(66)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i

Median: 30

(67)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i j

Median: 30

(68)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i j

Median: 30

(69)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i

Median: 30

(70)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i j

Median: 30

(71)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i j

16

Median: 30

(72)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

i j

16 62

Median: 30

(73)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

j

16 62

Median: 30

(74)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 30

j

16 62

i

Median: 30

(75)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

i

Median: 30

(76)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

i j

Median: 30

(77)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

j

Median: 30

(78)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

j i

Median: 30

(79)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

j i

Abbruch: i>j Median: 30

(80)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

j i

Abbruch: i>j Median: 30

7 16 21 Quicksort

(81)

Sortieren

Quicksort - Beispiel

30 62 21 16 80 7 78 57

repeat

while A[i] < x do i:= i+1;

while A[j] > x do j:= j-1;

if i ≤ j then

begin

"tausche A[i] und A[j]";

i:= i+1; j:= j-1 end

until i > j;

7 16 62 30

j i

Abbruch: i>j Median: 30

7 16 21 Quicksort

62 80 30 78 57 Quicksort

(82)

Sortieren

Quicksort - Laufzeit

Median teilt A jeweils in zwei gleichgroße Hälften.

Nach O(log2 n) Teilungsvorgängen Arrays nur noch einelementig und Verfahren bricht ab.

Der übrige Rumpf von quick benötigt

O((r-l)+M(r-l)) = O(n+M(n)) Zeit,

wobei M(n) Zeit für Bestimmen des Medians im Feld der Länge n ist.

Ergebnis: Tquick(n)=2Tquick(n/2)+O(n+M(n))

(83)

Sortieren

Quicksort - Laufzeit

Median teilt A jeweils in zwei gleichgroße Hälften.

Nach O(log2 n) Teilungsvorgängen Arrays nur noch einelementig und Verfahren bricht ab.

Der übrige Rumpf von quick benötigt

O((r-l)+M(r-l)) = O(n+M(n)) Zeit,

wobei M(n) Zeit für Bestimmen des Medians im Feld der Länge n ist.

Ergebnis: Tquick(n)=2Tquick(n/2)+O(n+M(n))

(84)

Sortieren

Quicksort - Medianbestimmung

Medianbestimmung geht in linearer Zeit (s.

Buch von Ottmann/Widmayer)

Folglich:

Tquick(n)=2Tquick(n/2)+O(n)=O(n log n)

Problem: Medianbestimmung sehr aufwendig

(85)

Sortieren

Quicksort - Pivotelement

Abschwächung: Wähle nicht in jedem Rekursionsschritt den Median, sondern irgendein Element x

Hoffnung: x teilt Feld in zwei etwa gleichgroße Teile

x heißt Pivotelement

(86)

Sortieren

Quicksort - Pivotelement

Abschwächung: Wähle nicht in jedem Rekursionsschritt den Median, sondern irgendein Element x

Hoffnung: x teilt Feld in zwei etwa gleichgroße Teile

x heißt Pivotelement

analoge Idee beim AVL-Baum: “weniger ausgeglichener Baum ist genauso gut

wie exakt ausgeglichener.”

(87)

Sortieren

Quicksort - Pivotelement

Laufzeit mit Pivotelement x:

T(n) = O(n) + T(m) + T(n-m)

... ...

1 m n

x

(88)

Sortieren

Quicksort - Laufzeit

Sonderfälle:

Pivotelement x ist jeweils der Median:

T(n) = O(n)+2T(n/2) = O(n log n)

Pivotelement x ist jeweils das kleinste (oder größte) Element:

T(n) = O(n)+T(1)+T(n-1) = O(n2)

Worst case: Hier wird Quicksort zum Slowsort mit unbrauchbarer Laufzeit O(n2).

Fall tritt bei schon sortiertem Feld auf.

... ...

1 m n

x

(89)

Sortieren

Quicksort - Analyse

Wie oft tritt der worst case auf, wenn x in jedem rekursiven Aufruf zufällig gewählt wird?

Annahmen:

1. Zu sortieren sind die Zahlen 1, ..., n.

2. Alle n! Anordnungen der Zahlen im

Ausgangsfeld sind gleich wahrscheinlich 3. Als Pivotelement wählen wir immer an.

(90)

Sortieren

Quicksort - Analyse

Folgerung: Wird quick für a1, ..., an aufgerufen, so folgt aus den Annahmen, daß jedes k mit 1≤k≤n mit gleicher Wahrscheinlichkeit 1/n an Position an

auftritt und daher als Pivotelement gewählt wird.

Anschließend werden zwei Folgen der Längen k-1 und n-k erzeugt

Zeige nun: Teilfolgen sind wieder zufällig, so daß im Mittelwert eine Laufzeit von O(n log n) gehalten wird.

(91)

Sortieren

Quicksort - mittlere Laufzeit

Satz

Quicksort benötigt im Mittel eine Laufzeit von O(n log n)

wenn auf jeder Stufe der Rekursion das Pivotelement zufällig gewählt wird.

(92)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn

(93)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn Mittelwert des

Aufwands für alle Aufrufe je nach Teilung

(94)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn

(95)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn

Aufwand für Teilung

(96)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn

(97)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn T(0)=0, T(1)=c

(98)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn T(0)=0, T(1)=c

n≥2: T(n)≤(2/n)∑k=1n-1T(k) + bn

(99)

Sortieren

Quicksort - mittlere Laufzeit

Beweis

Berechne den Mittelwert der Laufzeit für Quicksort:

T(n)≤ ∑---1n k=1n(T(k-1)+T(n-k)) + bn T(0)=0, T(1)=c

n≥2: T(n)≤(2/n)∑k=1n-1T(k) + bn Zeige nun: T(n)≤cn log n für hinreichend großes c.

(100)

Sortieren

Quicksort - mittlere Laufzeit

Beweis durch Induktion:

Induktionsanfang: n=1,2 ist klar.

Induktionsvoraussetzung: Sei die Aussage wahr für alle i<n, also T(i) = ci log i für i<n.

Dann gilt:

T(n)≤(2/n)∑k=1n-1T(k)+bn =(2c/n)∑k=1n-1(k log k)+bn = (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

(101)

Sortieren

Quicksort - mittlere Laufzeit

Beweis durch Induktion:

Induktionsanfang: n=1,2 ist klar.

Induktionsvoraussetzung: Sei die Aussage wahr für alle i<n, also T(i) = ci log i für i<n.

Dann gilt:

T(n)≤(2/n)∑k=1n-1T(k)+bn =(2c/n)∑k=1n-1(k log k)+bn = (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

≤log n-1

(102)

Sortieren

Quicksort - mittlere Laufzeit

Beweis durch Induktion:

Induktionsanfang: n=1,2 ist klar.

Induktionsvoraussetzung: Sei die Aussage wahr für alle i<n, also T(i) = ci log i für i<n.

Dann gilt:

T(n)≤(2/n)∑k=1n-1T(k)+bn =(2c/n)∑k=1n-1(k log k)+bn = (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

(103)

Sortieren

Quicksort - mittlere Laufzeit

Beweis durch Induktion:

Induktionsanfang: n=1,2 ist klar.

Induktionsvoraussetzung: Sei die Aussage wahr für alle i<n, also T(i) = ci log i für i<n.

Dann gilt:

T(n)≤(2/n)∑k=1n-1T(k)+bn =(2c/n)∑k=1n-1(k log k)+bn = (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

≤log (n-1)

(104)

Sortieren

Quicksort - mittlere Laufzeit

Beweis durch Induktion:

Induktionsanfang: n=1,2 ist klar.

Induktionsvoraussetzung: Sei die Aussage wahr für alle i<n, also T(i) = ci log i für i<n.

Dann gilt:

T(n)≤(2/n)∑k=1n-1T(k)+bn =(2c/n)∑k=1n-1(k log k)+bn = (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

(105)

Sortieren

Quicksort - mittlere Laufzeit

= (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

≤ (2c/n)(log n-1) ∑k=1n/2 k

+(log (n-1))∑k=1n/2-1((n/2)+k)+bn

≤ --- [--- (--- +1)log n - --- - --- + (--- - ---) log n]+bn

= --- [(--- - ---)log n - --- - ---]+bn

= cn log n - c log n - --- - --- + bn

2cn n

4 n

2 n2

8 n

4 3n2

8 3n 4 2cn n2

2 n

2 n2

8 n

cn 4

4 c

2

(106)

Sortieren

Quicksort - mittlere Laufzeit

= (2c/n)∑k=1n/2(k log k)

+∑k=1n/2-1((n/2)+k) log ((n/2)+k)))+bn

≤ (2c/n)(log n-1) ∑k=1n/2 k

+(log (n-1))∑k=1n/2-1((n/2)+k)+bn

≤ --- [--- (--- +1)log n - --- - --- + (--- - ---) log n]+bn

= --- [(--- - ---)log n - --- - ---]+bn

= cn log n - c log n - --- - --- + bn

2cn n

4 n

2 n2

8 n

4 3n2

8 3n 4 2cn n2

2 n

2 n2

8 n

cn 4

4 c

2 ≥0

(107)

Sortieren

Quicksort - mittlere Laufzeit

= cn log n - c log n - --- - --- + bn

cn log n - --- - --- + bn

Für c≥4b gilt dann: T(n) ≤ cn log n.

Ergebnis: Im Mittel benötigt Quicksort zum Sortieren von n Zahlen O(n log n) Vergleiche.

cn4 c cn 2

4 c

2

(108)

Sortieren

Quicksort - Praxis der Pivotbestimmung

Praxis der Pivotbestimmung: Wähle Pivotelement

aufgrund einer Stichprobe

zufällig

als Median der Elemente al, a(l+r)/2, ar

(109)

Sortieren

Quicksort - Speicherbedarf

Speicherbedarf wird vor allem durch die Rekursionstiefe bestimmt:

im schlimmsten Fall: O(n)

im mittleren Fall: O(log n)

Durch geschickte Implementierung läßt sich der Stack auch im worst-case auf O(log n) begrenzen.

(110)

Sortieren

Bucketsort

Sortierverfahren, das ohne Vergleiche

auskommt und besondere Voraussetzungen an die zu sortierenden Objekte stellt.

Geht das überhaupt???? - Vgl. Beweis zur

unteren Schranke für Sortieren in Kapitel 3.

(111)

Sortieren

Bucketsort - Grundprinzip

Idee:

Lege für jedes zu sortierende Objekt ein Bucket (Behälter, Eimer, Fach) an

Lege jedes Objekt in das zugehörige Bucket (gleiche Objekte in denselben Bucket)

Gib die Buckets der Ordnung nach aus

Voraussetzung: Grundtyp der zu sortierenden Elemente endlich (nicht zu groß)

(112)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(113)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(114)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(115)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(116)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(117)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(118)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(119)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(120)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(121)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(122)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(123)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(124)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(125)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(126)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(127)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(128)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(129)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(130)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(131)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(132)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(133)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(134)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(135)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(136)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(137)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(138)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(139)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(140)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(141)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(142)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(143)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(144)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(145)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

(146)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1

(147)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1

(148)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1 2

(149)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1 2 2

(150)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1 2 2 3

(151)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1 2 2 3 4

(152)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1 2 2 3 4 4

(153)

Sortieren

Bucketsort - Beispiel

Grundtyp 1..10

Eingabe: 7 2 4 2 8 1 1 3 6 4 5

Benötigt: 10 Buckets

1 2 3 4 5 6 7 8 9 10

1 1 2 2 3 4 4 5

Referenzen

ÄHNLICHE DOKUMENTE

mit Wurzel ≥ i erf¨ ullen die Heapeigenschaft Nach Aufruf von Build-Heap (A) enth¨ alt A dieselben Eintr¨ age wie zuvor, aber nunmehr bildet A einen heap der Gr¨ oße n....

Die Summe aus dem Dreifachen einer Zahl und 45 Die Differenz aus dem Zehnfachen einer Zahl und 15 Der dritte Teil einer Zahl vermindert um 9.. Das Siebenfache der Differenz aus

Verbindet man zwei Verhältnisse mit einem Gleichheitszeichen, so entsteht eine Verhältnisgleichungd. Eine Verhältnisgleichung ist auch eine

Eläfant Esel Entenfang elefant Ernte Nashorn Immigrant Ellefant Eierkorb Elefont Lieferant Tier Afrika elefant Elefant Elle Erpel Elefunt elegant Elefant

© Mag.Christina Cech, Februar 2009 www.legatraining.at. Arbeitsblatt

Bei der vorhergesagten zunächst gleichbleibenden Wetterlage ist auch an den kommenden Tagen mit einer anhaltend erhöhten Belastung und weiteren Überschreitungen des

obigen Frevels mitzuteilen, !Werden d, iese bei dem gewaltigen Zulauf :our Kloster- kirche noch ein letztes Mal in die bereits stark geleerten Taschen haben

Es soll entschieden werden an welchen Standorten und in welcher Periode Lager gebaut werden sollen.. Das bereits mehrfach benutzte Standortplanungsproblem für Lager setzte einen