49
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

  • Upload
    petula

  • View
    36

  • Download
    6

Embed Size (px)

DESCRIPTION

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2). Teile & Herrsche. Teile & Herrsche (Divide & Conquer) Teile Eingabe in mehrere Teile auf Löse das Problem rekursiv auf den Teilen Füge die Teillösungen zu einer Gesamtlösung zusammen. Teile & Herrsche. Nächste Paare - PowerPoint PPT Presentation

Citation preview

Page 1: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Page 2: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

2

Teile & Herrsche

Teile & Herrsche (Divide & Conquer) Teile Eingabe in mehrere Teile auf Löse das Problem rekursiv auf den Teilen Füge die Teillösungen zu einer Gesamtlösung zusammen

Page 3: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

3

Teile & Herrsche

Nächste Paare Problem: Finde nächstes Paar von Punkten in der Ebene Eingabe: Menge P von n Punkten in der Ebene Ausgabe: Paar (q,r)PP, qr, mit geringstem Abstand

Beispiel

Page 4: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

4

Teile & Herrsche

Nächste Paare ||q-r|| bezeichne den (euklidischen) Abstand zwischen q und r

Beispiel

Page 5: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

5

Teile & Herrsche

Nächste Paare ||q-r|| bezeichne den (euklidischen) Abstand zwischen q und r ||q-r||² = (q - r )² + (q - r )² ,wobei q=(q , q ) und r=(r , r ) die

Positionsvektoren der Punkte q und r sind

Beispiel

q

r||q-r||

1 1 2 2 1 2 21

Page 6: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

6

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

Page 7: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

7

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

Q R

Page 8: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

8

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

Q R

q*q*

r*

r*

12

1

2

Page 9: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

9

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

Q

q*q*

12

Wir wissen:(q* ,q* ) nächstes Paar in Q

Wir wissen:(q* ,q* ) nächstes Paar in Q

1 2

Page 10: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

10

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

R

r*

r*1

2

Wir wissen:(r* ,r* ) nächstes Paar in R

Wir wissen:(r* ,r* ) nächstes Paar in R1 2

Page 11: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

11

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

Q R

q*q*

r*

r*

12

1

2

Sei nun (p* ,p* ) das Paar aus(q* , q* ) und (r* , r* ) mit

geringerem Abstand

Sei nun (p* ,p* ) das Paar aus(q* , q* ) und (r* , r* ) mit

geringerem Abstand

1

1 1

2

2 2

Page 12: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

12

Teile & Herrsche

Grober Plan1. Sortiere Punkte nach x-Koordinate

2. Teile P in die Menge Q der n/2 Punkte mit kleinsten x-Koordinaten und die Menge R der n/2 Punkte mit größten x-Koordinaten auf

3. Löse das Problem rekursiv

4. Füge zusammen

Q R

q*q*

r*

r*

12

1

2

Wir wissen nicht:Gibt es Paare (q,r) mit qQ

und rR, die näher zusammen liegen als (p* , p* )

Wir wissen nicht:Gibt es Paare (q,r) mit qQ

und rR, die näher zusammen liegen als (p* , p* )

Sei nun (p* ,p* ) das Paar aus(q* , q* ) und (r* , r* ) mit

geringerem Abstand

Sei nun (p* ,p* ) das Paar aus(q* , q* ) und (r* , r* ) mit

geringerem Abstand

1

1 1

2

2 2

1 2

Page 13: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

13

Teile & Herrsche

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b]

2. MergeSort(A, a, b)

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m)

5. (r* , r* ) ClosestPair1(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 14: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

14

Teile & Herrsche

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b)

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m)

5. (r* , r* ) ClosestPair1(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 15: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

15

Teile & Herrsche

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m)

5. (r* , r* ) ClosestPair1(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 16: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

16

Teile & Herrsche

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m)

5. (r* , r* ) ClosestPair1(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 17: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

17

Teile & Herrsche

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m) Löse rekursiv für Q

5. (r* , r* ) ClosestPair1(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 18: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

18

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m) Löse rekursiv für Q

