Mindst fælles forfader

Den mindst fælles forfader ( laveste fælles forfader ) til toppunkterne u og v i det rodfæstede træ T er det toppunkt, der er fjernest fra træets rod, der ligger på begge stier fra u og v til roden, dvs. er stamfader til begge. hjørner. Den almindeligt accepterede forkortelse er LCA fra engelsk.  laveste (mindst) fælles forfader .

Algoritmer

Den enkleste, mest naive algoritme til at finde den mindst fælles forfader er at beregne dybden af ​​u og v og gradvist arbejde dig op i træet fra hvert toppunkt, indtil et fælles toppunkt er fundet:

Procedure LCA( u , v ): h1 := dybde( u ) // dybde( x ) = dybde af toppunkt x h2 := dybde( v ) mens h1 ≠ h2: hvis h1 > h2: u  := forælder( u ) h1 := h1 - 1 andet : v  := forælder( v ) h2 := h2 - 1 mens u ≠ v : u  := parent( u ) // parent( x ) = umiddelbare forfader til x v  := parent( v ) returnere u

Løbetiden for denne algoritme er O ( h ), hvor h  er højden af ​​træet. Derudover kan O ( n ) tidsforbehandling være påkrævet for at finde den umiddelbare forfader til alle noder i træet (men denne struktur er normalt allerede til stede i træet).

Der er dog hurtigere algoritmer:

Litteratur

Links