Κεφάλαιο 3 Γραφήματα v1.3 (2014-01-30) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1
3.1 Βασικοί Ορισμοί και Εφαρμογές
γραφήματα γράφημα G: ένας τρόπος κωδικοποίησης των σχέσεων ανά ζεύγη μεταξύ των αντικειμένων ενός συνόλου G = (V, E) V = κόμβοι (nodes) E = ακμές (edges) μεταξύ ζευγών κόμβων Μια ακμή e E είναι ένα υποσύνολο του V με δύο στοιχεία: e={u, v} Οι κόμβοι u και v της ακμής e={u, v} ονομάζονται άκρα της e Οι ακμές αναπαριστούν διμερή σχέση μεταξύ κόμβων. Παράμετροι του γραφήματος: n = V, m = E. 3
μη κατευθυνόμενα και κατευθυνόμενα γραφήματα Μη-κατευθυνόμενο γράφημα (undirected graph) ή απλά γράφημα (graph) Οι ακμές υποδεικνύουν μια συμμετρική σχέση μεταξύ των άκρων τους Κατευθυνόμενο γράφημα (directed graph) Οι ακμές κωδικοποιούν ασύμμετρες σχέσεις Κάθε κατευθυνόμενη ακμή είναι ένα διατεταγμένο ζεύγος Παράδειγμα μη-κατευθυνόμενου γραφήματος V = { 1, 2, 3, 4, 5, 6, 7, 8 } E = { 1-2, 1-3, 2-3, 2-4, 2-5, 3-5, 3-7, 3-8, 4-5, 5-6 } n = 8 m = 11 4
εφαρμογές γραφημάτων
Königsberg, 1736 ο Euler σε ώρα περιπάτου στις όχθες του ποταμού Pregel (Königsberg 1736). Leonhard Euler (1707-1783) Mathematician and physicist Απόφοιτος: University of Basel Institutions: Imperial Russian Academy of Sciences Berlin Academy Doctoral advisor: Johann Bernoulli Doctoral students: Johann Hennert Joseph Lagrange Δομές Δεδομένων και Αλγόριθμοι
το πρόβλημα Υπάρχει διαδρομή που περνάει από όλες τις γέφυρες ακριβώς μία φορά και τερματίζει στο σημείο εκκίνησης; 7 Δομές Δεδομένων και Αλγόριθμοι
πιο αναλυτικά? Δομές Δεδομένων και Αλγόριθμοι
το πρώτο γραφοθεωρητικό πρόβλημα Δομές Δεδομένων και Αλγόριθμοι
η λύση του Euler ο Euler βρήκε τη λύση χρησιμοποιώντας το βαθμό των κορυφών του γραφήματος βαθμός: το πλήθος των ακμών που προσπίπτουν στην κορυφή Δομές Δεδομένων και Αλγόριθμοι
η λύση του Euler ο Euler βρήκε τη λύση χρησιμοποιώντας το βαθμό των κορυφών του γραφήματος βαθμός: το πλήθος των ακμών που προσπίπτουν στην κορυφή Η λύση: Το γράφημα πρέπει να είναι συνεκτικό και όλες οι κορυφές να έχουν ζυγό βαθμό. Δομές Δεδομένων και Αλγόριθμοι
ορισμένες εφαρμογές των γραφημάτων Γράφημα Κόμβοι Ακμές μεταφορές διασταυρώσεις δρόμων δρόμοι επικοινωνία υπολογιστές καλώδια οπτικών ινών World Wide Web ιστοσελίδες υπερσυνδέσεις κοινωνικές άνθρωποι σχέσεις διατροφική αλυσίδα είδη θηρευτής-θήραμα συστήματα λογισμικού συναρτήσεις κλήσεις συναρτήσεων χρονοπρογραμματισμός εργασίες περιορισμοί προτεραιότητας κυκλώματα πύλες καλώδια 12
World Wide Web Web γράφημα. Κόμβος: ιστοσελίδα. Ακμή: υπερσύνδεση από μία σελίδα σε άλλη. cnn.com netscape.com novell.com cnnsi.com timewarner.com hbo.com sorpranos.com 13
ένα κοινωνικό δίκτυο Γράφημα κοινωνικής δικτύωσης Κόμβοι: άνθρωποι. Ακμή: σχέση μεταξύ δύο ανθρώπων. Reference: wikipedia, http://en.wikipedia.org/wiki/social_network 14
διατροφική αλυσίδα Γράφημα διατροφικής αλυσίδας. Κόμβοι = είδη. Ακμή = από θηρευτή σε θήραμα. References: http://www.twingroves.district96.k12.il.us/wetlands/salamander/salgraphics/salfoodweb.giff http://www.aqualex.org/elearning/marine_environment/greek/chap4/images/fig20.gif 15
αναπαράσταση γραφημάτων
αναπαράσταση γραφήματος: πίνακας γειτνίασης Πίνακας γειτνίασης (adjacency matrix). πίνακας n x n με A uv = 1 εάν (u, v) είναι μια ακμή. Δύο κελιά για κάθε ακμή. Χώρος ανάλογος του n 2. Έλεγχος για ύπαρξη ακμής (u, v): σε χρόνο (1). Εύρεση όλων των ακμών: σε χρόνο (n 2 ). 1 2 3 4 5 6 7 8 1 0 1 1 0 0 0 0 0 2 1 0 1 1 1 0 0 0 3 1 1 0 0 1 0 1 1 4 0 1 0 1 1 0 0 0 5 0 1 1 1 0 1 0 0 6 0 0 0 0 1 0 0 0 7 0 0 1 0 0 0 0 1 8 0 0 1 0 0 0 1 0 17
αναπαράσταση γραφήματος: λίστα γειτνίασης λίστα γειτνίασης (adjacency list). Πίνακας από λίστες, με μία λίστα για κάθε κόμβο. Δύο αναπαραστάσεις για κάθε ακμή. Χώρος ανάλογος του m + n. Ο έλεγχος για την ύπαρξη ακμής (u, v) γίνεται σε O(deg(u)). Εύρεση όλων των ακμών σε χρόνο (m + n). βαθμός (degree) = το πλήθος των γειτόνων του κόμβου u 1 2 3 2 3 1 3 4 5 1 2 5 7 8 4 2 5 5 6 2 3 4 6 5 7 3 8 8 3 7 18
μονοπάτια, κύκλοι, κτλ.
μονοπάτια και συνεκτικότητα Ορισμός. Ένα μονοπάτι (path) σε ένα μη-κατευθυνόμενο γράφημα G = (V, E) είναι μια ακολουθία P από κόμβους v 1, v 2,, v k-1, v k με την ιδιότητα ότι κάθε διαδοχικό ζευγάρι v i, v i+1 συνδέεται με μια ακμή στο E. Ορισμός. Ένα μονοπάτι είναι απλό (simple) εάν όλοι οι κόμβοι είναι διακριτοί (δεν εμφανίζεται κόμβος πάνω από μία φορά). Ορισμός. Ένα μη-κατευθυνόμενο γράφημα είναι συνεκτικό (connected) εάν για κάθε ζεύγος κορυφών nodes u και v, υπάρχει μονοπάτι μεταξύ u και v. 20
κύκλοι (cycles) Ορισμός. Ένας κύκλος (cycle) είναι ένα μονοπάτι v 1, v 2,, v k-1, v k στο οποίο v 1 = v k, k > 2, και οι πρώτοι k-1 κόμβοι είναι διακριτοί. κύκλος C = 1-2-4-5-3-1 21
δέντρα
δέντρα (tree) Ορισμός. Ένα η-κατευθυνόμενο γράφημα είναι δέντρο (tree) εάν είναι συνεκτικό και άκυκλο (δεν περιλαμβάνει κύκλο). Θεώρημα. Έστω G ένα μη-κατευθυνόμενο γράφημα με n κόμβους. Τότε οποιεσδήποτε δύο από τις παρακάτω ιδιότητες συνεπάγεται την τρίτη. Το G είναι συνεκτικό. Το G είναι άκυκλο. Το G έχει n-1 ακμες. 23
δέντρα με ρίζα δέντρο με ρίζα (rooted tree). Ένα δέντρο T, στο οποίο ορίζουμε μία κορυφή ως ρίζα. Ένα δέντρο με ρίζα το απεικονίζουμε συνήθως όπως φαίνεται στο σχήμα. Σημασία/χρησιμότητα. Τα δέντρα με ρίζα είναι κατάλληλα για τη μοντελοποίηση ιεραρχικών δομών. ρίζα r γονέας της v v παιδί της v ένα δέντρο το ίδιο δέντρο, με ρίζα τον κόμβο 1 24
δέντρο εξέλιξης http://www.exeldim.bravehost.com/exelixi/thilastika/eikones/ailouroeidi/dendro_gatas_a.jpg 25
Ιεραρχία αντικειμένων σε GUI Ιεραρχία αντικειμένων σε GUI (graphical user interface). Περιγράφει την οργάνωση των GUI widgets. Reference: http://java.sun.com/docs/books/tutorial/uiswing/overview/anatomy.html 26
συνεκτικότητα
συνεκτικότητα πρόβλημα της συνεκτικότητας s-t (s-t connectivity problem). Δεδομένων δύο κόμβων s και t, υπάρχει μονοπάτι μεταξύ των s και t; πρόβλημα συντομότερου μονοπατιού s-t (s-t shortest path problem). Δεδομένων δύο κόμβων s και t, ποιο είναι το μήκος του συντομότερου μονοπατιού μεταξύ των s και t; εφαρμογές. δρομολόγηση σε δίκτυα επικοινωνιών επιλογή διαδρομής στις μεταφορές δίκτυο κοινωνικής δικτύωσης Friendster. διάτρεξη λαβύρινθου (maze traversal). Erdös number. 28
Συνεκτική Συνιστώσα (Connected Component) Συνεκτική συνιστώσα. Εύρεση όλων των κόμβων που είναι προσπελάσιμοι από έναν κόμβο s. Η συνεκτική συνιστώσα που περιλαμβάνει τον κόμβο 1 είναι { 1, 2, 3, 4, 5, 6, 7, 8 }. 29
3.2 διάτρεξη γραφήματος
διέλευση/διερεύνηση γραφήματος 1 3 5 12 11 6 2 4 13 20 15 14 7 9 17 19 8 10 16 18 31
διέλευση/διερεύνηση γραφήματος 1 3 5 12 11 6 2 4 13 20 15 14 7 9 17 19 8 10 16 18 32
Αναζήτηση Πρώτα σε Πλάτος (Breadth First Search) διαίσθηση της BFS. Εξερευνούνται όλοι οι κόμβοι ξεκινώντας από τον κόμβο s προς κάθε κατεύθυνση, έτσι ώστε να προστίθεται ένα επίπεδο κόμβων κάθε φορά. αλγόριθμος BFS. L 0 = { s }. L 1 = όλοι οι γείτονες του L 0. s L 1 L 2 L n-1 L 2 = όλοι οι κόμβοι που δεν ανήκουν στο L 0 ή στο L 1, και συνδέονται με ακμή με έναν κόμβο στο L 1. L i+1 = όλοι οι κόμβοι που δεν ανήκουν σε ένα από τα προηγούμενα επίπεδα και συνδέονται με ακμή με έναν κόμβο στο L i. Θεώρημα. Για κάθε i, το L i αποτελείται από όλους τους κόμβους που απέχουν ακριβώς i (ακμές) από το s. Υπάρχει μονοπάτι από το s στο t αν και μόνο αν το t εμφανίζει σε κάποιο από τα επίπεδα. 33
Αναζήτηση Πρώτα σε Πλάτος (Breadth First Search) Ιδιότητα. Έστω T ένα δέντρο BFS του γραφήματος G = (V, E), and έστω (x, y) μια ακμή του G. Τότε τα επίπεδα των x και y διαφέρουν το πολύ κατά 1. L 0 L 1 L 2 L 3 34
BFS: Ανάλυση Θεώρημα. Η παραπάνω (ενότητα 3.3 βιβλίου) υλοποίηση της BFS εκτελείται σε χρόνο O(m + n) εάν το γράφημα δίνεται με την αναπαράσταση λίστας γειτνίασης. Απόδειξη. Είναι εύκολο να δείξουμε πολυπλοκότητα χρόνου O(n 2 ): το πολύ n λίστες L[i] κάθε κόμβος εμφανίζεται το πολύ σε μία λίστα και επομένως ο βρόχος for εκτελείται n φορές για κάθε κόμβο u που εξετάζει ο αλγόριθμος, υπάρχουν n προσπίπτουσες ακμές (u, v) που περιέχουν τον u, και απαιτεί χρόνο O(1) η επεξεργασία κάθε ακμής Όμως η πολυπλοκότητα χρόνου είναι O(m + n): όταν εξετάζουμε έναν κόμβο u, υπάρχουν deg(u) προσπίπτουσες ακμές ο συνολικός χρόνος επεξεργασίας των ακμών είναι u V deg(u) = 2m κάθε ακμή (u, v) μετριέται ακριβώς δύο φορές στο άθροισμα: μια φορά στο deg(u) και μία στο deg(v) 35
διερεύνηση γραφήματος πρώτα κατά πλάτος 36
(a) r s t u 0 v w x y Q s 0 (d) r s t u 1 0 2 2 v 1 w 2 x y Q t x v 2 2 2 (b) r s t u 1 0 v 1 w x y Q w r 1 1 (e) r s t u 1 0 2 3 2 v 1 w 2 x y Q x v u 2 2 3 (c) r s t u 1 0 2 v 1 w 2 x y Q r t x 1 2 2 (f) r s t u 1 0 2 3 2 v 1 w 2 x 3 y Q v u y 2 3 3 37
(g) r s t u 1 0 2 3 2 v 1 w 2 x 3 y Q u y 3 3 (h) r s t u 1 0 2 3 2 v 1 w 2 x 3 y Q y 3 (i) r s t u 1 0 2 3 Q empty 2 1 2 3 38
αναζήτηση πρώτα σε βάθος 39
διερεύνηση γραφήματος πρώτα σε βάθος 40
(a) 0 1 2 3 0 v w x y Q s 0 (d) r s t u 1 0 2 v 1 w x y Q w 1 (b) r s t u 1 0 v 1 w x y Q w r 1 1 (e) r s t u 1 0 2 3 2 v 1 w 2 x y Q t x 2 2 (c) r s t u 1 0 2 v 1 w x y Q w v 1 2 (f) r s t u 1 0 2 3 2 v 1 w 2 x 3 y Q t u 2 3 y 3 41
(g) r s t u 1 0 2 3 2 v 1 w 2 x 3 y Q t u 2 3 (h) r s t u 1 0 2 3 2 v 1 w 2 x 3 y Q t 2 (i) r s t u 1 0 2 3 Q empty 2 1 2 3 42
Εκτελέστε αναζήτηση BFS και DFS στο παρακάτω γράφημα G, ξεκινώντας από τον κόμβο 0. 0 2 3 1 4 5 6 7 8 9 43
Υλοποίηση BFS και DFS
Αλγόριθμοι BFS και DFS Οι αλγόριθμοι για την BFS και την DFS έχουν την ίδια βασική δομή Οι βασικές διαφορές: A. Η δομή δεδομένων για αποθήκευση των κόμβων σε εκκρεμότητα Η δομή δεδομένων στην BFS είναι τύπου FIFO (ουρά) Η δομή δεδομένων στην DFS είναι τύπου LIFO (στοίβα) Β. Πότε ελέγχεται ότι ένας κόμβος είναι ήδη «γνωστός» στον αλγόριθμος: Στην BFS ο έλεγχος γίνεται τη στιγμή που ο αλγόριθμος ανακαλύπτει έναν κόμβο. Στην DFS κάθε κόμβος που συναντάει ο αλγόριθμος εισάγεται στη στοίβα. Κάθε κόμβος που συναντά ο αλγόριθμος μπαίνει στη στοίβα. Όταν αφαιρείται ένας κόμβος από τη στοίβα ελέγχεται το εάν έχει ήδη επεξεργαστεί ο κόμβος αυτός. 45
Αλγόριθμοι BFS και DFS: Χρήση της ουράς Β. Πότε ελέγχεται ότι ένας κόμβος είναι ήδη «γνωστός» στον αλγόριθμο: Στην BFS ο έλεγχος γίνεται τη στιγμή που ο αλγόριθμος ανακαλύπτει έναν κόμβο. Πρώτα ελέγχεται το εάν ο κόμβος είναι ήδη γνωστός. Μόνο κόμβοι που δεν έχουν μπει ήδη στην ουρά (δομή FIFO) μπαίνουν σε αυτή. Για αυτό το λόγο η δομή δεδομένων για την παρακολούθηση των γνωστών κόμβων ονομάζεται Discovered στο βιβλίο. Σημείωση: Και να προστεθεί περισσότερες από μία φορές ένα κόμβος, η ουρά FIFO έτσι και αλλιώς θα επιστρέψει πρώτα την παλαιότερη εισαγωγή του κόμβου. Κάθε επιπλέον εισαγωγή του κόμβου θα αγνοηθεί κατά την εκτέλεση. Εάν κάθε κόμβος προστίθεται στην ουρά μόνο την πρώτη φορά που τον ανακαλύπτει ο αλγόριθμος (όπως περιγράφεται και στο βιβλίο) τότε έχουμε λιγότερες πράξεις εισαγωγής στην ουρά FIFO, 46
Αλγόριθμοι BFS και DFS: Χρήση της ουράς (συνέχεια) Β. Πότε ελέγχεται ότι ένας κόμβος είναι ήδη «γνωστός» στον αλγόριθμο: Στην DFS ο έλεγχος γίνεται όταν αφαιρείται ο κόμβος από τη στοίβα. Κάθε κόμβος που συναντά ο αλγόριθμος εισάγεται στη δομή LIFO (στοίβα). Όταν αφαιρείται ένας κόμβος από τη στοίβα ελέγχεται το εάν έχει ήδη επεξεργαστεί ο κόμβος αυτός. Εάν δεν έχει γίνει επεξεργασία του κόμβου, τότε ο αλγόριθμος τον επεξεργάζεται και ο κόμβος σημειώνεται στους γνωστούς κόμβους. Διαφορετικά, ο κόμβος απλά αφαιρείται από τη στοίβα και ο αλγόριθμος τον αγνοεί. Η δομή δεδομένων για τη φύλαξη των γνωστών κόμβων ονομάζεται Explored στο βιβλίο. 47
Συνεκτικές Συνιστώσες
Flood Fill Flood fill. Δίνοντας πράσινο χρώμα σε ένα pixel μιας εικόνας, αλλάζει το τμήμα της εικόνας που περιλαμβάνει το pixel αυτό σε πράσινο. Κόμβος: pixel. Ακμή: δύο γειτονικά pixel. Τμήμα εικόνας: συνεκτική συνιστώσα με πράσινα pixels. χρωματισμός του πράσινου τμήματος με μπλε 49
Flood Fill Flood fill. Δίνοντας πράσινο χρώμα σε ένα pixel μιας εικόνας, αλλάζει το τμήμα της εικόνας που περιλαμβάνει το pixel αυτό σε πράσινο. Κόμβος: pixel. Ακμή: δύο γειτονικά pixel. Τμήμα εικόνας: συνεκτική συνιστώσα με πράσινα pixels. χρωματισμός του πράσινου τμήματος με μπλε 50
Συνεκτική Συνιστώσα Συνεκτική Συνιστώσα. Βρες όλους τους κόμβους που είναι προσπελάσιμοι από τον s. s R u v μπορούμε να προσθέσουμε τον κόμβο v Θεώρημα. Όταν ολοκληρωθεί η διαδικασία, το R είναι η συνεκτική συνιστώσα που περιλαμβάνει τον κόμβο s. BFS = εξερευνά με σειρά που βασίζεται στην απόσταση από τον s. DFS = εξερευνά με έναν διαφορετικό τρόπο. 51
3.4 Έλεγχος διμερότητας
διμερές γράφημα (bipartite graph) Ορισμός. Ένα μη-κατευθυνόμενο γράφημα G = (V, E) είναι διμερές εάν οι κόμβοι του μπορούν να χρωματιστούν με δύο χρώματα, πχ. κόκκινο και μπλε, έτσι ώστε κάθε ακμή να έχει ένα άκρο κόκκινο και ένα μπλε. Εφαρμογές. Ευσταθές ταίριασμα: άντρες = κόκκινο, γυναίκες = μπλε. Χρονοπρογραμματισμός: μηχανές = κόκκινο, εργασίες = μπλε. ένα διμερές γράφημα 53
έλεγχος διμερότητας Έλεγχος διμερότητας. Δεδομένου ενός γραφήματος G, είναι διμερές; Πολλά γραφοθεωρητικά προβλήματα γίνονται: ευκολότερα όταν εφαρμόζονται σε διμερή γραφήματα (matching) tractable όταν εφαρμόζονται σε διμερή γραφήματα (ανεξάρτητο σύνολο) Η δομή των διμερών γραφημάτων. v 2 v 3 v 2 v 1 v 4 v 6 v 5 v 4 v 3 v 5 v 6 v 7 v 1 v 7 ένα διμερές γράφημα G μια άλλη απεικόνιση του ίδιου γραφήματος G 54
ένα εμπόδιο για τη διμερότητα Λήμμα. Εάν ένα γράφημα είναι διμερές, δεν μπορεί να περιέχει έναν κύκλου περιττού μήκους. Απόδειξη. Δεν είναι δυνατό να χρωματίσουμε κατάλληλα τον περιττό κύκλο και επομένως ούτε και ολόκληρο το γράφημα G. διμερές (2-colorable) δεν είναι διμερές (not 2-colorable) 55
διμερή γραφήματα Λήμμα. Έστω G ένα συνεκτικό γράφημα, και έστω L 0,, L k τα επίπεδα που παράγονται από BFS ξεκινώντας από τον κόμβο s. Ισχύει ακριβώς ένα από τα παρακάτω. (i) Καμία ακμή του G δεν ενώνει κόμβους ίδιου επιπέδου και το G είναι διμερές. (ii) Υπάρχει ακμή του G που ενώνει κόμβους του ίδιου επιπέδου και το G περιέχει κύκλο περιττού μήκους (και επομένως δεν είναι διμερές). L 1 L 2 L 3 περίπτωση (i) L 1 L 2 L 3 περίπτωση (ii) 56
διμερή γραφήματα Λήμμα. Έστω G ένα συνεκτικό γράφημα, και έστω L 0,, L k τα επίπεδα που παράγονται από BFS ξεκινώντας από τον κόμβο s. Ισχύει ακριβώς ένα από τα παρακάτω. (i) Καμία ακμή του G δεν ενώνει κόμβους ίδιου επιπέδου και το G είναι διμερές. (ii) Υπάρχει ακμή του G που ενώνει κόμβους του ίδιου επιπέδου και το G περιέχει κύκλο περιττού μήκους (και επομένως δεν είναι διμερές). Απόδειξη. (i) Έστω ότι δεν υπάρχει ακμή που να ενώνει κόμβους του ίδιου επιπέδου. Από προηγούμενο λήμμα, όλες οι ακμές ενώνουν κόμβους σε γειτονικά επίπεδα. Διαμέριση: red = κόμβοι σε μονά επίπεδα, blue = κόμβοι σε ζυγά επίπεδα. L 1 L 2 L 3 Περίπτωση (i) 57
διμερή γραφήματα Λήμμα. Έστω G ένα συνεκτικό γράφημα, και έστω L 0,, L k τα επίπεδα που παράγονται από BFS ξεκινώντας από τον κόμβο s. Ισχύει ακριβώς ένα από τα παρακάτω. (i) Καμία ακμή του G δεν ενώνει κόμβους ίδιου επιπέδου και το G είναι διμερές. (ii) Υπάρχει ακμή του G που ενώνει κόμβους του ίδιου επιπέδου και το G περιέχει κύκλο περιττού μήκους (και επομένως δεν είναι διμερές). Απόδειξη. (ii) Έστω ακμή (x, y) με x, y στο ίδιο επίπεδο L j. Έστω z = lca(x, y) = κοντινότερος κοινός πρόγονος. Έστω L i το επίπεδο στο οποίο ανήκει η z. Έστω ο κύκλος με την ακμή (x, y), το μονοπάτι από το y στο z, και το μονοπάτι από το z στο x. Το μήκος του είναι 1 + (j-i) + (j-i), (περιττός αριθμός) z = lca(x, y) (x, y) μονοπάτι από y στο z μονοπάτι από z στο x 58
εμπόδιο στη διμερότητα Corollary. Ένα γράφημα G είναι διμερές αν και μόνο αν δεν περιέχει κύκλου περιττού μήκους. 5-cycle C διμερές (2-colorable) δεν είναι διμερές (not 2-colorable) 59
πηγές/αναφορές Κεφάλαιο 3, Σχεδίαση Αλγορίθμων, J. Kleinberg and E. Tardos, Ελληνική έκδοση από τις Εκδ. Κλειδάριθμος Κεφάλαιο 22, Εισαγωγή στους αλγόριθμους, T. Cormen, C. Leiserson, R. Rivest and C. Stein, Ελληνική έκδοση από τις Πανεπιστημιακές Εκδ. Κρήτης 60