5. (r* , r* ) ClosestPair1(A, m+1, b) Löse rekursiv für R

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

Teile & Herrsche

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 19: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

19

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m) Löse rekursiv für Q

5. (r* , r* ) ClosestPair1(A, m+1, b) Löse rekursiv für R

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* ) Bestimme bessere der

7. else (p*, p* ) (r* , r* ) beiden Lösungen

8. for ia to m do

9. for jm+1 to b do

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

Teile & Herrsche

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 20: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

20

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m) Löse rekursiv für Q

5. (r* , r* ) ClosestPair1(A, m+1, b) Löse rekursiv für R

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* ) Bestimme bessere der

7. else (p*, p* ) (r* , r* ) beiden Lösungen

8. for ia to m do Überprüfe Paare

9. for jm+1 to b do aus QR

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

Teile & Herrsche

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 21: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

21

ClosestPair1 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b] Löse „brute-force“

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair1(A, a, m) Löse rekursiv für Q

5. (r* , r* ) ClosestPair1(A, m+1, b) Löse rekursiv für R

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* ) Bestimme bessere der

7. else (p*, p* ) (r* , r* ) beiden Lösungen

8. for ia to m do Überprüfe Paare

9. for jm+1 to b do aus QR

10. if || A[i] – A[j] || < ||p*- p* || then (p*, p* ) (A[i], A[j])

11. return (p* , p* )

Teile & Herrsche

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

1 2 1 2

1 2

Page 22: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

22

Teile & Herrsche

Laufzeit ClosestPair1 c , falls n<4

2 T(n/2) + cn² , falls n≥4T(n) =

Page 23: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

23

Teile & Herrsche

Auflösen von T(n) = 2 T(n/2) + cn²

………..

nn cn²

n/2n/2 n/2n/2 2 c(n/2)²

n/4n/4 n/4n/4 n/4n/4 n/4n/4 4 c(n/4)²

11 11 11 11 11 n c

Höhelog n

(n²)

Page 24: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

24

Teile & Herrsche

Können wir den Algorithmus verbessern?

Page 25: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

25

Teile & Herrsche

Können wir den Algorithmus verbessern? Wo ist der Flaschenhals?

Page 26: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

26

Teile & Herrsche

Können wir den Algorithmus verbessern? Wo ist der Flaschenhals?

- Das Überprüfen der Paare aus QR dauert (n²)- alle anderen Schritte brauchen O(n log n) Zeit

Page 27: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

27

Teile & Herrsche

Können wir den Algorithmus verbessern? Wo ist der Flaschenhals?

- Das Überprüfen der Paare aus QR dauert (n²)- alle anderen Schritte brauchen O(n log n) Zeit

Müssen wir alle Paare überprüfen?

Page 28: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

28

Teile & Herrsche

Können wir den Algorithmus verbessern? Wo ist der Flaschenhals?

- Das Überprüfen der Paare aus QR dauert (n²)- alle anderen Schritte brauchen O(n log n) Zeit

Müssen wir alle Paare überprüfen? Nein! Aber die Frage ist, ob wir die Anzahl der überprüften Paare auf o(n²)

reduzieren können und vielleicht sogar O(n) erreichen können

Page 29: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

29

Teile & Herrsche

Erste Verbesserung Ist ein Punkt weiter als = min { ||q* -q* ||, ||r* -r* || } von der „Trennlinie

zwischen Q und R“ entfernt, so müssen wir ihn nicht testen (Die Trennlinie ist an der x-Koordinate von A[m])

Q R

q*q*

r*

r*

12

1

2

1 12 2

Page 30: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

30

Teile & Herrsche

Erste Verbesserung Ist ein Punkt weiter als = min { ||q* -q* ||, ||r* -r* || } von der „Trennlinie

zwischen Q und R“ entfernt, so müssen wir ihn nicht testen (Die Trennlinie ist an der x-Koordinate von A[m])

Q R

q*q*

r*

r*

12

1

2

1 12 2

Sei M die Menge der Punkte, deren Abstand

