Najniższy wspólny przodek

kolorem ciemnozielonym zaznaczony jest najniższy wspólny przodek węzłów x i y . Inni wspólni przodkowie są pokazani w kolorze jasnozielonym.

W teorii grafów i informatyce najniższy wspólny przodek ( LCA ) (zwany także najmniejszym wspólnym przodkiem) dwóch węzłów v i w w drzewie lub skierowanym grafie acyklicznym (DAG) T jest najniższym (tj. najgłębszym) węzłem, który ma oba v i w jako potomkowie, gdzie definiujemy każdy węzeł jako potomka samego siebie (więc jeśli v ma bezpośrednie połączenie z w , w jest najniższym wspólnym przodkiem).

LCA v i w w T jest wspólnym przodkiem v i w , który znajduje się najdalej od korzenia. Obliczenie najniższych wspólnych przodków może być przydatne na przykład jako część procedury określania odległości między parami węzłów w drzewie: odległość od v do w można obliczyć jako odległość od korzenia do v powiększoną o odległość od korzenia do w minus dwukrotna odległość od korzenia do ich najniższego wspólnego przodka ( Djidżew, Pantziou i Zaroliagis 1991 ). W ontologiach najniższy wspólny przodek jest również znany jako najmniej wspólny przodek .

W drzewiastej strukturze danych , w której każdy węzeł wskazuje na swojego rodzica, najniższego wspólnego przodka można łatwo określić, znajdując pierwsze przecięcie ścieżek od v i w do korzenia. Ogólnie czas obliczeń wymagany dla tego algorytmu wynosi O(h) , gdzie h to wysokość drzewa (długość najdłuższej ścieżki od liścia do korzenia). Istnieje jednak kilka algorytmów przetwarzania drzew, dzięki którym można szybciej znaleźć najniższych wspólnych przodków. Algorytm najniższego wspólnego przodka Tarjana offline , na przykład, wstępnie przetwarza drzewo w czasie liniowym, aby zapewnić zapytania LCA o stałym czasie. Ogólnie rzecz biorąc, istnieją podobne algorytmy DAG, ale o złożoności superliniowej.

Historia

Problem najniższego wspólnego przodka został zdefiniowany przez Alfreda Aho , Johna Hopcrofta i Jeffreya Ullmana ( 1973 ), ale Dov Harel i Robert Tarjan ( 1984 ) jako pierwsi opracowali optymalnie wydajną strukturę danych najniższego wspólnego przodka. Ich algorytm przetwarza dowolne drzewo w czasie liniowym, stosując dekompozycję ciężkich ścieżek , dzięki czemu na kolejne zapytania o najniższych wspólnych przodkach można odpowiadać w stałym czasie na zapytanie. Jednak ich struktura danych jest złożona i trudna do wdrożenia. Tarjan znalazł również prostszy, ale mniej wydajny algorytm, oparty na struktura danych znajdowania związków , do obliczania najniższych wspólnych przodków partii offline par węzłów .

Baruch Schieber i Uzi Vishkin ( 1988 ) uprościli strukturę danych Harela i Tarjana, prowadząc do możliwej do wdrożenia struktury z tymi samymi asymptotycznymi ograniczeniami czasowymi przetwarzania wstępnego i zapytań. Ich uproszczenie opiera się na zasadzie, że w dwóch specjalnych rodzajach drzew łatwo jest określić najniższych wspólnych przodków: jeśli drzewo jest ścieżką, to najniższego wspólnego przodka można obliczyć po prostu na podstawie minimum poziomów dwóch zapytanych węzłów, podczas gdy drzewo jest kompletnym drzewem binarnym , węzły mogą być indeksowane w taki sposób, że najniżsi wspólni przodkowie redukują się do prostych operacji binarnych na indeksach. Struktura Schiebera i Vishkina rozkłada dowolne drzewo na zbiór ścieżek, tak że połączenia między ścieżkami mają strukturę drzewa binarnego i łączy obie te dwie prostsze techniki indeksowania.

