ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Σχετικά έγγραφα
Αλγόριθμοι Γραφημάτων

Δομές Δεδομένων Ενότητα 6

Αλγόριθμοι Γραφημάτων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Αλγόριθμοι Γραφημάτων

Αλγόριθµοι και Πολυπλοκότητα

Αλγόριθµοι και Πολυπλοκότητα

Ελάχιστο Συνδετικό έντρο

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8

Αλγόριθµοι και Πολυπλοκότητα

Αλγόριθμοι Γραφημάτων

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 9: Άπληστοι Αλγόριθμοι. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

Αναζήτηση Κατά Πλάτος

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Αλγόριθμοι και Πολυπλοκότητα

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 1: Δικτυωτή Ανάλυση (Θεωρία Γράφων)

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Ελάχιστο Συνδετικό Δέντρο

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος)

Ελάχιστο Συνδετικό Δέντρο

Θεωρία και Αλγόριθμοι Γράφων

Ελάχιστο Συνδετικό Δέντρο

Ελάχιστο Συνδετικό έντρο

Εισαγωγή στους Αλγορίθμους Ενότητα 10η

ΣΥΝΔΥΑΣΤΙΚΗ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ

Αλγόριθµοι και Πολυπλοκότητα

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 4

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Ελάχιστα Γεννητορικά ένδρα

Εισαγωγή στους Αλγορίθμους Ενότητα 9η

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΓΡΑΦΗΜΑΤΑ

Εισαγωγή στην Επιστήμη των Υπολογιστών

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ιδάσκοντες: Φ. Αφράτη,. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αλγόριθµοι και Πολυπλοκότητα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 7

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Εισαγωγή στους Αλγορίθμους Ενότητα 7η

Εισαγωγή στην Επιστήμη των Υπολογιστών

Δομημένος Προγραμματισμός

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Θεωρία Γραφημάτων 5η Διάλεξη

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 3 : Γραφήματα & Αποδείξεις. Αλέξανδρος Τζάλλας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόγχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Συντομότερα Μονοπάτια για Όλα τα Ζεύγη Κορυφών

Αναζήτηση Κατά Βάθος. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Δομές Δεδομένων και Αλγόριθμοι

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

Στοιχεία Θεωρίας Γράφων (Graph Theory)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Πρόβλημα του ελάχιστα εκτεταμένου δένδρου - Minimum spanning tree. Κηρυττόπουλος Κωνσταντίνος Επ. Καθηγητής ΕΜΠ

Network Algorithms and Complexity Παραλληλοποίηση του αλγορίθμου του Prim. Αικατερίνη Κούκιου

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Υπολογιστικά & Διακριτά Μαθηματικά

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 6: Προβλήματα ικανοποίησης περιορισμών. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

Ουρά Προτεραιότητας: Heap

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

Θεωρία Πιθανοτήτων & Στατιστική

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Συντομότερες ιαδρομές

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Μοντελοποίηση Λογικών Κυκλωμάτων

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

Εισαγωγή στους Αλγορίθμους

Λογιστικές Εφαρμογές Εργαστήριο

Γράφοι: κατευθυνόμενοι και μη

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 2: Γραφήματα

2 n N: 0, 1,..., n A n + 1 A

Θεωρία Γραφημάτων 5η Διάλεξη

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Τίτλος Μαθήματος: Θεωρία Γραφημάτων. Ενότητα: Συνεκτικότητα και Δισυνεκτικότητα. Διδάσκων: Λέκτορας Xάρης Παπαδόπουλος. Τμήμα: Μαθηματικών

Πληροφοριακά Συστήματα & Περιβάλλον Ασκήσεις

Transcript:

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 11: Minimum Spanning Trees Αλγόριθμος Prim Αλγόριθμος Kruskal Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Μαρία Σατρατζέμη 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Μαρία Σατρατζέμη

Minimum Spanning Tree Πρόβλημα: Για δοσμένο συνεκτικό, μη προσανατολισμένο, με βάρος γράφημα. 6 4 10 2 1 4

Minimum Spanning Tree Πρόβλημα: Για δοσμένο συνεκτικό, μη προσανατολισμένο, με βάρος γράφημα, να βρεθεί ένα δένδρο κάλυμμα (spanning tree) χρησιμοποιώντας ακμές που ελαχιστοποιούν το συνολικό βάρος. 6 4 10 2 1

