Top Banner
TAOCP #1 아꿈사 http://cafe.naver.com/architect1 최성기 1.2.8. 피보나치 수열
28

110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

May 29, 2015

Download

Technology

sung ki choi

아꿈사 스터디 발표자료.
발표일자 : 2011. 2. 12.
스터디 주제 : TAOCP (The Art Of Computer Programming) #1
발표주제 : 1.2.8. 피보나치 수
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

TAOCP #1

아꿈사 http://cafe.naver.com/architect1

최성기

1.2.8. 피보나치 수열

Page 2: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

이 챕터는 이렇게 시작합니다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

Page 3: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

10 10

70

80

역사 이야기 여러가지 성질 gcd에 관한

정리A

생성함수

난이도

Agenda

발표내용과, 각각의 난이도 입니다.

Page 4: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

10 10

70

80

역사 이야기 여러가지 성질 gcd에 관한

정리A

생성함수

난이도

Agenda

가볍게 역사 이야기부터 해보죠.

Page 5: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

레오나르도 피보나치 (1170 – 1250)

I Hate You! T.T…

13세기 이탈리아의 수학자.

한 달에 한 쌍씩의 새끼를 낳는 토끼의

마리 수를 구하는 연습문제를 저서에 소개.

자연현상에서 관찰되는 피보나치 수는

토끼문제의 가정과 비슷한 이유일 거라고 추정된다. [Conway, Guy, The Book of Numbers (New York: Copernicus, 1996)]

Page 6: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

http://blog.naver.com/devotion20/80120887670

1

1

2

3

5

8

13

한 쌍의 어린 토끼가 있습니다.

한 쌍의 토끼는 한달 후면 어른토끼가 되고,

어른토끼 한 쌍은 매달 한 쌍의 토끼를 낳습니다.

Page 7: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

알고리즘과는 뭔 상관인가?!

덧셈에 대한 좋은 컴퓨터 연습문제.

1.1E (유클리드 알고리즘) 의 수 m과 n이 보다 크지 않으면 단계 E2는 많아야 k+1번 수행됨.

수학자 뤼까는 피보나치 수를 이용해 39자리 수 이 소수임을 증명.

E1. 나머지를 구한다. E2. 나머지가 0인가? E3. 맞줄임

아니오

Page 8: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

잠시 삼천포로… 황금비율

1.2.1에서 귀납법으로 증명.

초기 유럽 수학자 제이콥(Simon Jacob)이 알아냄.

Page 9: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

10 10

70

80

역사 이야기 여러가지 성질 gcd에 관한

정리A

생성함수

난이도

Agenda

자, 이제 몇 가지 성질들을 알아보죠.

Page 10: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐹𝑛+1 𝐹𝑛𝐹𝑛 𝐹𝑛−1

=1 11 0

𝑛

𝑭𝒏+𝟏𝑭𝒏−𝟏 − 𝑭𝒏𝟐 = (−𝟏)𝒏

증명:

1. 귀납법으로 쉽게 증명

2. 좀 더 난해한 방법으로 증명 : 다음과 같은 행렬 항등식을

간단한 귀납법으로 증명하고, 양변의 행렬식을 취한다.

… (4)

저는 1번 바로 귀납법 증명은 못 풀었고요, 2번이 더 쉬웠습니다.

Page 11: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐹𝑛+1 𝐹𝑛𝐹𝑛 𝐹𝑛−1

=1 11 0

𝑛

임을 귀납법으로 증명해보자.

n=1일 때,

𝐹2 𝐹1𝐹1 𝐹0

=1 11 0

=1 11 0

1

이므로 참이다.

Page 12: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐹𝑛+1 𝐹𝑛𝐹𝑛 𝐹𝑛−1

=1 11 0

𝑛

n=k일 때,

𝐹𝑘+1 𝐹𝑘𝐹𝑘 𝐹𝑘−1

=1 11 0

𝑘

