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

Post on 09-Jan-2016

31 views 2 download

description

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

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

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

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

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

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

Depth First Search

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

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

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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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;

}

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

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

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

1 | | |

| | |

| |

d f

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

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

1 | | |

| | |

2 | |

d f

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

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

1 | | |

| | 3 |

2 | |

d f

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

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

1 | | |

| | 3 | 4

2 | |

d f

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

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

1 | | |

| 5 | 3 | 4

2 | |

d f

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

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

1 | | |

| 5 | 63 | 4

2 | |

d f

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

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

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

d f

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

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

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

d f

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

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

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |

d f

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

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

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |10

d f

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

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

1 | 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

d f

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

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

1 |12 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

d f

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

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

1 |12 8 |11 13|

| 5 | 63 | 4

2 | 7 9 |10

d f

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

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

1 |12 8 |11 13|

14| 5 | 63 | 4

2 | 7 9 |10

d f

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

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

1 |12 8 |11 13|

14|155 | 63 | 4

2 | 7 9 |10

d f

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

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

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

d f

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

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

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

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

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

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

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

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

ShoesPants

Belt

Shirt

Watch

Tie

Jacket

Socks Underwear Pants Shoes Watch Shirt Belt Tie Jacket

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

Μέθοδος

Topological-Sort(){

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

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

}

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

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

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

Πρόβλημα:

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

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

Tokyo Subway Map

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

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

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

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

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

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

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

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

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

Minimum Spanning Tree

H B C

G E D

F

A

1410

3

6 4

5

2

9

15

8

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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);

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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

Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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