일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 선택정렬
- BERT
- Binary Search Proof
- Discrete Wavelet Transform
- GPT-3
- chatGPT
- haar matrix
- ChatGPT 설명
- Selection Sort
- 이진탐색 증명
- binary search
- Proof Selection Sort
- 선택정렬 증명
- 이진탐색
Archives
- Today
- Total
Just Do IT
미로찾기 - DFS(Stack) 본문
Stack
Stack은 Last in, First out구조로 가장 늦게 들어간 데이터가 가장 먼저 나오는 구조이다.
Insert/Delete만 제공하고 각각 Push/Pop이라고 부른다.
성능
Push: O(1)
Pop: O(1)
간단한 구현
Stack을 이용한 미로찾기
1. 현재 위치에서 주변에 갈 수 있는 위치 중 하나로 이동하면서 이전에 있던 위치를 Stack에 Push한다.
2. 현재 위치에서 주변에 갈 수 있는 위치가 없으면 Stack에서 Pop해서 이전 위치로 돌아간다.
3. 현재 갈 수 있는 곳이 없으며 Stack이 비어있으면 미로찾기에 실패한다.
4. 오른쪽 맨 아래에 도착하면 성공한다.
DFS 미로찾기의 정확성
- (0, 0)에서 어떤 위치 (s,t)로 가는 길이 있다고 가정한다.
- (0,0) -> (a1,b1) -> ... -> (s,t)인 좌표 sequence있다.
만약 (s,t)를 방문하지 않는다고 가정하면 (0,0) -> (a1,b1) -> ... ->(s,t)사이에 가본 (p,q)가 있을 것이고 안가본 (i,j)가 있을 것이다.
위의 알고리즘을 보면 Stack이 비었을 때 종료하기 때문에 전진한 모든 곳에서 후진을 해야한다.
하지만 전진할 곳이 없어야만 후진을 한다. 따라서 전진할 수 있는 (i,j)가 있는데 방문하지 않는 다는 사실은 모순이된다.
성능
한 칸에서 일어나는 일들을 따로 생각해보면
- 한칸 당 최대 7번 전진 할 수 있다. (이전의 위치와 현재 위치를 제외하면 총 7번)
- 후진은 1번만 가능하다.
- 따라서 총에서 O(MN)시간이 걸린다.
'자료구조-알고리즘(Python) > 자료구조' 카테고리의 다른 글
동치관계(Equivalence Relation) - DFS(Stack) & LinkedList,List (0) | 2022.06.30 |
---|---|
동치관계(Equivalence Relation) - DFS(Stack) & Matrix (0) | 2022.06.30 |
미로찾기 - BFS(Queue) (0) | 2022.06.28 |
수학적 귀납법에서 참을 가정하는 이유 (0) | 2022.06.28 |
배열(Array) - Pack, UnPack, Sort, UnSort (0) | 2022.06.28 |
Comments