AO * 알고리즘을 구현하는 방법은 무엇입니까?


16

검색 알고리즘을 구현할 때 다른 데이터 구조가 사용됩니다. 예를 들어, 큐를 사용하여 너비 우선 검색을 구현하고 스택에서 깊이 우선 검색을 구현하고 최소 힙을 사용하여 A * 알고리즘 을 구현합니다 . 이 경우 검색 트리를 명시 적으로 구성 할 필요가 없습니다.

그러나 AO * 알고리즘 의 검색 프로세스를 시뮬레이션하는 간단한 데이터 구조를 찾을 수 없습니다 . 검색 트리를 명시 적으로 구성하는 것이 AO * 알고리즘을 구현하는 유일한 방법인지 알고 싶습니다. 아무도 나에게 효율적인 구현을 제공 할 수 있습니까?


3
어서 오십시오! 사용하는 비표준 재료에 대한 언급을 포함하십시오. AO *에는 Wikipedia 기사가 없으므로 링크 순서는 확실합니다. 좋은 것을 찾길 바랍니다. 확인하십시오.
Raphael

1
그래프가 아닌가 ( "다음"노드로 이동할 수있는 기능이 있는가)?
soandos

누군가 AO *가 A * 알고리즘과 어떻게 다른지 방금 스케치 한 경우 도움이됩니다. 링크에서 그것을 알아낼 수 없었습니다. 구현에 관해서는, 나무의 어떤 구조도 합리적으로 보입니다. ... 그것은 나무를 가로 지르고 있습니까?
vzn

답변:


1

기사 와 관련 하여 AO * 알고리즘에서 노드를 확장 할 때마다 모든 선행 작업의 예상 비용을 업데이트하려면 뒤로 이동해야합니다.

선형 데이터 구조를 사용하여 노드를 포함하는 경우 데이터 요소를 순차적으로 순회해야하며 하나의 데이터 요소 만 직접 가져올 수 있습니다 (스택, 큐, 우선 순위 큐 ...).

AO *에서 예상 비용을 기반으로 확장을 위해 노드를 가져올 때마다 알고리즘은 이전 모델 인 모든 노드에 대해 알고리즘을 반복합니다 (예상 비용 업데이트). 즉, 때로는 예상 비용과 후속 작업을 기반으로 요소를 가져와야합니다. 일반적인 경우에이 두 조건을 모두 충족시킬 수있는 순서 순서는 없습니다. "중첩 된"선형 데이터 구조를 사용하는 방법이있을 수 있지만 트리 구조를 모방해야하며 대신 검색 트리를 작성하는 것이 좋습니다.


0

나는 당신이 연결 한 설명을 끝내려고하지만 BST는 어떻습니까? 해결되지 않은 노드의 균형을 맞추기 위해 구성 할 수 있습니다. 이렇게하면 2 단계에서 시간을 절약 할 수 있으며 순회 수에 따라 전체 시간을 줄이는 데 도움이됩니다. 물론, 풀리지 않은 노드에 따라 트리의 균형을 잡거나 정렬하면 아마도 로그 데이터 시간을 유지하는 단순한 데이터 구조보다 적어도 더 나을 것입니다.

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


2
그리고 당신은 이것을 수 있습니까?
Raphael

BST에는 각 노드에 대한 숫자 색인이 있고 배치하는 데 사용되기 때문에 BST가 어떻게 사용되는지는 명확하지 않습니다. 숫자 인덱스는 무엇입니까?
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.