가 참이라면

1 11 0

𝑘+1

=1 11 0

𝑘 1 11 0

=𝐹𝑘+1 𝐹𝑘𝐹𝑘 𝐹𝑘−1

1 11 0

=𝐹𝑘+1 + 𝐹𝑘 𝐹𝑘+1𝐹𝑘 + 𝐹𝑘−1 𝐹𝑘

=𝐹𝑘+2 𝐹𝑘+1𝐹𝑘+1 𝐹𝑘

… 이므로 n=k+1도 참이다.

Page 13: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝑭𝒏+𝟏𝑭𝒏−𝟏 − 𝑭𝒏𝟐 = (−𝟏)𝒏

관계식 (4)는 𝑭𝒏과 𝑭𝒏+𝟏이 서로 소임을 보여준다……고…하던데…

…… (4)

Page 14: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝑭𝒏+𝟏𝑭𝒏−𝟏 − 𝑭𝒏𝟐 = (−𝟏)𝒏 …… (4)

• 𝑭𝒏과 𝑭𝒏+𝟏가 공약수 a를 가진다면 식 (4)의 좌변은

공통의 약수로 묶어낼 수 있고, a(p + q) 형태가 된다.

• 우변은 (−𝟏)𝒏이니까, 좌변의 약수 a는

-1의 제곱으로만 표현되는 수다.

• 그럼 a는 고작 해봐야 1 아니면 -1밖에 될 수 없겠네.

• 따라서 𝑭𝒏과 𝑭𝒏+𝟏의 공약수는 1뿐이다 : 서로 소.

Page 15: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐹0 = 0; 𝐹1 = 1; 𝐹𝑛+2 = 𝐹𝑛+1 + 𝐹𝑛, 𝑛 ≥ 0 …… (2)

𝐹𝑛+𝑚 = 𝐹𝑚𝐹𝑛+1 + 𝐹𝑚−1𝐹𝑛 (6)

𝐹𝑛+2 = 1𝐹𝑛+1 + 1𝐹𝑛 𝐹𝑛+3 = 𝐹𝑛+2 + 𝐹𝑛+1 = 2𝐹𝑛+1 + 1𝐹𝑛 𝐹𝑛+4 = 𝐹𝑛+3 + 𝐹𝑛+2 = 3𝐹𝑛+1 + 2𝐹𝑛 𝐹𝑛+5 = 𝐹𝑛+4 + 𝐹𝑛+3 = 5𝐹𝑛+1 + 3𝐹𝑛 𝐹𝑛+6 = 𝐹𝑛+5 + 𝐹𝑛+4 = 8𝐹𝑛+1 + 5𝐹𝑛 𝐹𝑛+7 = 𝐹𝑛+6 + 𝐹𝑛+5 = 13𝐹𝑛+1 + 8𝐹𝑛 …귀납법을 통해 일반화하면, 임의의 양의 정수 m에 대해

Page 16: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐹𝑛+𝑚 = 𝐹𝑚𝐹𝑛+1 + 𝐹𝑚−1𝐹𝑛 (6)

식 (6)에서 m이 n의 배수이면, 귀납법을 통해서 다음을 알 수 있다.

𝐹𝑛𝑘는 𝐹𝑛의 배수이다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, …

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, …

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, …

Page 17: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

10 10

70

80

역사 이야기 여러가지 성질 gcd에 관한

정리A

생성함수

난이도

Agenda

gcd에 관한 정리 A. 안전벨트 하세요.

Page 18: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

정리 A (뤼카 E. Lucas, 1876). d=gcd(m,n) 이라고 할 때, 어떠한 수가 만일 𝐹𝑑를 나눈다면, 그리고 오직 그럴 때에만 그 수는 𝐹𝑚과 𝐹𝑛 모두를 나눈다. 즉,

gcd (𝐹𝑚, 𝐹𝑛)= 𝐹gcd (𝑚,𝑛).

𝐹𝑘