Omer Berkman i Uzi Vishkin ( 1993 ) odkryli zupełnie nowy sposób odpowiadania na zapytania o najniższych wspólnych przodkach, ponownie uzyskując liniowy czas przetwarzania wstępnego przy stałym czasie zapytania. Ich metoda polega na utworzeniu trasy Eulera po grafie utworzonym z drzewa wejściowego przez podwojenie każdej krawędzi i użyciu tej trasy do zapisania sekwencji numerów poziomów węzłów w kolejności, w jakiej odwiedza je trasa; zapytanie o najniższego wspólnego przodka można następnie przekształcić w zapytanie, które szuka minimalnej wartości występującej w pewnym podprzedziale tej sekwencji liczb. Następnie obsługują to zapytanie o minimalny zakres problemu (RMQ) poprzez połączenie dwóch technik, jednej techniki opartej na wstępnym obliczaniu odpowiedzi dla dużych przedziałów, których rozmiary są potęgami dwójki, a drugiej opartej na przeszukiwaniu tabeli dla zapytań o małych przedziałach. Metoda ta została później przedstawiona w uproszczonej formie przez Michaela Bendera i Martina Farach-Coltona ( 2000 ). Jak zauważyli wcześniej Gabow, Bentley i Tarjan (1984) , problem minimalnego zasięgu można z kolei przekształcić z powrotem w problem najniższego wspólnego przodka przy użyciu techniki drzew kartezjańskich .

Dalszych uproszczeń dokonali Alstrup i in. (2004) oraz Fischera i Heuna (2006) .

Sleator i Tarjan ( 1983 ) zaproponowali dynamiczny wariant problemu LCA, w którym struktura danych powinna być przygotowana do obsługi zapytań LCA połączonych z operacjami zmieniającymi drzewo (tj. przestawianie drzewa poprzez dodawanie i usuwanie krawędzi). Ten wariant można rozwiązać w drzewa dla wszystkich Odbywa się to poprzez utrzymywanie lasu przy użyciu dynamicznej struktury danych drzew z partycjonowaniem według rozmiaru; to następnie utrzymuje rozkład ciężki-lekki każdego drzewa i umożliwia przeprowadzanie zapytań LCA w czasie logarytmicznym w rozmiarze drzewa.

Przestrzeń liniowa i stały czas wyszukiwania rozwiązanie problemu LCA opartego na drzewie

Jak wspomniano powyżej, LCA można najpierw zredukować do RMQ, a następnie podzielić sekwencję liczb na przedziały i zastosować dwie różne techniki do obsługi zapytania o minimalny zakres w różnych przedziałach oraz do obsługi zapytania o minimalny zakres w przedziale.

Redukcja z LCA do RMQ

Redukcja LCA do RMQ rozpoczęła się od chodzenia po drzewie. Podczas chodzenia po drzewie rejestrowana jest kolejność etykiet i głębokość odwiedzanego węzła. Następnie można odpowiedzieć na pytanie LCA, odpowiadając na pytanie RMQ, którego wejściem problemu RMQ są indeksy dwóch węzłów potomnych na liście odwiedzonych węzłów.

Przykład pokazuje, jak RMQ jest redukowane do LCA.

Dlatego LCA można rozwiązać, rozwiązując RMQ.

Algorytm liniowej przestrzeni i stałego czasu wyszukiwania dla RMQ zredukowany z LCA

Mimo to istnieje stałe rozwiązanie w czasie i przestrzeni liniowej dla ogólnego RMQ, ale można zastosować uproszczone rozwiązanie, które wykorzystuje właściwości LCA. To uproszczone rozwiązanie może być stosowane tylko w przypadku RMQ zredukowanego z LCA.

do rozwiązania wspomnianego powyżej, dzielimy sekwencję na każdy blok blok rozmiar .

Ilustracja przedstawiająca problem RMQ jest podzielona na bloki, z których każdy ma rozmiar = b

Dzieląc sekwencję na bloki, zapytanie można rozwiązać, rozwiązując dwa różne przypadki:

Przypadek 1: jeśli i i j są w różnych blokach

Aby odpowiedzieć na w pierwszym przypadku, istnieją 3 grupy zmiennych

pierwsze, minimalny element z najmniejszym indeksem w każdym bloku jest wstępnie obliczany i oznaczany jako . Zbiór zajmuje miejsce

Po drugie, biorąc pod uwagę zbiór , zapytanie RMQ dla tego zestawu jest wstępnie obliczane przy użyciu ze stałym czasem i przestrzenią liniowo - Istnieją bloki , więc tabela odnośników w tym rozwiązaniu zajmuje spacja. Ponieważ , = . zapytanie RMQ wykorzystujące ze stałym czasem i przestrzenią liniowo-arytmiczną tych blokach zajmuje tylko miejsce.

