1 / 87

Συνδετικότητα γραφήματος ( g raph c onnectivity )

Συνδετικότητα γραφήματος ( g raph c onnectivity ). Συνδετικότητα γραφήματος ( g raph c onnectivity ). Υπάρχει μονοπάτι μεταξύ α και β ;. α. Παραδείγματα : υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές ενός προγράμματος τρανζίστορ σε ηλεκτρονικό κύκλωμα. β.

logan-irwin
Télécharger la présentation

Συνδετικότητα γραφήματος ( g raph c onnectivity )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Συνδετικότητα γραφήματος (graph connectivity)

  2. Συνδετικότητα γραφήματος (graph connectivity) Υπάρχει μονοπάτι μεταξύ α και β; α • Παραδείγματα: • υπολογιστές ενός δικτύου • ιστοσελίδες • ισοδύναμες μεταβλητές ενός προγράμματος • τρανζίστορ σε ηλεκτρονικό κύκλωμα β

  3. Συνδετικότητα γραφήματος (graph connectivity) Υπάρχει μονοπάτι μεταξύ α και β; α • Παραδείγματα: • υπολογιστές ενός δικτύου • ιστοσελίδες • ισοδύναμες μεταβλητές ενός προγράμματος • τρανζίστορ σε ηλεκτρονικό κύκλωμα β

  4. Συνδετικότητα γραφήματος (graph connectivity) Υπάρχει μονοπάτι μεταξύ α και β; α • Παραδείγματα: • υπολογιστές ενός δικτύου • ιστοσελίδες • ισοδύναμες μεταβλητές ενός προγράμματος • τρανζίστορ σε ηλεκτρονικό κύκλωμα β Αν το γράφημα είναι γνωστό εξαρχής (offline) τότε μπορούμε να λύσουμε το πρόβλημα σε γραμμικό χρόνο με οριζόντια ή καθοδική διερεύνηση. Θα δώσουμε μια εναλλακτική λύση η οποία μπορεί να χρησιμοποιηθεί ακόμα και όταν το γράφημα μας δίνεται μια ακμή τη φορά (online).

  5. Σχέση ισοδυναμίας (equivalence relation) Η συδετικότητα σε ένα γράφημα ορίζει μία σχέση ισοδυναμίας μεταξύ των κόμβων του γραφήματος Σ = Διμερής σχέση μεταξύ αντικειμένων ενός συνόλου Α; υποσύνολο του Α×Α Σ είναι σχέση ισοδυναμίας (equivalence relation): Αυτοπαθής: Συμμετρική: και Μεταβατική:

  6. Το πρόβλημα ένωσης-εύρεσης (union-find) Θέλουμε μία δομή δεδομένων που να υποστηρίζει τις παρακάτω λειτουργίες: ένωση(α,β): αντικαθιστά τα σύνολα που περιέχουν τα α και β με την ένωση τους εύρεση(α): επιστρέφει το όνομα του συνόλου που περιέχει το α Γ Α Β ένωση(α,β)

  7. Το πρόβλημα ένωσης-εύρεσης (union-find) Θέλουμε μία δομή δεδομένων που να υποστηρίζει τις παρακάτω λειτουργίες: ένωση(α,β): αντικαθιστά τα σύνολα που περιέχουν τα α και β με την ένωση τους εύρεση(α): επιστρέφει το όνομα του συνόλου που περιέχει το α Η δομή αυτή αρκεί για να επιλύσουμε το πρόβλημα τις συνδετικότητας: α β Για κάθε ακμή (α,β) εκτελούμε ένωση(α,β) α β Το α συνδέεται με το β αν και μόνο αν εύρεση(α)=εύρεση(β)

  8. Δομή Εύρεσης-Ένωσης με Λίστες Διατηρούμε ξένα μεταξύ τους σύνολα που είναι υποσύνολαενός συνόλου , όπου και Λειτουργίες Δημιουργεί νέο σύνολο με μόνο στοιχείο το Έστω το σύνολο που περιέχει το και έστω το σύνολο που περιέχει το . Δημιουργεί ένα νέο σύνολο και διαγράφει τα και Επιστρέφει το όνομα του συνόλου που περιέχει το Ως «όνομα» ενός συνόλουμπορούμε να ορίσουμε ένα στοιχείοπου να αποτελεί τον «αντιπρόσωπο» του συνόλου

  9. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Π.χ. για το σύνολο με αντιπρόσωπο headS b d a h Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο private class Node {Item item; Node next;Node rep}; headS b d a h

  10. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Τώρα τα ορίσματαπου δέχονται και οι τιμές που επιστρέφουν οι λειτουργίες και είναι αναφορές σε κόμβους Η λειτουργία επιστρέφει αναφορά σε νέο κόμβο που αποθηκεύει το στοιχείο

  11. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Δημιουργεί νέο κόμβο που αποθηκεύει το στοιχείο kκαι επιστρέφει αναφοράxστον κόμβο x Node x = new Node(); x.item = k; x.next = null; x.rep = x; k Χρόνος

  12. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Επιστρέφει την αναφορά x.rep x b d a h Χρόνος

  13. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Έστω p=x.repκαιq=y.rep.Διατρέχει τη λίστα του qκαι για κάθε κόμβο vαυτής της λίστας θέτειv.rep = p.Τέλοςσυνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο τοp. x y b d a c h Χρόνοςόπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το

  14. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Έστω p=x.repκαιq=y.rep.Διατρέχει τη λίστα του qκαι για κάθε κόμβο vαυτής της λίστας θέτειv.rep = p.Τέλοςσυνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο τοp. p q b d a c h Χρόνοςόπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το

  15. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Έστω p=x.repκαιq=y.rep.Διατρέχει τη λίστα του qκαι για κάθε κόμβο vαυτής της λίστας θέτειv.rep = p.Τέλοςσυνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο τοp. p q v b d a c h Χρόνοςόπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το

  16. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Έστω p=x.repκαιq=y.rep.Διατρέχει τη λίστα του qκαι για κάθε κόμβο vαυτής της λίστας θέτειv.rep = p.Τέλοςσυνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο τοp. p q v b a c d h Χρόνοςόπου ο αριθμός των στοιχείων στo σύνολο που περιέχει το

  17. Δομή Εύρεσης-Ένωσης με Λίστες Κάθε σύνολο μπορεί να αποθηκευτεί σε μια συνδεδεμένη λίστα με τον αντιπρόσωπο του στην κορυφή της λίστας Για να έχουμε τη δυνατότητα να βρούμε τον αντιπρόσωπο γρήγορα, προσθέτουμε στη δομή Node ένα ακόμα πεδίο rep που είναι αναφορά στον κόμβο-αντιπρόσωπο Έστω p=x.repκαιq=y.rep.Διατρέχει τη λίστα του qκαι για κάθε κόμβο vαυτής της λίστας θέτειv.rep = p.Τέλοςσυνενώνει τις δύο λίστες σε μία λίστα με αρχικό κόμβο τοp. Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα

  18. Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Τώρα πρέπει να αποθηκεύουμε και τον αριθμό των στοιχείων του κάθε συνόλου, π.χ. σε ξεχωριστό κόμβο-κεφαλή που παίζει το ρόλο του αντιπρόσωπου 4 b d a h Άσκηση: Δώστε τις λεπτομέρειες αυτής της δομής, ειδικά το πως υλοποιείται η

  19. Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Αν ισχύει ο παραπάνω χρόνος για μια ένωση, τότε ενώσεις γίνονται σε χρόνο όπου ο συνολικός αριθμός των στοιχείων Απόδειξη

  20. Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Αν ισχύει ο παραπάνω χρόνος για μια ένωση, τότε ενώσεις γίνονται σε χρόνο όπου ο συνολικός αριθμός των στοιχείων Απόδειξη Έστω . Τότε η εκτελείται σε χρόνο και το νέο σύνολο που προκύπτει έχει στοιχεία.Το κόστος επιμερίζεται σε κόστος ανά στοιχείο που αλλάζει δείκτη σε αντιπρόσωπο. Επομένως αν το συμμετέχει στο μικρότερο σύνολο σε ενώσεις τότετο νέο σύνολο που περιέχει το θα έχειστοιχεία. Όμως οπότε . Άρα το συνολικό κόστος ανά στοιχείο είναι . Αφού έχουμε στοιχεία το συνολικό κόστος είναι

  21. Δομή Εύρεσης-Ένωσης με Λίστες Με λίγη περισσότερη προσπάθεια ο χρόνος της ένωσης γίνεται όπου και ο αριθμός των στοιχείων του συνόλου που περιέχει το και το αντίστοιχα Αν ισχύει ο παραπάνω χρόνος για μια ένωση, τότε ενώσεις γίνονται σε χρόνο όπου ο συνολικός αριθμός των στοιχείων Παρατήρηση Ο παράγοντας στο χρόνο αντιστοιχεί στο κόστος εύρεσης των αντιπροσώπων των συνόλων που ενώνονται Με βάση τα παραπάνω καταλήγουμε στο συμπέρασμα ότι οποιαδήποτε ακολουθία από λειτουργίες και λειτουργίες καιαπαιτεί συνολικό χρόνο

  22. Δομή Εύρεσης-Ένωσης με Λίστες Ερώτημα : Πως μπορούμε να βρούμε τον κόμβο που περιέχει ένα στοιχείο ; Αν τα στοιχεία είναι μικροί ακέραιοι (π.χ. ) τότε μπορούμε να αποθηκεύσουμε ένα πίνακα δεικτών όπου η θέσηδείχνει στον κόμβο που αντιστοιχεί στο στοιχείο Π.χ. 1 2 3 4 5 6 7 8 4 b d a h

  23. Δομή Εύρεσης-Ένωσης με Λίστες Ερώτημα : Πως μπορούμε να βρούμε τον κόμβο που περιέχει ένα στοιχείο ; Αν τα στοιχεία είναι μικροί ακέραιοι (π.χ. ) τότε μπορούμε να αποθηκεύσουμε ένα πίνακα δεικτών όπου η θέσηδείχνει στον κόμβο που αντιστοιχεί στο στοιχείο Διαφορετικά χρειαζόμαστε μια δομή αναζήτησης (λεξικό), π.χ. δένδρο αναζήτησης ή πίνακα διασποράς.

  24. Αλγόριθμοι ένωσης-εύρεσης Ας υποθέσουμε ότι τα αντικείμενα μας είναι ακέραιοι αριθμοί: Χρησιμοποιούμε ένα πίνακα Π διαστάσεων για Αρχικοποίηση : Αρχικά κάθε αντικείμενο αποτελεί ένα ξεχωριστό σύνολο 1 2 3 4 5 6 7 8

  25. Αλγόριθμοι ένωσης-εύρεσης Αρχικά κάθε αντικείμενο αποτελεί ένα ξεχωριστό σύνολο 1 2 3 4 5 6 7 8 Ο αλγόριθμος διαβάζει ένα γράφημα από την είσοδο και πραγματοποιεί τις κατάλληλες ενώσεις. Το γράφημα δίνεται ως μια ακολουθία ακμών. 1 3 4 5 2 6 7 8 Π.χ. το παραπάνω γράφημα μπορεί να μας δίνεται ως η ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7}

  26. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση Επιβάλλουμε την παρακάτω συνθήκη: Οποιαδήποτε δύο αντικείμενα α και β ανήκουν στο ίδιο σύνολο αν και μόνο αν θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε εύρεση(α) : επιστρέφουμε την τιμή του

  27. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση Οποιαδήποτε δύο αντικείμενα α και β ανήκουν στο ίδιο σύνολο θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε void union(int a, int b) { int k; if (Pi[a] == Pi[b]) return; for (k=1; k<=N; k++) if (Pi[k]==Pi[b]) Pi[k]=Pi[a]; } αν και μόνο αν εύρεση(α) : επιστρέφουμε την τιμή του void find(int a) { return Pi[a]; }

  28. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 2 3 4 5 6 7 8

  29. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 2 3 4 5 6 7 8

  30. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 3 4 5 6 7 8 2

  31. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 3 4 5 6 7 8 2

  32. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 6 7 8 2 3

  33. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 6 7 8 2 3

  34. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 6 7 8 2 3

  35. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 6 7 2 3 8

  36. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 6 7 2 3 8

  37. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 7 2 3 6 8

  38. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 5 7 2 3 6 8

  39. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 7 2 3 6 5 8

  40. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 7 2 3 6 5 8

  41. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 2 3 5 6 7 8

  42. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 4 2 3 5 6 7 8

  43. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 2 3 4 5 6 7 8

  44. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη εύρεση Επιβάλλουμε την παρακάτω συνθήκη: Οποιαδήποτε δύο αντικείμενα α και β ανήκουν στο ίδιο σύνολο αν και μόνο αν θέτουμε ένωση(α,β) : για κάθε κ τέτοιο ώστε εύρεση(α) : επιστρέφουμε την τιμή του Ιδιότητα: Για ν αντικείμενα και μ πράξεις ένωσης, ο αλγόριθμος γρήγορης εύρεσης απαιτεί τουλάχιστον μν εντολές.

  45. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη ένωση δείκτης σε άλλο αντικείμενο του ίδιου συνόλου εύρεση(α) : ξεκινώντας από το α ακολουθούμε τους δείκτες μέχρι να βρούμε · επιστρέφουμε την τιμή κ. βρούμε αντικείμενο κ τέτοιο ώστε α και β ανήκουν στο ίδιο σύνολο αν και μόνο αν εύρεση(α) = εύρεση(β) ένωση(α,β) : εκτελούμε κ←εύρεση(α) και λ ←εύρεση(β) · θέτουμε

  46. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη ένωση δείκτης σε άλλο αντικείμενο του ίδιου συνόλου εύρεση(α) : ξεκινώντας από το α ακολουθούμε τους δείκτες μέχρι να βρούμε · επιστρέφουμε την τιμή κ. βρούμε αντικείμενο κ τέτοιο ώστε void find(int a) { int k=a; while (k != Pi[k]) k=Pi[k]; return k; } α και β ανήκουν στο ίδιο σύνολο αν και μόνο αν εύρεση(α) = εύρεση(β) ένωση(α,β) : εκτελούμε κ←εύρεση(α) και λ ←εύρεση(β) · θέτουμε void union(int a, int b) { int k=find(a); int l=find(b); Pi[l]=k; }

  47. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη ένωση ένωση(α,β) : εκτελούμε κ←εύρεση(α) και λ ←εύρεση(β) · θέτουμε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 2 3 4 5 6 7 8

  48. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη ένωση ένωση(α,β) : εκτελούμε κ←εύρεση(α) και λ ←εύρεση(β) · θέτουμε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 2 3 4 5 6 7 8

  49. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη ένωση ένωση(α,β) : εκτελούμε κ←εύρεση(α) και λ ←εύρεση(β) · θέτουμε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 3 4 5 6 7 8 2

  50. Αλγόριθμοι ένωσης-εύρεσης: γρήγορη ένωση ένωση(α,β) : εκτελούμε κ←εύρεση(α) και λ ←εύρεση(β) · θέτουμε ακολουθία ακμών {1,2} {2,3} {1,3} {7,8} {4,6} {4,5} {6,7} {3,6} {5,7} {4,7} 1 3 4 5 γράφημα 2 6 7 8 πίνακας δέντρο ένωσης-εύρεσης 1 3 4 5 6 7 8 2

More Related