𝑘 0 1 2 3 4 5 6…

0 1 1 2 3 5 8…

m n d

𝐹𝑑 𝐹𝑚 𝐹𝑛

Page 19: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

증명. 유클리드 알고리즘을 이용.

gcd (𝐹𝑚, 𝐹𝑛)= 𝐹gcd (𝑚,𝑛).

𝐹𝑛+𝑚 = 𝐹𝑚𝐹𝑛+1 + 𝐹𝑚−1𝐹𝑛 …… 식 (6)

• 𝐹𝑚과 𝐹𝑛의 모든 공약수는 𝐹𝑛+𝑚의 약수이기도 하다.

• 𝐹𝑛+𝑚과 𝐹𝑛의 모든 공약수 역시 𝐹𝑚𝐹𝑛+1의 약수.

• 𝐹𝑛+𝑚과 𝐹𝑛의 모든 공약수 역시 𝐹𝑚의 약수. 서로 소

오직 d가 𝐹𝑚+𝑛과 𝐹𝑛을 나눌 때에만

d는 𝐹𝑚과 𝐹𝑛을 나눈다. …… 명제 (8)

Page 20: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

오직 d가 𝐹𝑚+𝑛과 𝐹𝑛을 나눌 때에만 d는 𝐹𝑚과 𝐹𝑛을 나눈다.

k에 대한 귀납법을 거치면…

오직 d가 𝐹𝑛+𝑘𝑛과 𝐹𝑛을 나눌 때에만 d는 𝐹𝑚과 𝐹𝑛을 나눈다.

이 결과를 좀 더 간명하게 표현하면…

명제 (8)을 만족하면서 𝐹0 = 0인 임의의 수열 < 𝐹𝑛 >이 정리 A를 만족함을 증명 (피보나치 수열은 명제 (8)도 만족하고 𝐹0 = 0인 수열니까 같이 증명되는 셈.)

오직 d가 𝐹𝑚과 𝐹𝑛을 나눌 때에만

d는 𝐹𝑚 𝑚𝑜𝑑 𝑛과 𝐹𝑛을 나눈다.

… 명제 (9)

Page 21: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

오직 d가 𝐹𝑚과 𝐹𝑛을 나눌 때에만

d는 𝐹𝑚 𝑚𝑜𝑑 𝑛과 𝐹𝑛을 나눈다.

명제 (9)

r = 𝑚 𝑚𝑜𝑑 𝑛라고 적어보면, (r은 m을 n으로 나눈 나머지)

오직 d가 𝐹𝑚과 𝐹𝑛을 나눌 때에만 d는 𝐹𝑟과 𝐹𝑛을 나눈다.

*𝐹𝑚, 𝐹𝑛}의 공약수들은 *𝐹𝑛, 𝐹𝑟}의 공약수와 같다.

유클리드 알고리즘 조작과정에서 m과 n이 변해도

*𝐹𝑚, 𝐹𝑛}의 공약수 집합은 변하지 않음.

(마지막 r=0일 경우, 공약수 집합은 𝐹0 = 0과 𝐹gcd (𝑚,𝑛)의 공약수들)

Page 22: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

10 10

70

80

역사 이야기 여러가지 성질 gcd에 관한

정리A

생성함수

난이도

Agenda

이제 마지막 내용, 생성함수 입니다.

Page 23: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

다음과 같은 무한급수를 설정한다.

𝐺 𝑧 = 𝐹0 + 𝐹1𝑧 + 𝐹2𝑧2 + 𝐹3𝑧

3 + 𝐹4𝑧4+…

= 𝑧 + 𝑧2 + 𝑧3 + 𝑧4 +⋯

네, 교수님은 낙관적이셔서 참 좋으시겠어요. 이런 시도 안 하는 나는 비관적인 거야 뭐야…

115페이지.

Page 24: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐺 𝑧 = 𝐹0 + 𝐹1𝑧 + 𝐹2𝑧2 + 𝐹3𝑧