Ορισμοί Δένδρο κάλυμμα (spanning tree) είναι ένα μερικό γράφημα του συνεκτικού γραφήματος G που είναι δένδρο. Δένδρο: συνεκτικό άκυκλο γράφημα Ισοδύναμες προτάσεις Συνεκτικό με n-1 ακμές Άκυκλο με n-1 ακμές Κάθε ζεύγος κορυφών συνδέεται με ένα μόνο μονοπάτι Αν ενωθούν 2 μη γειτονικές κορυφές με μια ακμή σχηματίζεται κύκλο. 6

Ορισμοί Ένα γράφημα g ονομάζεται μερικό γράφημα (partial graph) του γραφήματος G= (V, E) αν οι κορυφές του g είναι οι κορυφές του G και οι ακμές του g είναι υποσύνολο των ακμών του G, δηλαδή g = (V, E ), όπου Ε Ε. Ελάχιστο δένδρο κάλυμμα (minimum spanning tree) το δένδρο κάλυμμα με το ελάχιστο συνολικό βάρος ακμών. 7

Minimum Spanning Tree Ποιες ακμές σχηματίζουν Ελάχιστο Δένδρο Κάλυμμα (Minimum Spanning Tree MST) στο παρακάτω γράφημα? A 6 4 H B C 10 2 G E 1 D F

Απάντηση: Minimum Spanning Tree A 6 4 H B C 10 2 G E 1 D F

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); w(u, v) βάρος ακμής (u, v) 10

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; 10 key[v] = w(u,v); 6 4 2 1 Τρέχοντας ένα παράδειγμα 11

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); 6 4 10 2 1 Τρέχοντας ένα παράδειγμα 12

Prim s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; r 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); 6 4 10 0 2 1 Επιλέξτε μια οποιαδήποτε κορυφή ως αρχική r 1

Prim s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; u 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); 6 4 10 0 2 1 Κόκκινες κορυφές έχουν απομακρυνθεί από την Q

Prim s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; u 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); 6 4 10 0 2 1 Κόκκινες κορυφές έχουν απομακρυνθεί από την Q 1

Prim s Algorithm MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; u 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); 6 4 10 0 2 1 16

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); 6 4 10 0 u 2 1 17

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); 6 4 10 0 u 2 1 1

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); 6 4 10 10 0 u 2 1 1

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); 6 4 10 10 0 2 u 1 20

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); 6 4 10 2 10 0 2 u 1 21

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); 6 4 10 2 10 0 1 2 u 1 22

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); 6 4 10 2 10 0 1 2 u 1 2

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); 6 4 10 2 10 0 1 2 u 1 24

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); 4 6 4 10 2 10 0 1 2 u 1 2

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); 4 6 4 2 10 0 1 2 u 1 26

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) Prim s Algorithm 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); 4 6 4 2 10 0 1 u 2 1 27

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 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); 4 6 4 2 10 0 1 2 1 2

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) Prim s Algorithm 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); 4 6 4 2 10 0 1 2 1 u 2

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); 4 6 4 2 10 0 1 2 1 u 0

Ανάλυση: 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); Ποιο είναι το κρυμμένο κόστος στον αλγόριθμο? 1

Ανάλυση: 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; DecreaseKey(v, w(u,v)); 2

Ανάλυση : 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; DecreaseKey(v, w(u,v)); Πόσο συχνά καλείται η ExtractMin()? Πόσο συχνά καλείται η DecreaseKey()?

Ανάλυση: Prim s Algorithm Θ(V) συνολικά MST-Prim(G, w, r) 1 Q = V[G]; 2 for each u Q key[u] = ; 4 key[r] = 0; p[r] = NULL; 6 while (Q not empty) 7 u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) 10 p[v] = u; 11 key[v] = w(u,v); 4

Ανάλυση : Prim s Algorithm Θ(V) συνολικά V φορές MST-Prim(G, w, r) 1 Q = V[G]; 2 for each u Q key[u] = ; 4 key[r] = 0; p[r] = NULL; 6 while (Q not empty) 7 u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) 10 p[v] = u; 11 key[v] = w(u,v);

Ανάλυση : Prim s Algorithm Θ(V) συνολικά V φορές MST-Prim(G, w, r) 1 Q = V[G]; 2 for each u Q key[u] = ; 4 key[r] = 0; p[r] = NULL; 6 while (Q not empty) 7 u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) degree(u) 10 p[v] = u; φορές 11 key[v] = w(u,v); 6

