728x90

1. 깊이우선탐색(DFS, Depth First Search)

 

- 해가 존재할 가능성 있으면 계속 전진 탐색

 

- 스택 구조, 재귀 호출 이용

 

- 재귀 호출이 이루어질 때마다 위치가 점점 깊게 들어감

 

- 너무 깊게 들어가면 overflow 발생하므로, 막히면 나아갈 곳이 있는 곳으로 돌아가서 과정 반복, 모든 곳을 방문했을 때 탐색 종료

 

- 유용 : 사이클 탐지(Cycle Detection), 위상 정렬(Topological Sorting)

 

- 장점 : 무한히 넓은 트리에 효과적

 

- 단점 : 목표 노드가 없는 경로에 깊이 빠질 수 있음 <- 깊이 제한

 


2. 너비우선탐색(BFS, Breadth First Search)

 

- 생성된 순서에 따라 노드 확장

 

- 큐 구조, 큐의 첫 정점을 보고 그 정점에 인접한 정점들 탐색

 

- 새롭게 발견되는 정점 enqueue, 모든 인접 정점 탐색 끝나면 첫 정점 dequeue

 

- 많은 기억 공간 필요

 

- 유용 : 최소신장트리(Minimum Spanning Trees), 최단경로(Shortest Paths)

 

- 장점 : 무한히 깊거나 무한에 가까운 트리인 경우 효과적

 

- 단점 : 목표 노드로 가는 경로들 모두가 같은 거리일 때 헛된 탐색

 


3. 균일비용방법(UCS, Uniform Cost Search)

 

- 출발 노드로부터의 경로비용이 최소인 노드 선택 확장

 

- g(ni) = g(n) +c(n, ni)

 

- 음수가 있는 Graph -> 음수 값을 0으로 하기 위해 모두 +

 

4. 언덕오르기방법(Hill-Climbing)

 

- 임의 경로 신속 탐색

 

- 현재 상태까지 도달하는데 소비한 경로 비용 무시

 

- 남은 경로까지의 비용만 고려

 


문제점

 

- 지역최대치 문제 : ┳ ┯ 인 경우 후자에 도달시 더 이상 진행 X

 

-> Back Tracking으로 해결

 

- 평원 문제 : 사방이 동일한 경우 진행 X

 

-> 연산자 반복으로 해결

 

- 능선 문제 : Branching factor : 너무 많아지면 비효율적

 

너무 제한하면 실제지형 판단 힘듦

 

-> Branching Factor 적절히 늘림으로서 해결

 


5. 최적우선탐색(Best First Search)

 

- 지역적으로 확장된 모든 노드 중 가장 좋은 노드부터 탐색

 

- 많은 메모리 소요, 구현 방법 복잡

 

- 언덕오르기 탐색과 같이 정렬을 필요로 함

 


6. A* 알고리즘

 

- 시작으로부터 목표에 이르는 하나의 경로를 찾음

 

- 휴리스틱을 가장 효율적으로 사용

 

- A1 : f1(n) = g1(n) + h1(n) 모든 노드에 대해 h1(n) < = h(n)

 

A2 : f2(n) = g2(n) + h2(n) 모든 노드에 대해 h2(n) < = h(n)

 

- h1(n), h2(n)는 예측 경로 비용

 

- h1(n) = h(n) -> 곧바로 목표노드(최소비용)

 

h1(n) = 0 -> g에만 의존 : 균일비용탐색

 

출처 : http://wwweb.tistory.com/entry/%EA%B7%B8%EB%9E%98%ED%94%84-%ED%83%90%EC%83%89-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98DFSBFSUCSHill-ClimbingA

728x90

'Algorithm' 카테고리의 다른 글

재귀 없는 퀵소트 (non recursive quick sort)  (0) 2013.04.07
DFS  (0) 2012.07.29
DLL INJECTION - 2  (0) 2012.07.29
DLL INJECTION - 1  (0) 2012.07.29
DFS ; Depth-First-Search  (0) 2012.07.29

+ Recent posts