- 제약조건 만족 문제(Constraint Satisfaction Problem)에서 해를 찾기 위한 전략
- 해를 찾기 위해 후보군에서 제약조건을 점진적으로 검사하다가, 해당 후보군이 제약조건을 만족할 수 없다고 판단되면 더 이상 연관된 후보들을 검사하지 않고 다른 후보군으로 넘어가 최적의 해를 찾음
- 실제 구현시, 고려할 수 있는 모든 경우의 수(후보군)을 상태공간트리(State Space Tree)를 통해 표현함
- 각 후보군을 DFS 또는 BFS 방식으로 확인
- Promising : 해당 후보군이 조건에 맞는지 검사
- Pruning(가지 치기) : 조건에 맞지 않으면, 바로 다른 후보군으로 넘어가 탐색 시간을 절약함
(예제) N Queen 문제 - NxN 크기의 체스판에 N개의 퀸을 서로 공격할 수 없도록 배치하는 문제
- 한 행에는 하나의 퀸만 배치할 수 있으므로, 맨 위의 행부터 퀸을 배치하고 다음 행에 퀸을 배치할 수 있는 위치를 찾아 배치함
- 이전까지 배치한 퀸에 의해 현재 행에 퀸을 배치할 위치가 없다면, 이전 행의 퀸의 위치를 바꿈
- 위 과정을 반복해서 모두 만족하는 해를 찾음
< 파이썬 코드로 구현 >
'자료구조 & 알고리즘' 카테고리의 다른 글
[파이썬] 최단 경로 알고리즘 : 다익스트라(Dijkstra) (0) | 2021.03.26 |
---|---|
[파이썬] 탐욕 알고리즘(Greedy Algorithm) (0) | 2021.03.22 |
[파이썬] 너비 우선 탐색(BFS)과 깊이 우선 탐색(DFS) (0) | 2021.03.22 |
[파이썬] 이진 탐색(Binary Search) 구현하기 (0) | 2021.03.21 |
[파이썬] 퀵 정렬(Quick Sort) 구현하기 (0) | 2021.03.21 |