Ανάλυση : Prim s Algorithm Θ(V) συνολικά V φορές MST-Prim(G, w, r) 1 Q = V[G]; 2 for each u Q key[u] = ; 4 key[r] = 0; p[r] = NULL; 6 while (Q not empty) 7 u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) degree(u) 10 p[v] = u; φορές 11 key[v] = w(u,v); v Adj v deg v 2 E v Θ(Ε) DecreaseKey 7

Ανάλυση : Prim s Algorithm Χρόνος = Θ(V). Τ ExtractMin + Θ(E). Τ DecreaseKey Q Τ ExtractMin Τ DecreaseKey Συνολικά πίνακας O(V) O(1) O(V 2 ) Διωνυμικός σωρός Σωρός Fibonacci O(log 2 V) O(log 2 V) O(E log 2 V) O(log 2 V) O(1) O(E+V log 2 V)

Ανάλυση : Prim s Algorithm Η επίδοση του αλγορίθμου του Prim εξαρτάται από τον τρόπο υλοποίησης της ουράς προτεραιότητας ελαχίστου Q. Αν η Q υλοποιηθεί ως διωνυμικός σωρός ελαχίστου η απόδοση αρχικών τιμών στις γραμμές 1- μπορεί να επιτευχθεί σε χρόνο Ο(V) μέσω της διαδικασίας Κατασκευή Σωρού Ελαχίστου. Το σώμα του βρόχου while εκτελείται V φορές και δεδομένου ότι κάθε πράξη Εξαγωγής Ελαχίστου διαρκεί χρόνο O(log 2 V) ο συνολικός χρόνος για όλες τις κλήσεις Εξαγωγής Ελαχίστου είναι O(V log 2 V). Ο βρόχος for στις γραμμές -11 εκτελείται συνολικά Ο(Ε) φορές αφού το άθροισμα των μηκών όλων των λιστών γειτνίασης είναι 2 Ε. Εντός του βρόχου for ο έλεγχος «συμμετοχής» στη ουρά Q στη γραμμή μπορεί να πραγματοποιηθεί σε σταθερό χρόνο μέσω μιας μοναδικής δύφιας μεταβλητής για κάθε κορυφή, που δείχνει αν η κορυφή ανήκει ή όχι στην Q και ενημερώνεται όταν η κορυφή αφαιρείται από την Q. Η ανάθεση τιμής στη γραμμή 11 περιλαμβάνει μια σιωπηρή πράξη Μείωσης Κλειδιού στο σωρό ελαχίστου μπορεί να υλοποιηθεί σε χρόνο O(log 2 V). O συνολικός χρόνος εκτέλεσης του αλγόριθμου του Prim είναι O(V log 2 V + E log 2 V) = O(E log 2 V).

Ανάλυση : Prim s Algorithm MST-Prim(G, w, r) Ποιος είναι ο χρόνος εκτέλεσης? 1 Q = V[G]; A: εξαρτάται από την υλοποίηση της Q 2 for each u Q - με διωνυμικό σωρό ελαχίστων: O(E log 2 V) key[u] = ; - με σωρό Fibonacci : O(V log 2 V + E) 4 key[r] = 0; p[r] = NULL; 6 while (Q not empty) 7 u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) 10 p[v] = u; 11 key[v] = w(u,v); 40

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); sort E by increasing edge weight w for each (u,v) E (in sorted order) if FindSet(u) FindSet(v) T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 41

Kruskal() { 1. T = ; 2. for each v V. MakeSet(v); Kruskal s Algorithm 4. sort E by increasing edge weight w. for each (u,v) E (in sorted order) 6. if FindSet(u) FindSet(v) 7. T = T U {{u,v}};. Union(FindSet(u), FindSet(v)); } Στις γραμμές 1- ορίζεται ένα αρχικό σύνολο Τ κενό και δημιουργούνται V δένδρα καθένα απ αυτά περιέχει 1 κόμβο. Στην 4 διατάσσονται οι ακμές του σε αύξουσα διάταξη ως προς το βάρος. 42

