Δομές Δεδομένων
DESCRIPTION
Δομές Δεδομένων. - DFS σε κατευθυνόμενο γράφο Ελάχιστα Μονοπάτια Τοπολογική Ταξινόμηση E λάχιστα Ζευγνύοντα Δένδρα. Depth First Search. Μέθοδος που χρησιμοποιείται ευρύτατα από πολλούς αλγορίθμους γραφημάτων. Μπορεί να χρησιμοποιηθεί για : Να απαντήσει αν ο γράφος είναι συνεκτικός ή όχι, - PowerPoint PPT PresentationTRANSCRIPT
Δομές Δεδομένων Τμήμα Πληροφορικής ΑΠΘ 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