każdym bloku niech indeksem w , że . Dla wszystkich { do blok jest dwa przedziały k ja [ . Następnie minimalny element najmniejszym indeksie dla przedziałów każdym bloku b jest wstępnie obliczony. Takie minimalne elementy nazywane są przedrostkiem min dla przedziału w i przyrostkiem min dla przedziału w . Każda iteracja parę przedrostków min i sufiksów całkowita liczba minut przedrostka i minut sufiksu b . Ponieważ istnieją , w sumie wszystkie tablice min przedrostków i sufiksów min zajmują czyli przestrzenie .

W sumie zajmuje miejsce do powyżej.

Dlatego udzielenie odpowiedzi na zapytanie w przypadku 1 to po prostu zadanie minimum z następujących trzech pytań:

Niech będzie blokiem zawierającym element w indeksie jo {\ dla indeksu .

  1. Sufiks min w w bloku
  2. RMQ na podzbiorze z bloków przy użyciu rozwiązania o stałym czasie i przestrzeni liniowo-arytmicznej
  3. Przedrostek min w w bloku

Na wszystkie 3 pytania można odpowiedzieć w stałym czasie. Stąd przypadek 1 można rozwiązać w przestrzeni liniowej i stałym czasie.

Przypadek 2: jeśli i i j są w tym samym bloku

Sekwencja RMQ, która została zredukowana z LCA, ma jedną właściwość, której nie ma normalny RMQ. Następny element to zawsze +1 lub -1 od bieżącego elementu. Na przykład:

Ilustracja pokazująca, jak przykładowy RMQ jest zakodowany jako ciąg bitów

Dlatego każdy blok zakodować jako ciąg bitów, w którym 0 reprezentuje bieżącą głębokość -1, a 1 reprezentuje bieżącą głębokość Ta transformacja zamienia blok łańcuch bitów o rozmiarze . Łańcuch bitów o rozmiarze ma bitów Ponieważ , więc .

Dlatego zawsze jednym z możliwych bitów o rozmiarze \

Następnie dla każdego możliwego łańcucha bitów stosujemy naiwne kwadratowe rozwiązanie ze stałą przestrzenną w czasie . zajmie czyli .

Dlatego udzielenie odpowiedzi na w przypadku 2 polega po prostu na znalezieniu odpowiedniego bloku (w którym znajduje się ciąg bitów) Stąd przypadek 2 można rozwiązać za pomocą przestrzeni liniowej ze stałym czasem wyszukiwania.

Rozszerzenie do skierowanych grafów acyklicznych

DAG ze wspólnymi przodkami x i y w kolorze jasnozielonym i ich najniższymi wspólnymi przodkami w kolorze ciemnozielonym.

Chociaż pierwotnie badano w kontekście drzew, pojęcie najniższych wspólnych przodków można zdefiniować dla skierowanych grafów acyklicznych (DAG), używając jednej z dwóch możliwych definicji. W obu zakłada się, że krawędzie DAG wskazują od rodziców do dzieci.

  • Biorąc pod uwagę G = ( V , E ) , Aït-Kaci i in. (1989) zdefiniują poset ( V , ≤) taki, że x y iff x jest osiągalny z y . Najniżsi wspólni przodkowie x i y są zatem minimalnymi elementami pod ≤ zbioru wspólnego przodka { z V | x z i y z }.
  • Bender i in. (2005) , w której najniższymi wspólnymi przodkami x i y są węzły poza stopniem zerowym w podgrafie G indukowanym przez zbiór wspólnych przodków x i y .

Na drzewie najniższy wspólny przodek jest wyjątkowy; w DAG o n węzłach każda para węzłów może mieć aż n -2 LCA ( Bender et al. 2005 ), podczas gdy istnienie LCA dla pary węzłów nie jest nawet gwarantowane w dowolnie połączonych DAG.

Algorytm brutalnej siły służący do znajdowania najniższych wspólnych przodków został podany przez Aït-Kaci i in. (1989) : znajdź wszystkich przodków x i y , a następnie zwróć maksymalny element przecięcia dwóch zbiorów. Istnieją lepsze algorytmy, które analogicznie do algorytmów LCA na drzewach wstępnie przetwarzają graf, aby umożliwić zapytania LCA w stałym czasie. Problem istnienia LCA można optymalnie rozwiązać dla rzadkich DAG za pomocą algorytmu O(| V || E |) dzięki Kowaluk & Lingas (2005) .

Dash i in. (2013) przedstawiają ujednoliconą strukturę do wstępnego przetwarzania ukierunkowanych grafów acyklicznych w celu obliczenia reprezentatywnego najniższego wspólnego przodka w ukorzenionym DAG w stałym czasie. Ich ramy mogą osiągnąć prawie liniowe czasy przetwarzania wstępnego dla rzadkich wykresów i są dostępne do użytku publicznego.

Aplikacje

Problem obliczania najniższych wspólnych przodków klas w hierarchii dziedziczenia pojawia się przy implementacji systemów programowania obiektowego ( Aït-Kaci i in. 1989 ). Problem LCA znajduje również zastosowanie w modelach złożonych systemów występujących w przetwarzaniu rozproszonym ( Bender et al. 2005 ).

Zobacz też

Linki zewnętrzne