A *를 문제에 적용 할 때 경험적으로 일관성이 있다면 A * 검색을 더욱 최적화 할 수 있다는 것을 읽었습니다. Boost Graph Library는 A * 알고리즘의 두 가지 버전, astar_search
및 astar_search_tree
을 제공합니다. 이 두 문서의 구별에 대한 문서는 명확하지 않습니다. 이 중 하나가 일관된 경험을 가정 한 최적화 된 검색을 수행합니까?부스트 그래프 라이브러리 A * 일관된 휴리스틱을 위해
1
A
답변
3
부스트 메일 링리스트에 문의하여 답변을 얻었습니다. 나는 후손 여기 답을 재현 할 수 있습니다 :
구분은 같은 정점을 여러 번 방문 을 방지하기 위해 만든 노력이 있어야 여부입니다. 버텍스가 일 때 많은 경로를 사용하여 도달 할 수있는 그래프의 경우, 버텍스와 그 후계자를 다시 방문하는 것을 피하기 위해 astar_search를 선호해야합니다. 같은 정점이 여러 경로에 나타나지 않거나 정점을 확인하는 것이 충분히 저렴하지 않으므로 작업을 반복하지 않는 경우 ast35_search_tree는 이 이전에 방문한 정점을 기억하지 못합니다. 반복 된 버텍스를 찾기위한 단점은 전에 참조 된 룩업 테이블 을 저장하는 데 메모리가 많이 필요하다는 것입니다. 검색에 시간이 걸리므로 이 테이블을 업데이트해야합니다. 두 버전의 알고리즘 모두 허용 가능한 휴리스틱 스가 올바르게 작동해야합니다. 나는이 생각하지 않습니다
0
_tree
과 비 _tree
부스트 그래프 알고리즘 버전의 차이는 _tree
버전이 그래프가 실제로 나무라고 가정한다는 것입니다. 따라서주기가없고 노드에 화살표가 하나만 있습니다.
사실이다; 나는주기가있는 방향이없는 그래프가 있고 astar_search_tree는 여전히 잘 작동합니다. – giogadi
놀고 놀아 라! "더미 값이 거리 맵에 사용되고 그래프에 사이클이 포함되어 있으면 알고리즘이 무한 루프를 입력하게됩니다."(http://www.boost.org/doc/libs/1_53_0/libs/graph/doc/astar_search .html). 그래프가 트리가 아닌 경우 _tree 버전을 사용하면 안됩니다. – Roberto
@giogadi : 그것이 모든 비 트리 그래프에서 작동한다는 것을 의미하지는 않습니다. http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c-pi –