Załóżmy, że jest drzewem o stałym stopniu, którego struktury nie znamy. Problem polega na wyprowadzeniu drzewa T przez zadawanie zapytań o postać: „Czy węzeł x leży na ścieżce od węzła a do węzła b ?”. Załóżmy, że na każde zapytanie można odpowiedzieć w stałym czasie przez wyrocznię. Znamy wartość n , liczbę węzłów w drzewie. Celem jest zminimalizowanie czasu potrzebnego do wygenerowania drzewa w kategoriach n .
Czy istnieje algorytm dla powyższego problemu?
Załóżmy, że stopień dowolnego węzła w wynosi co najwyżej 3.
Co wiem
Sprawa o ograniczonej średnicy jest łatwa . Jeśli średnica drzewa wynosi , możemy uzyskać algorytm dzielenia i zdobywania:
Każde drzewo binarne ma dobry separator, który dzieli drzewo na komponenty o wielkości nie mniejszej niż 1 / 3n.
- Wybierz dowolny wierzchołek x. Jeśli jest to dobry separator, oznacz to i powtórz.
- Znajdź wszystkich 3 sąsiadów x.
- Przejdź w kierunku sąsiada, który ma największą liczbę węzłów. Powtórz krok 2 z sąsiadem.
Ponieważ znalezienie separatora wymaga co najwyżej kroków, otrzymujemy algorytm O ( n D log n ) .
algorytm losowy. (przeniesiono z komentarzy poniżej)
Wybierz losowo dwa wierzchołki xiy. Z prawdopodobieństwem 1/9 będą leżeć po przeciwnych stronach separatora. Wybierz środkowy węzeł ścieżki od do y . Sprawdź, czy jest to separator, jeśli nie, wykonaj wyszukiwanie binarne.
Wymaga oczekiwany czas na znalezienie separatora. Otrzymujemy więc O ( n algorytm losowy.
Tło. Dowiedziałem się o tym problemie od znajomego, który pracuje w probabilistycznych modelach graficznych. Powyższy problem z grubsza odpowiada nauce struktury drzewa skrzyżowań przy użyciu wyroczni, która, biorąc pod uwagę trzy zmienne losowe X, Y i Z, może powiedzieć wartość wzajemnej informacji między X i Y, biorąc pod uwagę wartość Z. Jeśli wartość jest bliska do zera możemy założyć, że Z leży na ścieżce od X do Y.