저는 첫 번째 검색을 구현하려고하는데이 알고리즘에 LIFO 또는 FIFO 속성이 있는지 확실하지 않습니다. 그렇다면 어느 것을 사용해야합니까? 그것을 사용해야합니까?Greedy Best First Search가 대기열 또는 스택을 사용합니까?
답변
이 의사에 대한 http://en.wikipedia.org/wiki/Best-first_search#Algorithm_.5B3.5D를 참조하십시오
OPEN = [initial state]
while OPEN is not empty or until a goal is found
do
1. Remove the best node from OPEN, call it n.
2. If n is the goal state, backtrace path to n (through recorded parents) and return path.
3. Create n's successors.
4. Evaluate each successor, add it to OPEN, and record its parent.
done
1 단계는 "최고의 노드 제거"라는 -이 Priority Queue의 사용을 의미합니다.
정상적인 대기열로 충분합니까? 예를 들어, 대기열
아니요, 우선 순위 큐의 핵심 기능은 삽입 순서에 관계없이 "최상"(비교 자에 의해 결정됨) 요소가 항상 앞에 있다는 것입니다. http://docs.oracle.com/javase/1.5.0/docs/api/java/util/PriorityQueue.html - – Dylan
대기열을 사용하므로 FIFO를 사용해야합니다.
하지만 스택이 FIFO가 아닙니다. – gefei
FIFO가 우선 순위 큐를 사용하므로 FIFO가별로 의미가 없습니다. 처음 나오는 요소는 첫 번째로 삽입 된 요소가 아닌 최상의 요소입니다.) –
지금까지 어떤 작업을 했습니까? – LJ2
알고리즘 자체에 대한 실제 구현이 없습니다. 나는 아직도 그것에 대해 생각하고 연구하고 있는데 이것이 내가 묻는 이유이다. –