Як реалізувати алгоритм AO *?


16

Я помітив, що при реалізації алгоритмів пошуку використовуються різні структури даних. Наприклад, ми використовуємо черги для впровадження першого широтного пошуку, стеки для здійснення першого глибинного пошуку та міні-купи для реалізації алгоритму A * . У цих випадках нам не потрібно чітко будувати дерево пошуку.

Але я не можу знайти просту структуру даних для імітації процесу пошуку алгоритму AO * . Мені хотілося б знати, чи явно побудова дерева пошуку є єдиним способом реалізації алгоритму AO *? Чи може хтось надати мені ефективну реалізацію?


3
Ласкаво просимо! Будь ласка, не забудьте включити посилання на нестандартний матеріал, який ви використовуєте. Оскільки AO * не має статті у Вікіпедії, посилання, безумовно, є в порядку. Я сподіваюся, що я знайшов хороший, будь ласка, перевірте.
Рафаель

1
Це не просто графік (з функцією, яка дозволяє перейти до наступного вузла)?
soandos

це допомогло б, якщо хтось лише накреслив, наскільки AO * відрізняється від алгоритму A *. не міг цілком зрозуміти це з посилання. що стосується впровадження, будь-яка структура для дерев здається розумною .... вона обходить дерево правильно?
vzn

Відповіді:


1

Щодо цієї статті щоразу, коли ви розширюєте вузол в алгоритмі AO *, ви повинні повернутися назад, щоб оновити всі передбачувані витрати його попередників.

Якщо ви використовуєте лінійну структуру даних, щоб містити вузли, ви повинні переміщати елементи даних послідовно, і безпосередньо можна приймати лише один елемент даних (стек, черга, черга пріоритетів ...).

У AO * кожен раз, коли приймається вузол для розширення, виходячи з його розрахункової вартості, алгоритм перебирає всі вузли, які є його попередниками (для оновлення їх оціночної вартості). Це означає, що іноді слід брати елемент, виходячи з його кошторисної вартості, а іноді на основі його наступника. Немає порядку послідовності, який може відповідати обом цим умовам у загальному випадку. Ймовірно, існує спосіб використання "вкладених" лінійних структур даних, але він повинен просто імітувати структуру дерева, і краще буде будувати дерево пошуку замість цього.


0

Я просто виходжу з того опису, з яким ви пов’язані, але як бути з BST? Ви можете побудувати його, щоб збалансувати невирішені вузли. Це може заощадити ваш час на кроці 2 і допоможе зменшити загальний час в залежності від кількості проїздів. Звичайно, якщо ви врівноважили / сортували своє дерево за невирішеними вузлами, ви, мабуть, будете, принаймні, кращими, ніж більш спрощена структура даних, що потенційно зберігатиме логарифмічний час.

http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree


2
А ти можеш це зробити?
Рафаель

мені не так зрозуміло, як BST буде використовуватися, оскільки BST мають числовий індекс для кожного вузла і використовували для їх розміщення. для чого використовується числовий індекс?
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.