Vähiten yhteinen esi-isä

Juurtun puun T kärkien u ja v vähiten yhteinen esi-isä ( alin yhteinen esi -isä ) on puun juuresta kauimpana oleva kärki, joka sijaitsee molemmilla poluilla u :sta ja v :stä juureen, eli on molempien esi-isä. kärjet. Yleisesti hyväksytty lyhenne on LCA englannista. alin (vähiten) yhteinen esi-isä .  

Algoritmit

Yksinkertaisin ja naiivein algoritmi vähiten yhteisen esivanhemman löytämiseksi on laskea u :n ja v :n syvyydet ja edetä asteittain ylös puuta jokaisesta kärjestä, kunnes yhteinen kärki löytyy:

Toimenpide LCA( u , v ): h1 := syvyys( u ) // syvyys( x ) = kärjen syvyys x h2 := syvyys( v ) kun taas h1 ≠ h2: jos h1 > h2: u  := vanhempi( u ) h1 := h1 - 1 muu : v  := vanhempi( v ) h2 := h2 - 1 kun taas u ≠ v : u  := vanhempi( u ) // vanhempi( x ) = x : n välitön esi-isä v  := vanhempi( v ) palauta u

Tämän algoritmin ajoaika on O ( h ), missä h  on puun korkeus. Lisäksi voidaan vaatia O ( n ) -aikaista esikäsittelyä puun kaikkien solmujen välittömän esivanhemman löytämiseksi (mutta tämä rakenne on yleensä jo olemassa puussa).

On kuitenkin olemassa nopeampia algoritmeja:

Kirjallisuus

Linkit