5. F0 , F1 , F2 ,...
F0 0, F1 1, n 0
Fn 2 Fn Fn 1 피보나치 수열
(1 5 ) / 2 황금비
P(n)
Fn n 1
P(n)이 모든 양수 n에 대해 참임을 증명하라
6. n 1 F1 1 0 n 1 n=1일때 P(n+1)을 직접 증명
• n=2일때 값을 직접 계산했다는 말
n 2 F2 1 1.6 1 21 n-1, n 으로부터 n+1을 증명하고 있음
n=2 값을 구할 때 귀납법을 사용하려면
Fn 1 Fn 1 Fn n2
n 1
n2
(1 ) • n=0, n=1일 때, 값이 필요.
Fn 1 n • 양수 n이라는 조건이 있어 어긋남.
1 2
7. 확장된 유클리드 알고리즘
• 두 양의 정수 m과 n이 주어졌을 때,
– 그 수의 최대 공약수 d를 계산한다.
– 또한 am+bn=d가 되는 두 정수 a, b를 계산
• a, b가 반드시 양수여야 하는 것은 아님
• E1. [초기화] a’b1, ab’0, cm, dn
• E2. [나누기] c를 d로 나눈 몫과 나머지를 각각 q와 r
– c=qd+r,0≤r<d
• E3. [나머지가 0?] r=0이면 종료. am+bn=d가 성립
• E4. [순환]
– cd,dr,ta’,a’a,
– at-qa,tb’,b’b,bt-qb.
– goto E2
8. 모든 m과 n에 대해 증명
• P(n)을 “알고리즘 E는 모든 양수 n과 m에 대
해 작동한다.”
– 수학적 귀납법을 적용할 수도 있음
– 수월하게 풀리지 않는다.
– 몇 가지 추가적인 사실들도 증명해야 함
9. • a,b,a’,b’에 대한 증명 필요.
• E2를 수행할 때마다 항상 성립을 증명
– a’m+b’n=c
– am+bn=d
• 증명 방법
– 처음 도달했을 때, 확실히 참
– 단계 E4 역시 유효성을 변경하지 않는다
– 연습문제 6
10. 시작
m 0, n 0
a0, a’1,cm
b1,b’0,dn c m 0, d n 0
a b' 0, a' b 1
qc/d
rc%d am bn d , a' m b' n c qd r
0 r d , gcd( c, d ) gcd( m, n)
Y
r=0? 종료
am bn d gcd( m, n)
N
cd, dr;
ta’, a’a, at-qa;
tb’,b’b,bt-qb; am bn d , a' m b' n c, d 0,
gcd( c, d ) gcd( m, n)
11. 시작
m 0, n 0 시작 조건
a0, a’1,cm
b1,b’0,dn c m 0, d n 0 단순 치환
a b' 0, a' b 1
qc/d
rc%d
Y
r=0? 종료
N
cd, dr;
ta’, a’a, at-qa;
tb’,b’b,bt-qb;
12. 시작
a0, a’1,cm
b1,b’0,dn c m 0, d n 0
a b' 0, a' b 1
qc/d
rc%d am bn d , a' m b' n c qd r
0 r d , gcd( c, d ) gcd( m, n)
이 사이에 값을 바꾸는 치환이 없음
Y • r=0 인지 검사하는 분기만 있음
r=0? 종료
N 알고리즘 종료에서 성립하는
E4 am+bn=d 가 성립해야 함
cd, dr; • a’m+b’n=c도 성립
ta’, a’a, at-qa; • 시작할 때 참. E4에서 유효성을 안 바꿈
tb’,b’b,bt-qb;
13. 시작
a0, a’1,cm
b1,b’0,dn
qc/d
rc%d am bn d , a' m b' n c qd r
0 r d , gcd( c, d ) gcd( m, n)
Y
r=0? 종료 c=qd+r
gcd(m,n)=gcd(c,d)=gcd(d,r)
N
cd, dr
cd, dr;
ta’, a’a, at-qa;
tb’,b’b,bt-qb; am bn d , a' m b' n c, d 0,
gcd( c, d ) gcd( m, n)
14. • 모든 알고리즘의 유효성을 증명하는 일반적인
방법을 고안해낼 수 있다.
• 알고리즘 순서도를 작성
• 순서도와 순서도를 잇는 화살표마다
– 거쳐 갈 당시의 주요 상태들에 대한 단언assertion
15. • 상자에 들어가는 화살표가 참이라면 나오는 화
살표에 붙은 단언은 참이다.
• 모든 상자에 대해 증명했다면
– 알고리즘 수행 전반에서 모든 단언들이 참
• 순서도 안에서 운행되는 화살표들의 개수를 가
지고 계산 횟수에 대해 귀납을 사용
– 첫째 화살표에 대한 단언은 옳다.
– n번째 화살표에 대한 단언이 참이라면
– (n+1)번째 화살표에 대한 단언도 참.
16. • 주어진 알고리즘이 유효함을 증명
– 순서도에 집어넣을 적절한 단언들을 고안하는 문제
• 어려운 것 몇 개만 잘 해결한다면 나머지는 기
계적으로 할 수 있다.
어려운 부분
가장 창조적인 부분
17. • 우리가 알고리즘을 이해하는 방식을 반영
– 알고리즘의 정확성을 증명하는 방법의 더욱 중요한
또 다른 측면
• 알고리즘이 왜 유효한지 진정으로 이해
– 모든 단언들이 은연중에 머리 속에 채워지는 지점
• 핵심 단언들을 반드시 명시적으로 알려주어야
함
– 기계적인 방식으로 도출할 수 없는 단언
– 어떠한 알고리즘을 다른 누군가에게 설명할 때
18. • 알고리즘이 종료한다는 점은 증명하지 않았음
– 종료하지 않는 조건
m 1, n 2
• 단지 만일 알고리즘이 종료한다면 정확한 답을
낸다는 것을 증명했을 뿐
• 종료 증명은 유효성 증명과는 개별적으로 처리
하는 게 일반적