3 + 𝐹4𝑧4+…

z와 𝑧2을 곱해서 두 식을 만든다.

𝑧𝐺 𝑧 = 𝐹0𝑧 + 𝐹1𝑧2 + 𝐹2𝑧

3 + 𝐹3𝑧4 + 𝐹4𝑧

5+… 𝑧2𝐺 𝑧 = 𝐹0𝑧

2 + 𝐹1𝑧3 + 𝐹2𝑧

4 + 𝐹3𝑧5+…

처음 식에서 두 식을 빼고 정리하면,

1 − 𝑧 − 𝑧2 𝐺 𝑧 = 𝐹0 + 𝐹1 − 𝐹0 𝑧 + 𝐹2 − 𝐹1 − 𝐹0 𝑧2

+ 𝐹3 − 𝐹2 − 𝐹1 𝑧3 + 𝐹4 − 𝐹3 − 𝐹2 𝑧4 +⋯ =z

𝐺 𝑧 = 𝑧/ 1 − 𝑧 − 𝑧2 (11)

Page 25: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

이제 𝐺 𝑧 의 조작을 통해서 < 𝐹𝑛 >에 대해 더 많은 것을 알아낼 수 있다.

𝐺 𝑧 = 𝑧/ 1 − 𝑧 − 𝑧2

분모 1 − 𝑧 − 𝑧2 의 실근은 1

2−1 ± 5 . 부분분수 기법으로 전개(?)

𝐺 𝑧 =1

5

1

1 − ∅𝑧−

1

1 − ∅ 𝑧

여기서 ∅ 는

∅ = 1 − ∅ =1

2(1 − 5)

수량 1/(1- ∅𝑧)은 무한 등비급수 1 + ∅𝑧 + ∅2𝑧2 +⋯ 의 합이므로

𝐺 𝑧 =1

5(1 + ∅𝑧 + ∅2𝑧2 +⋯− 1 − ∅ 𝑧 − ∅ 2𝑧2 −⋯)

다음 페이지 계속…

Page 26: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐺 𝑧 =1

5(1 + ∅𝑧 + ∅2𝑧2 +⋯− 1 − ∅ 𝑧 − ∅ 2𝑧2 −⋯)

여기서 𝑧𝑛의 계수들은 𝐹𝑛의 값들과 같아야 하며, 따라서

𝐺 𝑧 = 𝐹0 + 𝐹1𝑧 + 𝐹2𝑧2 + 𝐹3𝑧

3 + 𝐹4𝑧4+… (제일 처음 정의)

𝐹𝑛 =1

5(∅𝑛 − ∅ 𝑛)

(14)

피보나치 수의 중요한 닫힌 형식 공식. 18세기 초에 처음 발견됨.

Page 27: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

𝐹𝑛 =1

5(∅𝑛 − ∅ 𝑛)를 통해 알 수 있는 여러 가지 것들:

1. ∅ 가 음수(-0.61803…)이고 절대값이 단위원보다 작으므로,

n이 커지면 ∅ 이 매우 작아진다. 따라서,

𝐹𝑛 =∅𝑛

5를 가장 가까운 정수로 반올림한 것.

2. 𝐺(𝑧)2=1

5(

1

(1−∅𝑧)2+

1

(1−∅ 𝑧)2−

2

1−𝑧−𝑧2)

3. 𝐺(𝑧)2의 𝑧𝑛항의 계수는 𝐹𝑛𝐹𝑛−𝑘𝑛𝑘=0 이므로 다음식이 유도된다.

𝐹𝑛𝐹𝑛−𝑘𝑛

𝑘=0=1

5𝑛 − 1 𝐹𝑛 +

2

5𝑛𝐹𝑛−1

Page 28: 110212 [아꿈사발표자료] taocp#1 1.2.8. 피보나치수열

끝. 질문은 님께~