Kruskal() { 1. T = ; 2. for each v V. MakeSet(v); Kruskal s Algorithm Ο βρόχος στις γραμμές - ελέγχει για κάθε (u, v) αν τα άκρα της u και v ανήκουν στο ίδιο δένδρο. Αν ανήκουν τότε η προσθήκη της (u, v) θα δημιουργήσει κύκλο και άρα απορρίπτεται. Διαφορετικά οι 2 κόμβοι ανήκουν σε διαφορετικά δένδρα η ακμή (u, v) προστίθεται στο Τ στη γραμμή 7 και οι κόμβοι των 2 δένδρων συγχωνεύονται στη γραμμή. 4. sort E by increasing edge weight w. for each (u,v) E (in sorted order) 6. if FindSet(u) FindSet(v) 7. T = T U {{u,v}};. Union(FindSet(u), FindSet(v)); } 4

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 44

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 4

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 46

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1? 47

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 4

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2? 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 4

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 0

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v));? 1 1

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 2

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v);? Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 4

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v));? 1

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 6

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1? T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 7

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1? sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 60

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17? 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 61

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1? sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 62

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21? 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 6

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2? if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 64

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 6

Kruskal s Algorithm Kruskal() { } T = ; for each v V MakeSet(v); Εκτέλεση αλγόριθμου: 2 1 sort E by increasing edge weight w for each (u,v) E (in sorted order) 21 2 if FindSet(u) FindSet(v) 17 1 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); 1 66

Kruskal s Algorithm: Χρόνος Εκτέλεσης Kruskal() { 1 T = ; 2 for each v V MakeSet(v); 4 sort E by increasing edge weight w for each (u,v) E (in sorted order) 6 if FindSet(u) FindSet(v) 7 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } Τι επηρεάζει το χρόνο εκτέλεσης? 67

Kruskal s Algorithm: Χρόνος Εκτέλεσης Ο χρόνος εκτέλεσης του αλγόριθμου του Kruskal εξαρτάται από την υλοποίηση της δομής δεδομένων ξένων συνόλων. Υποθέτουμε ότι ακολουθείται η υλοποίηση του δάσους ξένων συνόλων. Ο αρχικός ορισμός του συνόλου T στην γραμμή 1 απαιτεί χρόνο Ο(1) και η ταξινόμηση των ακμών στην 4 απαιτεί O(Elog 2 E). Ο βρόχος στις γραμμές - εκτελεί Ο(Ε) πράξεις FindSet και Union στο δάσος ξένων συνόλων. Μαζί με τις V πράξεις MakeSet οι εργασίες αυτές απαιτούν συνολικό χρόνο Ο(V + E) α(v) όπου α βραδύτατα αύξουσα συνάρτηση που ορίζεται στην υλοποίηση του δάσους ξένων συνόλων ( 21.4 CLRS). Δεδομένου ότι το G είναι συνεκτικό έχουμε E V - 1 και επομένως οι πράξεις ξένων συνόλων απαιτούν Ο(Ε α(v)). Επιπλέον α(v) = Ο(log 2 V)=O(log 2 E) ο συνολικός χρόνος εκτέλεσης του Kruskal είναι Ο(Ε log 2 E). Δεδομένου ότι E < V 2. έχουμε log 2 E =O(log 2 V) και επομένως ο χρόνος εκτέλεσης του αλγορίθμου Kruskal μπορεί να γραφεί O(Ε log 2 V) 6

Kruskal s Algorithm: Χρόνος Εκτέλεσης Kruskal() { 1 T = ; 2 for each v V MakeSet(v); 4 sort E by increasing edge weight w for each (u,v) E (in sorted order) 6 if FindSet(u) FindSet(v) 7 T = T U {{u,v}}; Union(FindSet(u), FindSet(v)); } Τι επηρεάζει το χρόνο εκτέλεσης? 1 Sort O(V) MakeSet() κλήσεις O(E) FindSet() κλήσεις O(V) Union() κλήσεις (πόσες ακριβώς Union()?) 6

Kruskal s Algorithm: Χρόνος Εκτέλεσης Συνοψίζοντας: Sort edges: O(E lοg 2 E) O(V) MakeSet() s O(E) FindSet() s O(V) Union() s Τελικό συμπέρασμα: Ο καλύτερος αλγόριθμος για disjoint-set union εκτελεί τις παραπάνω πράξεις σε O(E (E,V)), σχεδόν σταθερή Τελικώς O(E lοg 2 E) O(E lοg 2 V) 70

Τέλος Ενότητας