Κοντινότεροι Κοινοί Πρόγονοι Μας δίνεται ένα δένδρο Τ με ρίζα και μια λίστα Λ από ζεύγη κόμβων. Θέλουμε να υπολογίσουμε τον κκπ(x,y) για κάθε ζεύγος κόμβων {x,y} της Λ. α β γ Λ = { {ι,ξ}, {τ,θ}, {ο,μ}, {λ,ι}, {τ,σ}, {λ,π}, {π,σ}, {ξ,ο} } δ ε ζ η ι κ λ μ θ ν κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξ ο π ρ σ τ
Κοντινότεροι Κοινοί Πρόγονοι Στατικό δένδρο, γνωστά ζεύγη Μας δίνεται ένα δένδρο Τ και μια λίστα Λ από ζεύγη κόμβων. Θέλουμε να υπολογίσουμε τον κκπ(x,y) για κάθε ζεύγος κόμβων {x,y} της Λ. Στατικό δένδρο, άγνωστα ζεύγη Μας δίνεται ένα δένδρο Τ το οποίο θέλουμε να επεξεργαστούμε ώστε να μπορούμε να υπολογίσουμε γρήγορα τον κκπ(x,y) για οποιοδήποτε ζεύγος κόμβων {x,y}. Δυναμικό πρόβλημα Το δένδρο Τ μπορεί να μεταβάλλεται.
Κοντινότεροι Κοινοί Πρόγονοι Στατικό δένδρο, γνωστά ζεύγη Απλοϊκή λύση για υπολογισμό κκπ(x,y) α Ανεβαίνουμε τα μονοπάτια από το x και το y προς τη ρίζα μέχρι να βρούμε τον πρώτο κοινό κόμβο. β γ για ζεύγη δ ε ζ η ι κ λ μ θ ν κκπ(π,σ)=γ ξ ο π ρ σ τ
Κοντινότεροι Κοινοί Πρόγονοι Στατικό δένδρο, γνωστά ζεύγη Ιδέα: Συρρικνώνουμε τα μονοπάτια που έχουμε ήδη επεξεργαστεί. Η επεξεργασία των κόμβων πρέπει να γίνει από τα φύλλα προς τη ρίζα α α β γ συρρίκνωση του ι στον δ β γ δ ε ζ η θ δ ε ζ η θ ι κ λ μ ν κ λ μ ν ξ ο π ρ σ ξ ο π ρ σ τ κκπ(ι,ξ) = κκπ(δ,ξ) τ
Κοντινότεροι Κοινοί Πρόγονοι Στατικό δένδρο, γνωστά ζεύγη Σε κάθε κόμβο x του δένδρου αποθηκεύουμε μια λίστα κόμβων Επισκεπτόμαστε τους κόμβους σε σειρά μεταδιάταξης του Επεξεργασία κόμβου Για κάθε κόμβο Θέτουμε Συρρικνώνουμε τον : Εξετάζουμε τη λίστα που έχουμε ήδη επεξεργαστεί κόμβος στον οποίο έχει συμπιεστεί ο στον γονέα του στο
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 Λ(θ)={τ} δ 2 ε 6 ζ 8 η 12 17 θ ι 1 κ 5 λ 9 11 μ 16 Λ(ι)={ξ,λ} ξ 3 4 Λ(λ)={ι,π} ο π 10 Λ(μ)={ο} ρ ν 14 15 σ Λ(ξ)={ι,ο} Λ(ο)={μ,ξ} Λ(π)={λ,σ} Λ(σ)={τ,π} τ 13 Λ(τ)={θ,σ}
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 Λ(θ)={τ} δ ε ζ η 2 6 8 12 {ι} Λ(μ)={ο} κ 5 λ 9 11 μ Λ(λ)={ι,π} 17 16 θ ν ξ 3 4 ο π 10 ρ 14 15 σ Λ(ξ)={ι,ο} Λ(ο)={μ,ξ} Λ(π)={λ,σ} Λ(σ)={τ,π} τ 13 Λ(τ)={θ,σ}
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 {ι,δ} Λ(θ)={τ} ε ζ η 6 8 12 κ 5 λ 9 11 μ Λ(λ)={ι,π} Λ(μ)={ο} 17 16 θ ν ξ 3 4 ο π 10 ρ 14 15 σ Λ(ξ)={ι,ο} Λ(ο)={μ,ξ} Λ(π)={λ,σ} Λ(σ)={τ,π} κκπ(ξ,ι)=β τ 13 Λ(τ)={θ,σ}
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 {ι,δ} Λ(θ)={τ} ε ζ η 6 8 12 κ 5 λ 9 11 μ {ξ} Λ(λ)={ι,π} Λ(μ)={ο} 17 16 θ ν 4 ο π 10 ρ 14 15 σ Λ(ο)={μ,ξ} Λ(π)={λ,σ} Λ(σ)={τ,π} κκπ(ο,ξ)=κ τ 13 Λ(τ)={θ,σ}
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 {ι,δ} Λ(θ)={τ} ε ζ η 6 8 12 κ 5 λ 9 11 μ {ξ,ο} Λ(λ)={ι,π} Λ(μ)={ο} 17 16 θ ν π 10 ρ 14 15 σ Λ(π)={λ,σ} τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 {ι,δ} Λ(θ)={τ} ε ζ η 6 8 12 17 θ {ξ,ο,κ} Λ(μ)={ο} λ 9 11 μ 16 ν Λ(λ)={ι,π} π 10 ρ 14 15 σ Λ(π)={λ,σ} τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 β 7 γ 18 {ι,δ,ξ,ο,κ,ε} Λ(θ)={τ} ζ η 8 12 17 θ Λ(μ)={ο} λ 9 11 μ 16 ν Λ(λ)={ι,π} π 10 ρ 14 15 σ Λ(π)={λ,σ} τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 Λ(θ)={τ} ζ η 8 12 17 θ Λ(μ)={ο} λ 9 11 μ 16 ν Λ(λ)={ι,π} π 10 ρ 14 15 σ Λ(π)={λ,σ} τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ {ζ} 18 Λ(θ)={τ} η 12 17 θ κκπ(λ,ι)=α λ Λ(λ)={ι,π} 9 11 Λ(μ)={ο} μ 16 ν π 10 ρ 14 15 σ Λ(π)={λ,σ} τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ {ζ} 18 Λ(θ)={τ} η 12 17 θ {λ} Λ(μ)={ο} 11 μ 16 ν κκπ(π,λ)=η π 10 ρ 14 15 σ Λ(π)={λ,σ} τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ {ζ} 18 Λ(θ)={τ} η 12 17 θ {λ} Λ(μ)={ο} κκπ(μ,ο)=α 11 μ 16 ν {π} ρ 14 15 σ τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ {ζ} 18 Λ(θ)={τ} η 12 {λ,π,μ} 17 16 θ ν ρ 14 15 σ τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 {λ,π,μ,ζ,η} Λ(θ)={τ} 17 θ 16 ν ρ 14 15 σ τ 13 Λ(τ)={θ,σ} Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 {λ,π,μ,ζ,η} Λ(θ)={τ} 17 θ 16 ν ρ {τ} 14 15 σ Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 {λ,π,μ,ζ,η} Λ(θ)={τ} 17 θ {τ,ρ} 16 ν κκπ(σ,τ)=ν κκπ(σ,π)=γ 15 σ Λ(σ)={τ,π}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 {λ,π,μ,ζ,η} Λ(θ)={τ} 17 θ {τ,ρ,σ} 16 ν
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 {λ,π,μ,ζ,η} 17 {τ,ρ,σ,ν} Λ(θ)={τ} θ κκπ(θ,τ)=θ
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β} γ 18 {λ,π,μ,ζ,η,τ,ρ,σ,ν,θ}
Κοντινότεροι Κοινοί Πρόγονοι α 19 {ι,δ,ξ,ο,κ,ε,β,λ,π,μ,ζ,η,τ,ρ,σ,ν,θ,γ}
Κοντινότεροι Κοινοί Πρόγονοι Η συρρίκνωση των κόμβων μπορεί να γίνει αποτελεσματικά με μια δομή ένωσηςεύρεσης σε ξένα σύνολα Υποστηρίζει τις παρακάτω λειτουργίες επί ενός συνόλου αντικειμένων : ένωση(α,β) : Αντικαθιστά τα σύνολα που περιέχουν τα α και β με την ένωση τους εύρεση(α) : Επιστρέφει το όνομα του συνόλου που περιέχει το αντικείμενο α ένωση(α,β)
Δομή ένωσης-εύρεσης σε ξένα σύνολα Υποστηρίζει τις παρακάτω λειτουργίες επί ενός συνόλου αντικειμένων : ένωση(α,β) : Αντικαθιστά τα σύνολα που περιέχουν τα α και β με την ένωση τους εύρεση(α) : Επιστρέφει το όνομα του συνόλου που περιέχει το αντικείμενο α Δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» 1 4 4 2 3 6 5 7 ένωση(3,6) 1 6 5 7 4 8 2 3 4 8 1 6 5 7 εύρεση(2) 2 1 6 5 7 2 3 8 3 8 όνομα συνόλου = ρίζα δένδρου
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Υποθέτουμε ότι τα αντικείμενα μας είναι ακέραιοι αριθμοί Χρησιμοποιούμε πίνακες και μεγέθους Αρχικοποίηση : για Αρχικά κάθε αντικείμενο αποτελεί ένα ξεχωριστό σύνολο μεγέθους 1 1 2 3 4 5 6 7 8 Κάθε σύνολο έχει ένα αντιπρόσωπο. Αν το αντικείμενο k είναι αντιπρόσωπος τότε ισχύει ότι και το σύνολο έχει αντικείμενα
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Υποθέτουμε ότι τα αντικείμενα μας είναι ακέραιοι αριθμοί Χρησιμοποιούμε πίνακες και μεγέθους δείκτης σε αντικείμενο του συνόλου που περιέχει το k αριθμός αντικειμένων του συνόλου με αντιπρόσωπο k εύρεση(i) : Ξεκινώντας από το i ακολουθούμε τους δείκτες μέχρι να βρούμε αντικείμενο j τέτοιο ώστε. Επιστρέφουμε τo j. ένωση(i,j) : Εκτελούμε p=εύρεση(i) και q=εύρεση(j). Αν το σύνολο του q έχει περισσότερα αντικείμενα από το σύνολο του p θέτουμε. Διαφορετικά θέτουμε.
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» void find(int i) { int j = i; while (j!= parent[j]) j = parent[j]; return j; } void union(int i, int j) { int p = find(i); int q = find(j); if (p == q) return; if (size[q] > size[p]) { parent[p] = q; size[q] += size[p]; } else { parent[q] = p; size[p] += size[q]; } }
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 2 3 4 5 6 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 3 4 5 6 7 8 2
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 4 5 6 7 8 2 3
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 4 5 6 7 8 2 3
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 4 5 6 7 2 3 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 4 5 7 2 3 6 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 4 7 2 3 6 5 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 1 4 2 3 6 5 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 4 1 2 3 6 5 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 4 1 2 3 6 5 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ακολουθία ενώσεων (1,2) (2,3) (1,3) (7,8) (4,6) (4,5) (6,7) (3,6) (5,7) (4,7) δάσος ένωσης-εύρεσης 4 1 2 3 6 5 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Ας θεωρήσουμε την ακολουθία ένωση(1,2), ένωση(3,4), ένωση(5,6), ένωση(7,8) 1 3 5 7 2 4 6 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Ας θεωρήσουμε την ακολουθία ένωση(1,2), ένωση(3,4), ένωση(5,6), ένωση(7,8) ένωση(1,3), ένωση(5,7) 1 2 3 4 5 6 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Ας θεωρήσουμε την ακολουθία ένωση(1,2), ένωση(3,4), ένωση(5,6), ένωση(7,8) ένωση(1,3), ένωση(5,7) ένωση(1,5) 1 2 3 4 5 6 7 8
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Ομοίως, για ένωση(9,10), ένωση(11,12), ένωση(13,14), ένωση(15,16) ένωση(9,11), ένωση(13,15) ένωση(9,13) 1 9 2 3 5 10 11 13 4 6 7 12 14 15 8 16
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» ένωση(1,9) 1 2 3 5 9 4 6 7 10 11 13 8 12 14 15 16
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» 1 ο μέγιστος αριθμός των δεικτών μέχρι τη ρίζα είναι 2 3 5 9 4 6 7 10 11 13 8 12 14 15 16
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Ιδιότητα: Για αντικείμενα, ο αλγόριθμος σταθμισμένης ένωσης δημιουργεί δέντρα με ύψος το πολύ
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης» Ιδιότητα: Για αντικείμενα, ο αλγόριθμος σταθμισμένης ένωσης δημιουργεί δέντρα με ύψος το πολύ Απόδειξη: Με επαγωγή. Για ισχύει αφού. Έστω ότι μια πράξη ένωσης συνδυάζει σύνολα Α και Β με μέγεθος A B Ο αριθμός των δεικτών έως τη ρίζα του δέντρου για τα στοιχεία του A είναι
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» 1 2 3 5 9 εύρεση(16) 2 3 1 5 9 13 15 16 4 6 7 10 11 13 4 6 7 10 11 14 8 12 14 15 8 12 16
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» Υποθέτουμε ότι τα αντικείμενα μας είναι ακέραιοι αριθμοί Χρησιμοποιούμε πίνακες και μεγέθους δείκτης σε αντικείμενο του συνόλου που περιέχει το k αριθμός αντικειμένων του συνόλου με αντιπρόσωπο k εύρεση(i) : Ξεκινώντας από το i ακολουθούμε τους δείκτες μέχρι να βρούμε αντικείμενο j τέτοιο ώστε. Θέτουμε για κάθε αντικείμενο k που συναντήσαμε στη διαδρομή μέχρι το j. Επιστρέφουμε τo j. ένωση(i,j) : Εκτελούμε p=εύρεση(i) και q=εύρεση(j). Αν το σύνολο του q έχει περισσότερα αντικείμενα από το σύνολο του p θέτουμε. Διαφορετικά θέτουμε.
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» Χρόνος χειρότερης περίπτωσης για μία πράξη εύρεσης ή ένωσης = 1 2 3 5 9 4 6 7 10 11 13 ύψος 8 12 14 15 16
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» Χρόνος χειρότερης περίπτωσης για μία πράξη εύρεσης ή ένωσης = Αλλά : Συνολικός χρόνος εκτέλεσης m πράξεων εύρεσης-ένωσης = Μέσος χρόνος εκτέλεσης για μία πράξη εύρεσης ή ένωσης = σχεδόν σταθερός χρόνος ανά πράξη
Δομή ένωσης-εύρεσης σε ξένα σύνολα Δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» Η συνάρτηση Ackerman ορίζεται ως εξής Η συνάρτηση είναι αντίστροφη της αυξάνει με πάρα πολύ αργό ρυθμό! Π.χ. για
Κοντινότεροι Κοινοί Πρόγονοι Η συρρίκνωση των κόμβων μπορεί να γίνει αποτελεσματικά με μια δομή ένωσηςεύρεσης σε ξένα σύνολα Υποστηρίζει τις παρακάτω λειτουργίες επί ενός συνόλου αντικειμένων : ένωση(α,β) : Αντικαθιστά τα σύνολα που περιέχουν τα α και β με την ένωση τους εύρεση(α) : Επιστρέφει το όνομα του συνόλου που περιέχει το αντικείμενο α Στον αλγόριθμο υπολογισμού κοντινότερων κοινών προγόνων κάθε σύνολο αποτελείται από τους κόμβους ενός υποδένδρου του Τ. Πρέπει να γνωρίζουμε τη ρίζα κάθε τέτοιου υποδένδρου (αντιπρόσωπος του συνόλου), η οποία μπορεί να διαφέρει από τη ρίζα του δένδρου ένωσης-εύρεσης. β δ {ι} β δ ι ένωση(β,δ) β δ ι ρίζα = δ, αντιπρόσωπος = β Τ δάσος εύρεσης-ένωσης
Κοντινότεροι Κοινοί Πρόγονοι Η συρρίκνωση των κόμβων μπορεί να γίνει αποτελεσματικά με μια δομή ένωσηςεύρεσης σε ξένα σύνολα Υποστηρίζει τις παρακάτω λειτουργίες επί ενός συνόλου αντικειμένων : ένωση(α,β) : Αντικαθιστά τα σύνολα που περιέχουν τα α και β με την ένωση τους εύρεση(α) : Επιστρέφει το όνομα του συνόλου που περιέχει το αντικείμενο α Στον αλγόριθμο υπολογισμού κοντινότερων κοινών προγόνων κάθε σύνολο αποτελείται από τους κόμβους ενός υποδένδρου του Τ. Πρέπει να γνωρίζουμε τη ρίζα κάθε τέτοιου υποδένδρου (αντιπρόσωπος του συνόλου), η οποία μπορεί να διαφέρει από τη ρίζα του δένδρου ένωσης-εύρεσης. Χρησιμοποιούμε έναν ακόμα πίνακα που δίνει τον αντιπρόσωπο του κάθε συνόλου αντιπρόσωπος του συνόλου με ρίζα το k
Κοντινότεροι Κοινοί Πρόγονοι Στατικό δένδρο, γνωστά ζεύγη Σε κάθε κόμβο x του δένδρου αποθηκεύουμε μια λίστα κόμβων Επισκεπτόμαστε τους κόμβους σε σειρά μεταδιάταξης του Επεξεργασία κόμβου Για κάθε κόμβο Θέτουμε : Εξετάζουμε τη λίστα που έχουμε ήδη επεξεργαστεί κόμβος στον οποίο έχει συμπιεστεί ο εύρεση Συρρικνώνουμε τον στον γονέα του στο ένωση Χρόνος εκτέλεσης = για ζεύγη Αργότερα θα δούμε πως μπορεί να επιτευχθεί χρόνος στην περίπτωση όπου το Λ δεν είναι εξαρχής γνωστό ακόμα και