zur Trennlinie höchstens ist

Sei M die Menge der Punkte, deren Abstand

zur Trennlinie höchstens ist

M

Page 31: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

31

Teile & Herrsche

Zweite Verbesserung Wir müssen nur Punkte in M miteinander vergleichen, deren Abstand in

y-Koordinate ≤ ist Idee: Sortiere Punkte in M zuerst nach y-Koordinate und vergleiche jeden

Punkt mit seinen Vorgängern, bis der erste Punkt Abstand > hat

Q R

q*q*

r*

r*

12

1

2

M

Page 32: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

32

Teile & Herrsche

Zweite Verbesserung Wir müssen nur Punkte in M miteinander vergleichen, deren Abstand in

y-Koordinate ≤ ist Idee: Sortiere Punkte in M zuerst nach y-Koordinate und vergleiche jeden

Punkt mit seinen Vorgängern, bis der erste Punkt Abstand > hat

Q R

q*q*

r*

r*

12

1

2

M

Hoffnung: Es kann nicht sehr viele Punkte in M geben, die zu einem vorgegeben pM

geringen Abstand in y-Koordinate haben. (ansonsten finden wir zwei Punkte in Q oder R mit geringerem Abstand als ). Widerspruch!

Hoffnung: Es kann nicht sehr viele Punkte in M geben, die zu einem vorgegeben pM

geringen Abstand in y-Koordinate haben. (ansonsten finden wir zwei Punkte in Q oder R mit geringerem Abstand als ). Widerspruch!

Page 33: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

33

Teile & Herrsche

ClosestPair2 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b]

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair2(A, a, m)

