일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 만화도
- 영어공부
- 영어원서읽기
- leetcode
- 스탭퍼
- 잡생각
- 월간
- 링피트
- 미드시청
- 리얼 클래스
- 쓰릴오브파이트
- 프로젝트
- 매일
- Daily Challenge
- 뭐든
- Writing
- realclass
- 운동
- 3줄정리
- 사이드
- English
- 화상영어
- 파비최
- 10분
- FIT XR
- 30분
- 개발자
- 괜찮음
- 읽기
- Problem Solving
- Today
- Total
파비의 매일매일 공부기록
구체 수학 - #1.1 하노이의 탑 본문
첫 번째 장은 재귀적인 문제들에 대한 내용이다.
그중에서 첫 번째인 하노이의 탑은 알고리즘 혹은 수학 분야에서 꽤 유명한 문제 중에 하나다.
원반 여덟 개로 된 탑에서 시작하고
원반들은 세 개의 기둥 중 하나에 큰 것부터 크기순으로 쌓여있다. (꼭대기에 제일 작은 선반이 놓이도록)
원반을 하나씩 이동해서 탑 전체를 다른 기둥으로 옮기는 게 이 퍼즐의 목표다.
(단, 작은 원반 위에 큰 원반을 놓아서는 안됨)
해가 존재하는 걸 찾기보다는
해가 존재는 할 텐데, 그중 가장 최선의 해는 무엇인지, 다시 말해 충분한 이동 횟수는 얼마인지를 구하는 게 핵심이다.
이런 질문을 공략하는 가장 좋은 방법은 문제를 약간 더 일반화하는 것이다.
하노이의 탑은 원반이 8개인데, 이를 n개인 경우를 고찰해보자.
일반화의 한 가지 장점은 문제의 규모를 훨씬 줄일 수 있다는 점이다.
실제로 작은 사례(small case) 들을 살펴보는 것이 유익한 경우가 자주 나온다.
원반이 하나나 둘밖에 없는 탑을 옮기는 방법은 아주 쉽다.
그리고 약간의 실험을 거치면, 원반이 세 개인 탑을 옮기는 방법도 파악이 가능하다.
다음 단계는 적절한 표기법을 도입하는 것이다. name and conquer.
한 기둥에서 원반 n개를 다른 한 기둥으로 옮기는 데 필요한 최소 이동 횟수를 Tn으로 표기하자. 그러면
T1 = 1, T2 = 3은 쉽게 구할 수 있다.
또한 T0 = 0 임도 알 수 있다.
엄청 당연한 이야기 같지만 똑똑한 수학자들은 작게 생각하는(think small)을 부끄러워하지 않는다.
극단적인 사례들을 잘 이해하고 나면(자명한 사례들이라도) 일반적인 패턴을 파악하기가 쉬워진다.
그러나 이번에는 크게 생각하는(think big) 쪽으로 관심을 바꾸어, 높은 탑을 옮기는 방법을 고찰하자.
원반 세 개짜리 탑으로 실험을 하면
최상위 두 원반을 가운데 기둥으로 옮기고
마지막 원반을 셋째 기둥으로 옮기고
다른 두 원반을 셋째 기둥으로 옮기면 된다.
먼저 가장 작은 원반 n-1개를 다른 기둥으로 옮기고(필요한 이동 횟수는 Tn-1)
가장 큰 원반을 또 다른 기둥으로 옮기고(필요 이동 횟수 1)
마지막으로 가장 작은 원반 n-1개를 가장 큰 원반 위로 옮기는 것이다(필요 이동 횟수 Tn-1)
따라서 원반 n개의 이동 횟수는 2*Tn-1 + 1을 넘지 않는다.
이런 식으로 점화식을 구하는 방법에 대해 소개한다.
어떤 관심 잇는 수량의 닫힌 형식 공식을 찾을 때 아래의 세 단계를 거친다.
1. 작은 사례를 살펴봄.
2. 관심 잇는 수량에 대한 수학 공식을 구하고 증명을 만듦.
3. 그 수학 공식의 닫힌 형식을 구하고 증명
이 책 전반에서 가장 초점을 두는 건 3번째 단계. 사실 1,2 단계를 건너뛰는 경우도 많음.
책의 마지막에서 하노이 탑의 점화식을 '추측'하지 않고(귀납적 비약을 사용해서) 해를 구하는 방법을 소개한다.
'Study > Algorithm 문제풀이' 카테고리의 다른 글
구체 수학 - #1.3 요세푸스 문제 (0) | 2021.07.09 |
---|---|
구체 수학 - #1.2 평면의 선들 (0) | 2021.07.08 |
구체 수학 - #0 시작하며 (0) | 2021.07.06 |
#6-5 The Art of Computer Programming - 정렬과 검색 (0) | 2021.06.01 |
#6-4 The Art of Computer Programming - 정렬과 검색 (0) | 2021.05.31 |