Mamy zestaw, , list elementów z zestawu . Każdy element z pojawia się na jednej liście w . Szukam struktury danych, która może wykonać następujące aktualizacje:
: konkatenuje listę zawierającą na końcu listy zawierającej
: dzieli listę zawierającą bezpośrednio po
Musi także wykonać następujące zapytania:
: zwroty gdyby i są na tej samej liście i Przyjść po (ale niekoniecznie przylega do )
: zwraca pierwszy element listy zawierający
: zwraca następny element po na liście zawierającej
Już opracowałem strukturę danych, która wykonuje te aktualizacje w i zapytania w czas. Najbardziej interesuje mnie, czy istnieje już struktura danych, która może to zrobić (mam nadzieję, że szybciej?).
Motywacja: zrootowane ukierunkowane lasy mogą być reprezentowane za pomocą dwóch z tych zestawów list i umożliwiają szybkie obliczenie dostępności w takich lasach. Chcę zobaczyć, do czego jeszcze można je wykorzystać i czy to wszystko jest już znane.
Najmniej wspólny przodek problem może być stosowany w celu rozwiązania problemu osiągalności w dynamicznych korzenie drzew, więc sobie wyobrazić, będzie również zainteresować następujące: Optymalne algorytmy Znalezienie Najbliższe wspólnych przodków w dynamicznych Drzewa , przez Alstrup i Thorup. W tym dokumencie określono terminO(n+mloglogn) dla n linki i m zapytania nca na maszynie wskaźnikowej.
źródło