Zauważyłem, że podczas implementacji algorytmów wyszukiwania stosowane są różne struktury danych. Na przykład używamy kolejek do implementacji pierwszego wyszukiwania szerokości, stosów do implementacji wyszukiwania z głębokości pierwszej i stosów min do implementacji algorytmu A * . W takich przypadkach nie musimy jawnie budować drzewa wyszukiwania.
Ale nie mogę znaleźć prostej struktury danych symulującej proces wyszukiwania algorytmu AO * . Chciałbym wiedzieć, czy jawne zbudowanie drzewa wyszukiwania jest jedynym sposobem na implementację algorytmu AO *? Czy ktoś może zapewnić mi skuteczne wdrożenie?
Odpowiedzi:
W odniesieniu do tego artykułu za każdym razem, gdy rozwijasz węzeł w algorytmie AO *, musisz cofnąć się, aby zaktualizować wszystkie szacunkowe koszty jego poprzedników.
Kiedy używasz liniowej struktury danych do zawarcia węzłów, musisz kolejno przechodzić między elementami danych i tylko jeden element danych może być bezpośrednio pobrany (stos, kolejka, kolejka priorytetowa…).
W AO * za każdym razem, gdy węzeł jest brany do rozbudowy na podstawie jego szacunkowego kosztu, algorytm iteruje wszystkie węzły, które są jego poprzednikami (w celu zaktualizowania szacowanego kosztu). Oznacza to, że czasami powinieneś wziąć element na podstawie jego szacunkowego kosztu, a czasem na podstawie jego następcy. W ogólnym przypadku nie ma kolejności, w której można spełnić oba te warunki. Prawdopodobnie istnieje sposób na użycie „zagnieżdżonych” liniowych struktur danych, ale powinno to po prostu imitować strukturę drzewa i lepiej będzie zamiast tego zbudować drzewo wyszukiwania.
źródło
Po prostu odejdę od opisu, do którego linkujesz, ale co z BST? Być może będziesz w stanie go zbudować, aby zrównoważyć nierozwiązane węzły. Mogłoby to zaoszczędzić czas na kroku 2 i pomóc w skróceniu ogólnego czasu w zależności od liczby przejść. Oczywiście, jeśli zbalansowałeś / posortowałeś swoje drzewo według nierozwiązanych węzłów, prawdopodobnie byłbyś co najmniej lepszy niż bardziej uproszczona struktura danych, potencjalnie utrzymująca czas logarytmiczny / około niego.
http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree
źródło