5. (r* , r* ) ClosestPair2(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. **** Merge **** nächste Seite

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

Page 34: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

34

Teile & Herrsche

ClosestPair2 (A, a, b)

1. if b-a<4 then return nächstes Paar aus A[a..b]

2. MergeSort(A, a, b) Sortiere nach x-Koordinate

3. m a+b/24. (q* , q* ) ClosestPair2(A, a, m)

5. (r* , r* ) ClosestPair2(A, m+1, b)

6. if ||q* - q* || < ||r* - r* || then (p*, p* ) (q* , q* )

7. else (p*, p* ) (r* , r* )

8. **** Merge **** nächste Seite

1

1

1 1

2

2

2 2

1 2

1

1

2

2

21

Page 35: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

35

Teile & Herrsche

**** Merge ****

1. w A[m].x w ist x-Koordinate von A[m]

2. Sei M die Menge der Punkte aus A[a…b] deren x-Koordinate im Interval [w-,w+] liegt

3. MergeSort(M,1,length[M]) Sortiere nach y-Koordinate

4. for i 1 to length[M] do

5. j i+1

6. while M[j].y≤M[i].y+ and j ≤length[M] do

7. if || M[i]-M[j] || < ||p* - p*|| then (p*, p* ) (M[i], M[j])

8. j j+1

9. return (p* , p* )

1 2 21

1 2

Page 36: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

36

Teile & Herrsche

**** Merge ****

1. w A[m].x w ist x-Koordinate von A[m]

2. Sei M die Menge der Punkte aus A[a…b] Annahme: M ist Feld deren x-Koordinate im Interval [w-,w+] liegt

3. MergeSort(M,1,length[M]) Sortiere nach y-Koordinate

4. for i 1 to length[M] do

5. j i+1

6. while M[j].y≤M[i].y+ and j ≤length[M] do

7. if || M[i]-M[j] || < ||p* - p*|| then (p*, p* ) (M[i], M[j])

8. j j+1

9. return (p* , p* )

1 2 21

1 2

Page 37: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

37

**** Merge ****

1. w A[m].x w ist x-Koordinate von A[m]

2. Sei M die Menge der Punkte aus A[a…b] Annahme: M ist Feld deren x-Koordinate im Interval [w-,w+] liegt

3. MergeSort(M,1,length[M]) Sortiere nach y-Koordinate

4. for i 1 to length[M] do

5. j i+1

6. while M[j].y≤M[i].y+ and j ≤length[M] do

7. if || M[i]-M[j] || < ||p* - p*|| then (p*, p* ) (M[i], M[j])

8. j j+1

9. return (p* , p* )

Teile & Herrsche

1 2 21

1 2

Page 38: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

38

**** Merge ****

1. w A[m].x w ist x-Koordinate von A[m]

2. Sei M die Menge der Punkte aus A[a…b] Annahme: M ist Feld deren x-Koordinate im Interval [w-,w+] liegt

3. MergeSort(M,1,length[M]) Sortiere nach y-Koordinate

4. for i 1 to length[M] do

5. j i+1

6. while M[j].y≤M[i].y+ and j ≤length[M] do

7. if || M[i]-M[j] || < ||p* - p*|| then (p*, p* ) (M[i], M[j])

8. j j+1

9. return (p* , p* )

Teile & Herrsche

1 2 21

1 2

Page 39: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

39

**** Merge ****

1. w A[m].x w ist x-Koordinate von A[m]

2. Sei M die Menge der Punkte aus A[a…b] Annahme: M ist Feld deren x-Koordinate im Interval [w-,w+] liegt

3. MergeSort(M,1,length[M]) Sortiere nach y-Koordinate

4. for i 1 to length[M] do

5. j i+1

6. while M[j].y≤M[i].y+ and j ≤length[M] do

7. if || M[i]-M[j] || < ||p* - p*|| then (p*, p* ) (M[i], M[j])

8. j j+1

9. return (p* , p* )

Teile & Herrsche

1 2 21

1 2

Page 40: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

40

**** Merge ****

1. w A[m].x w ist x-Koordinate von A[m]

2. Sei M die Menge der Punkte aus A[a…b] Annahme: M ist Feld deren x-Koordinate im Interval [w-,w+] liegt

3. MergeSort(M,1,length[M]) Sortiere nach y-Koordinate

4. for i 1 to length[M] do

5. j i+1

6. while M[j].y≤M[i].y+ and j ≤length[M] do

7. if || M[i]-M[j] || < ||p* - p*|| then (p*, p* ) (M[i], M[j])

8. j j+1

9. return (p* , p* )

Teile & Herrsche

1 2 21

1 2

Page 41: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

41

Teile & Herrsche

Lemma 16 Algorithmus ClosestPair2(A,a,b) gibt das nächste Paar aus A[a..b] zurück.

Beweis: Induktion über den Abstand n zwischen a und b Induktionsanfang:

n=b-a<4

In diesem Fall wird in Zeile 1 das nächste Paar aus A[a…b] zurückgegeben.

Induktionsvoraussetzung:

Für alle a, b mit b-a<n berechnet ClosestPair2(A,a,b) das nächste Paar aus A[a,b].

Page 42: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

42

Teile & Herrsche

Lemma 16 Algorithmus ClosestPair2(A,a,b) gibt das nächste Paar aus A[a..b] zurück.

Beweis: Induktionsvoraussetzung:

Für alle a, b mit b-a<n berechnet ClosestPair2(A,a,b) das nächste Paar aus A[a,b]. Induktionsschluss: Betrachte a, b mit a-b=n

Der Algorithmus sortiert zunächst die Punkte nach x-Koordinate. Dann wird

für rekursiv ClosestPair2 aufgerufen. Da gilt, greift

(I.V.) und der Algorithmus berechnet die nächsten Paare A[a…m] und A[m+1…b] korrekt. In Zeile 4 und 7 wird dann auf das nächste der beiden Paare gesetzt.

2

bam bma

)p,p( 21

Page 43: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

43

Teile & Herrsche

Induktionsschluss (Fortsetzung 1):

Sind beide Punkte des nächsten Paares von A[a…b] aus A[a…m] oder beide aus A[m+1…b], so ist bereits das nächste Paar von A[a…b] und wird am Ende des Algorithmus korrekt ausgegeben, da sich nur dann ändert, wenn man tatsächlich ein nächstes Paar findet. Betrachten wird also den Fall, dass o.B.d.A. für das nächste Paar (p,q)

und gilt. Zunächst einmal wird in Zeile 2 von von Menge M auf die Menge der Punkte gesetzt, deren x-Koordinate im Intervall

liegt mit . Alle Punkte aus A[a…m] haben x-Koordinaten und alle Punkte aus A[m+1…b] haben x-Koordinaten

Ist nun mind. Ein Punkt des nächsten Paares (p,q) aus A[a…b] nicht in M, so schneidet ihre direkte Verbindung die Vertikale x=w.

)p,p( 21

)p,p( 21

A[a...m]p 1...b]A[mq

w w.]w,-[w xA[m]w

Page 44: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

44

Teile & Herrsche

Induktionsschluss (Fortsetzung 2):

Sei nun o.B.d.A. Dann ist der Abstand von p zum Schnittpunkt mit dieser Vertikale bereits größer als , dem Abstand von Also kann p,q nicht nächstes Paar sein. Sind nun p,q in M, so werden sie nach y-Koordinaten sortiert. Dann werden alle Paare aus M mit verglichen, deren Abstand in der y-Koordinate ist. Auch hier gilt, dass man nur solche Paare vergleichen muss, da für alle anderen Paare der Abstand ist. Somit folgt die Korrektheit des Algorithmus.

)p,p( 21

M.p).p,p( 21

Page 45: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

45

Teile & Herrsche

Lemma 17 Algorithmus ClosestPair2(A,a,b) hat eine Laufzeit von O(n log²n), wobei

n=b-a+1 ist.

Wir zeigen, dass die Laufzeit eines Aufrufs von ClosestPair2(A,a,b) ohne den

Aufwand für die Rekursion mit n=b-a+1 durch O(n log n) beschränkt ist.

Dies gilt offensichtlich für alle Aufrufe bis auf die Zeilen 4-8 des Menge-Teils.

Wir zeigen nun folgende Behauptung aus der folgt, dass die Laufzeit für

diesen Teil O(n) ist.

Page 46: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

46

Teile & Herrsche

Behauptung Für jeden Punkt gibt es maximal 8 Punkte aus M, deren y-Koordinate aus

ist.

Beweis Wir betrachten das Rechteck, das durch die Eckpunkte

definiert wird. Dieses

unterteilen wir in 8 Quadrate mit Seitenlängen .

Sind nun in M mehr als 8 Punkte, deren y-Koordinate

aus ist, so liegen mindestens zwei dieser

innerhalb eines solchen Quadrates mit Seitenlänge .

Hat ein Punkt p x-Koordinate genau w, so liegt er im linken

Quadrat, wenn ist, und ansonsten im rechten Quadrat.

Mp]ypy,[p

y),p,(w y),p,-(w )yp,(w ),yp,-(w

]ypy,[p

A[a...m]p

2

2

Page 47: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

47

Teile & Herrsche

Behauptung Für jeden Punkt gibt es maximal 8 Punkte aus M, deren y-

Koordinate aus ist.

Beweis (Fortsetzung) Alle anderen sind Tie-breaks beliebig. Dann ist aber ihr Abstand höchstens

und sie liegen beide in oder ,

da die Quadrate jeweils auf einer der Vertikalen x=w

liegen.

Widerspruch zu Definition von .

Mp]ypy,[p

2

2A[a...m] 1...b]A[m

Page 48: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

48

Teile & Herrsche

Es ergibt sich also als Laufzeitrekursion für eine geeignete Konstante c:

z.z.:

(I.A.)

(I.V.)

(I.S.)

c2

nT2T(n)

cT(4)

nlogn cT(n) 216ccT(4)

mlog mcT(m):nm 2

n logn c2

n2TT(n)

n logn c2

nlog

2

n2c 2

)I.V.(

n logn c1-n logn logcn n logcn 2

Page 49: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

49

Teile & Herrsche

Satz 18 Das nächste Paar einer Menge von n Punkten in der Ebene kann in

O(n log² n) Zeit berechnet werden.