본문 바로가기

My Study/Programming&Theory

DFS, BFS, UCS

요샌 이것저것 발표 준비와 학교 수업 + 레포트 + 중간고사..로 인해 거의 글을 못쓰고 있습니다.;;
DFS, BFS, UCS는 이번 인공지능 과목에서 교수님이 내주신 레포트입니다.

세 알고리즘을 코딩하여 비교 분석하라는 레포트였습니다. 
 

 프로그래밍 해놓은 코드를 올려놓기 전에 DFS, BFS, UCS가 뭔지 간략하게만 설명하겠습니다.

DFS :  Depth-First Search ( 깊이 우선 탐색 )
우리의 초기노드 a에서 목표노드 u를 찾아가는데 있어서 깊이우선으로 탐색한다는 것입니다.
즉 찾는 순서는
 
a -> b -> e -> k -> s -> i -> t -> f -> m .............
이런식으로 가게됩니다. 초록색으로 써져있는 숫자는 UCS를 할 때 사용되는 각 경로 비용입니다.


위와 같이 찾아가게됩니다. "현재 탐색할 노드(총 경로비용,부모노드)" 이렇게 구성이되고
OPEN노드 가장 앞에 있는 것이 u인지 검사 후 아니면 해당 노드의 자식 노드들이 있으면 자식 노드를 OPEN의 앞에 넣고 해당 노드를 CLOSED에 넣는 것입니다. 이런식으로 진행;;

BFS :  Breadth-Firsh Search ( 넓이 우선 탐색 )

찾는 순서
a -> b -> c -> d -> e -> f -> g -> h -> i -> ....
이런식으로 갑니다.

구현 시 DFS와 다른 점은 자식 노드를 OPEN에 넣을 때 앞에 넣는 것이 아닌 뒤에 넣으면 됩니다.

 


UCS :  Uniform-Cost Search ( 균일 비용 탐색 )

이 알고리즘의 찾는 순서는 OPEN 노드에 있는 노드들 중 가장 경로비용이 작은 값을 선택해서 찾아가는 것입니다.
OPEN과 CLOSE로 비교를 해보겠습니다. ( 아래 그림은 위 문제와는 약간 다르게 썼습니다. 경로비용을 임의로 잡음 )

 

중간에 sorting을 한번 해주는 것입니다. ( Bubble sort 사용 )
경로 비용의 값에 따라 오름차순으로 정렬를 시켜 준 후 BFS와 똑같이 동작하게끔 하면 됩니다.  

세 알고리즘의 장단점을 생각해보면..

BFS
   장점 : 깊이 우선 이므로 Level이 높은 목표 노드에 대해서 효율적인 알고리즘
   단점 : Level이 낮은 목표노드에 대해선 비효율적인 알고리즘

DFS
   장점 : 넓이 우선 이므로 Level이 낮은 목표 노드를 찾기에 효율적인 알고리즘
   단점 : Level이 높은 목표 노드에 대해선 비효율적인 알고리즘

UCS
   장점 : 경로 비용이 최소인 구간을 찾아 가기 때문에 여러 길이 있을 때 효율적인 알고리즘
   단점 : 이번 문제의 상태공간 그래프에서는 비효율적인 알고리즘

 

'My Study > Programming&Theory' 카테고리의 다른 글

프로세스 생성 막기  (2) 2011.04.28
IEEE Std 754  (2) 2011.04.27
Python Eclipse에서 코딩하기  (1) 2011.02.25
병렬 프로그래밍  (1) 2011.02.10
내부적으로 ZwCreateFile 구현해서 사용하기  (0) 2011.02.05