티스토리 뷰
탐색(Search) = 문제의 해(Solution)가 될 수 있는 것들의 집합을 공간(Space)으로 간주하고 문제의 최적해를 찾기 위해 공간을 체계적으로 찾는 것.
- 상태(State) = 특정 시점에 문제의 세계가 처해있는 모습.
- 세계(World) = 문제에 포함된 대상들과 이들의 상황을 포괄적으로 지칭하는 말.
- 해(Solution) = 문제의 요구조건을 최적으로 만족하는 것.
- 상태 공간(State space) = '문제의 초기 상태로부터 도달할 수 있는 모든 상태의 집합', '문제의 해가 될 가능성이 있는 상태들의 집합'
- 초기 상태(Initial state) = 문제가 주어진 시점의 시작 상태
- 목표 상태 = 문제에서 원하는 최종 상태
- 상태 공간 그래프(State space graph) = 상태 공간에서 각 행동에 따른 상태의 변화를 나타낸 그래프.
맹목적 탐색(Blind search) = 문제의 상태 공간 정보를 이용하지 않고 정해진 순서에 따라 공간 그래프를 점차 생성해 가면서 해를 찾는 방법.
- 깊이 우선 탐색(depth-first search, DFS)
- 초기 노드에서 시작하여 깊이 방향으로 탐색
- 목표 노드에 도달하면 종료
- 더 이상 진행할 수 없으면, 백트래킹(backtracking, 되짚어가기)
- 방문한 노드는 재방문하지 않음
- 메모리 공간 사용 효율적
- 최단 경로 탐색 보장 불가 (무한 루프 가능성)
- 너비 우선 탐색(breadth-first search, BFS)
- 초기 노드에서 시작하여 모든 자식 노드를 확장하여 생성
- 목표 노드가 없으면 단말 노드에서 다시 자식 노드 확장
- 최단 경로 해 탐색 보장
- 메모리 공간 사용 비효율
- 반복적 깊이 심화 탐색(iterative-deepening search)
- DFS는 메모리에 대한 부담은 적지만 최단 경로를 찾는다는 보장이 없고, BFS는 메모리에 대한 부담은 크지만 최단 경로를 찾는다는 것을 보장한다. 반복적 깊이 심화 탐색은 이 두 탐색 방법의 장점을 취한 것이다.
- 깊이 한계가 있는 DFS를 반복적으로 적용하는 방법
- 탐색 깊이 한계(Search depth limit)를 0에서 시작하여 점차 1씩 증가시켜 가면서 깊이 우선으로 탐색하여 최단 경로를 찾는 것을 보장한다.
- 메모리 부담이 적다
- 반복적으로 노드들이 생성되기 때문에 비효율적인 면이 있으나, 실제로는 비용이 크게 증가하지 않음. (각 노드가 10개의 자식 노드를 갖는 탐색 트리의 경우라도 BFS에 비해 약 11% 정도의 노드를 더 많이 생성하는 정도에 불과하다.)
- 맹목적 탐색을 해야 하는 상황에서는 반복적 깊이 심화 탐색 방법을 우선적으로 고려하는 것이 바람직하다.
DFS | BFS | iterative-deepening search |
메모리 공간 사용 효율적 | 최단 경로 해 탐색 보장 | 최단 경로 해 탐색 보장 |
메모리 공간 사용 효율적 | ||
최단 경로 탐색 보장 불가 (무한 루프 가능성) |
메모리 공간 사용 비효율적 |
반복적인 DFS에 따른 비효율성 * 실제 비용이 크게 늘지 않음. (각 노드당 자식 노드가 10개면 BFS대비 11%↑) |
맹목적 탐색 적용시 우선 고려 대상 |
※BFS와 iterative-deepening search의 경우 링크당 비용(가중치)이 다를 경우 '최적해'를 찾는다는 보장이 없다.
양방향 탐색(bidirectional search)
- 초기 노드와 목적 노드에서 동시에 BFS를 진행.
- 중간에 만나도록 하여 초기 노드에서 목표 노드로의 최단 경로를 찾는 방법.
- 메모리 공간 사용 효율적 (노드당 자식 노드가 10개라고 가정할 경우, BFS에서 1020개의 노드를 생성한다면, 양방향 탐색에서는 2*1010개의 노드만 생성한다.)
'인공지능' 카테고리의 다른 글
[인공지능] 지식표현과 추론 - 프레임 (0) | 2019.10.07 |
---|---|
[인공지능] 지식표현과 추론 - 지식과 규칙 (0) | 2019.10.07 |
[인공지능] 탐색과 최적화 - 제약조건 만족 문제, 최적화 (1) | 2019.10.06 |
[인공지능] 탐색과 최적화 - 게임에서의 탐색 (0) | 2019.10.05 |
[인공지능] 탐색과 최적화 - 정보이용 탐색 (0) | 2019.10.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- 인공지능
- 카카오
- PyPy3
- 한화큐셀
- 브루트포스
- webOS
- 파이썬
- 알고리즘
- DP
- 피보나치
- 구현
- 동적 계획법
- 백준
- c
- 백트래킹
- Dynamic Programming
- 컨트리뷰톤
- 완전탐색
- LG
- DFS
- BFS
- BaekJoon
- 오픈소스
- 1932
- 플로이드 와셜
- 프로그래머스
- 이분탐색
- 코딩
- c++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함