최선 우선 탐색 (Best-First Search)
최선 우선 탐색은 특정한 평가 함수(heuristic function)에 따라 노드를 선택하여 탐색하는 알고리즘입니다. 평가 함수는 각 노드가 목표에 얼마나 가까운지를 나타내는 값이며, 가장 작은 평가 값을 가진 노드를 선택하여 탐색합니다. 최선 우선 탐색은 주로 최적화 문제나 경로 탐색에서 사용되며, A* 알고리즘이 가장 대표적인 예입니다. 최선 우선 탐색은 탐색의 효율성을 높일 수 있지만, 최단 경로를 보장하지는 않습니다.
예시를 위해 최단 경로 탐색 문제를 생각해 보겠습니다. 다음과 같은 그래프에서 A부터 G까지의 최단 경로를 찾는 문제입니다. 각 간선의 가중치는 숫자로 표시되어 있습니다.
A
/ | \
B C D
/ \ / \
E F G H
초기 상태:
시작 정점: A
방문한 정점: []
시작 정점 A 방문:
방문한 정점: [A]
A의 이웃 정점 B, C, D 평가:
평가 함수 값: B(5), C(3), D(8)
C가 가장 낮은 평가 함수 값을 가지므로 C 선택:
방문한 정점: [A, C]
C의 이웃 정점 G, F 평가:
평가 함수 값: G(2), F(6)
G가 가장 낮은 평가 함수 값을 가지므로 G 선택:
방문한 정점: [A, C, G]
G의 이웃 정점이 없으므로, 탐색을 종료합니다.
최선 우선 탐색은 휴리스틱 함수를 사용하여 각 후보 상태를 평가하여 가장 최적의 선택을 우선적으로 탐색합니다. 이 알고리즘은 주어진 문제에 대한 최적의 해를 빠르게 찾을 수 있을 때 유용하게 사용됩니다. 다만, 휴리스틱 함수의 평가가 가장 최적의 해를 보장하지는 않을 수 있습니다.