Δομές Δεδομένων

50
Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 1 Δομές Δεδομένων - DFS σε κατευθυνόμενο γράφο - Ελάχιστα Μονοπάτια - Τοπολογική Ταξινόμηση - Eλάχιστα Ζευγνύοντα Δένδρα

Upload: marek

Post on 09-Jan-2016

31 views

Category:

Documents


2 download

DESCRIPTION

Δομές Δεδομένων. - DFS σε κατευθυνόμενο γράφο Ελάχιστα Μονοπάτια Τοπολογική Ταξινόμηση E λάχιστα Ζευγνύοντα Δένδρα. Depth First Search. Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για : Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι, - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 1

Δομές Δεδομένων

- DFS σε κατευθυνόμενο γράφο- Ελάχιστα Μονοπάτια- Τοπολογική Ταξινόμηση- Eλάχιστα Ζευγνύοντα Δένδρα

Page 2: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 2

Depth First Search

Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για:

• Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι,• Να προσδιοριστούν οι συνεκτικές συνιστώσες του

γράφου,• Να προσδιορίσουμε τα σημεία άρθρωσης, • …

Page 3: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 3

Αλγόριθμος DFSDFS(G)

{

for each vertex u G->V {

u->color = EMPTY;

}

time = 0;

for each vertex u G->V {

if (u->color == EMPTY)

DFS_Visit(u);

}

}

DFS_Visit(u)

{

u->color = YELLOW;

time = time+1;

u->d = time;

for each v u->Adj[] {

if (v->color == EMPTY)

DFS_Visit(v);

}

u->color = WHITE;

time = time+1;

u->f = time;

}

Page 4: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 4

Παράδειγμα DFSΠηγή

Page 5: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 5

1 | | |

| | |

| |

d f

ΠηγήΠαράδειγμα DFS

Page 6: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 6

1 | | |

| | |

2 | |

d f

ΠηγήΠαράδειγμα DFS

Page 7: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 7

1 | | |

| | 3 |

2 | |

d f

ΠηγήΠαράδειγμα DFS

Page 8: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 8

1 | | |

| | 3 | 4

2 | |

d f

ΠηγήΠαράδειγμα DFS

Page 9: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 9

1 | | |

| 5 | 3 | 4

2 | |

d f

ΠηγήΠαράδειγμα DFS

Page 10: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 10

1 | | |

| 5 | 63 | 4

2 | |

d f

ΠηγήΠαράδειγμα DFS

Page 11: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 11

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

d f

ΠηγήΠαράδειγμα DFS

Page 12: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 12

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

d f

ΠηγήΠαράδειγμα DFS

Page 13: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 13

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |

d f

ΠηγήΠαράδειγμα DFS

Page 14: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 14

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 15: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 15

1 | 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 16: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 16

1 |12 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 17: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 17

1 |12 8 |11 13|

| 5 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 18: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 18

1 |12 8 |11 13|

14| 5 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 19: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 19

1 |12 8 |11 13|

14|155 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 20: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 20

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

d f

ΠηγήΠαράδειγμα DFS

Page 21: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 21

DAGDAG = Directed Acyclic GraphΚατευθυνόμενος γράφος χωρίς κύκλους

Page 22: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 22

Βασικό Θεώρημα

Ένας γράφος G(V,E) είναι DAG εάν και μόνο εάν το δένδρο DFS που προκύπτει δεν έχει πίσω βέλη.

Page 23: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 23

Τοπολογική ΤαξινόμησηUnderwear Socks

ShoesPants

Belt

Shirt

Watch

Tie

Jacket

Socks Underwear Pants Shoes Watch Shirt Belt Tie Jacket

Page 24: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 24

Μέθοδος

Topological-Sort(){

Εκτέλεση DFSΌταν ολοκληρώσουμε την επίσκεψη σε μία κορυφή, τη δίνουμε στην έξοδο.

Οι κορυφές δίδονται στην έξοδο με αντίστροφη σειρά.

}

• Κόστος: O(V+E)

Page 25: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 25

Ελάχιστα Μονοπάτια

Πρόβλημα:

Σε ένα γράφο G(V,E) με βάρη, δίνονται οι κορυφές Α και Β και ζητείται να προσδιορίσουμε ένα μονοπάτι που έχει το ελάχιστο κόστος μετάβασης από την Α στη Β.

Page 26: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 26

Tokyo Subway Map

Page 27: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 27

Ελάχιστα Ζευγνύοντα Δένδρα

Αλλιώς: Minimum Spanning Trees (MST)

Είναι το δένδρο που προκύπτει από έναν γράφο G(V,E) αν κρατήσουμε τις ακμές που δίνουν αθροιστικά το ελάχιστο κόστος και ο γράφος που απομένει είναι συνδεδεμένος.

Page 28: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 28

Minimum Spanning TreeΠοιες ακμές πρέπει να κρατήσουμε στο

παρακάτω γράφημα για να έχουμε MST?

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

Page 29: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 29

Minimum Spanning Tree

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

Page 30: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 30

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Page 31: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 31

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

1410

3

6 45

2

9

15

8

Run on example graph

Page 32: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 32

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

1410

3

6 45

2

9

15

8

Run on example graph

Page 33: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 33

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

0

1410

3

6 45

2

9

15

8

Pick a start vertex r

r

Page 34: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 34

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

0

1410

3

6 45

2

9

15

8

u

Page 35: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 35

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

0

3

1410

3

6 45

2

9

15

8

u

Page 36: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 36

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

14

0

3

1410

3

6 45

2

9

15

8

u

Page 37: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 37

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

14

0

3

1410

3

6 45

2

9

15

8u

Page 38: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 38

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

14

0 8

3

1410

3

6 45

2

9

15

8u

Page 39: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 39

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10

0 8

3

1410

3

6 45

2

9

15

8u

Page 40: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 40

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10

0 8

3

1410

3

6 45

2

9

15

8u

Page 41: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 41

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10 2

0 8

3

1410

3

6 45

2

9

15

8u

Page 42: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 42

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10 2

0 8 15

3

1410

3

6 45

2

9

15

8u

Page 43: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 43

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10 2

0 8 15

3

1410

3

6 45

2

9

15

8

u

Page 44: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 44

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10 2 9

0 8 15

3

1410

3

6 45

2

9

15

8

u

Page 45: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 45

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

10 2 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u

Page 46: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 46

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

5 2 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u

Page 47: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 47

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

5 2 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u

Page 48: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 48

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

5 2 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u

Page 49: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 49

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

5 2 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u

Page 50: Δομές Δεδομένων

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 50

Prim’s Algorithm

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

5 2 9

0 8 15

3

4

1410

3

6 45

2

9

15

8

u