- 공부한 날짜: 2021. 11. 10 / 전체 1차 공부 끝!!!!
1. 백트래킹
: 여러 후보해 중에서 특정 조건을 충조고시키는 모든 해를 찾는 알고리즘
백트래킹이 다루는 문제들은 해가 하나 이상 존재한다
후보해: 해가 될 수 있는 가능성을 가진 부분해의 조합
모든해: 문제의 정답을 모아놓은 것
목적: '진짜 해'를 효율적으러 찾는 것
2. 백트래킹을 이용한 미로찾기
- 규칙
ㄱ. 갈래 길이 나오면 무조건 왼쪽 길부터 들어간다
ㄴ. 막다른 곳이 나오면 갈래 길목으로 되돌아 나와 다음 길을 시도한다
ㄷ. ㄱ~ㄴ 과정을 목표 지점에 도달하거나 모든 경로를 다 탐색할 때까지 계속한다
- 깊이 우선 탐색과 다른점
: 깊이 우선 탐색은 모든 노드를 방문하는 것이 목적이고, 백트래킹은 해를 찾는 것이 목적이기 때문에 모든 노드를 방문할 필요가 없다
(해를 찾는 비용을 줄이기 위해 최대한 방문할 노드의 수를 최소화하는 것이 중요)
- 구현 원리
(1) 부분해 계산
(2) 다음 부분 후보해 목록 확인(여기서 재귀호출을 이용한다)
(3) 각 부분 후보해 계산
- 백트래킹이 처리해야하는 경우
(1) 현재 시도 중인 부분 후보해가 해가 될 수 있는 조건을 불만족 시킬때
(2) 최종해를 확보한 경우 (후보해가 조건을 만족한 경우)
백트래킹 구현방법: 위의 두가지 경우를 만나면 그 함수를 반환하는 것으로 백트래킹이 이루어진다
- 알고리즘 구현
ㄱ. 시작점을 현재 위치로 지정하고, 이동방향을 북으로 설정
ㄴ. 현 위치에서 가고자 하는 방향에 대해 이동 가능한지를 확인. 벽과 지나왔던 길은 이동가능한 길이 아님
ㄷ. ㄴ 과정에서 현재 방향에 대해 이동가능한 방향임이 확인되면 그곳으로 이동. 이동이 불가능한 방향으로 판정되면 방향(북-님-동-서)을 바꾸어서 다시 ㄴ을 시행한다. 현 위치에서 어떤 방향으로도 이동할 수 없ㅇㅁ이 확인되면 이전 위치로 되돌아감
ㄹ. 출구를 찾거나 미로 내의 모든 길을 방문할 때까지 ㄴ,ㄷ과정을 반복
*ㄴ과정은 GetNextStep(),ㄷ과정은 MoveTo()라는 함수로 구현함
2. N개의 퀸
: 퀸 N개를 NxN 크기의 체스판 안에 서로를 공격할 수 없게 배치하는 모든 경우를 구하는 문제
'알고리즘 &자료구조' 카테고리의 다른 글
[자료구조/Python] 복습 1. Queue, Stack (0) | 2022.12.22 |
---|---|
[알고리즘] Union -Find (0) | 2022.07.17 |
[알고리즘] 허프만 코딩 (0) | 2021.11.09 |
[알고리즘] 21. 탐욕 알고리즘 (0) | 2021.11.08 |
[알고리즘] 20. 동적 계획법 (0) | 2021.11.08 |