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

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

Embed Size (px)

DESCRIPTION

아꿈사 스터디 발표자료. 발표일자 : 2011. 2. 12.스터디 주제 : TAOCP (The Art Of Computer Programming) #1발표주제 : 1.2.8. 피보나치 수

Citation preview

TAOCP #1

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

최성기

1.2.8. 피보나치 수열

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

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

10 10

70

80

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

정리A

생성함수

난이도

Agenda

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

10 10

70

80

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

정리A

생성함수

난이도

Agenda

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

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

I Hate You! T.T…

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

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

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

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

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

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

1

1

2

3

5

8

13

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

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

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

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

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

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

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

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

아니오

잠시 삼천포로… 황금비율

1.2.1에서 귀납법으로 증명.

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

10 10

70

80

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

정리A

생성함수

난이도

Agenda

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

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

=1 11 0

𝑛

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

증명:

1. 귀납법으로 쉽게 증명

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

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

… (4)

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

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

=1 11 0

𝑛

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

n=1일 때,

𝐹2 𝐹1𝐹1 𝐹0

=1 11 0

=1 11 0

1

이므로 참이다.

𝐹𝑛+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도 참이다.

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

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

…… (4)

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

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

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

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

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

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

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

𝐹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에 대해

𝐹𝑛+𝑚 = 𝐹𝑚𝐹𝑛+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, …

10 10

70

80

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

정리A

생성함수

난이도

Agenda

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

정리 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

𝐹𝑑 𝐹𝑚 𝐹𝑛

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

… 명제 (9)

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

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

명제 (9)

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

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

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

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

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

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

10 10

70

80

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

정리A

생성함수

난이도

Agenda

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

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

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

3 + 𝐹4𝑧4+…

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

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

115페이지.

𝐺 𝑧 = 𝐹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)

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

𝐺 𝑧 = 𝑧/ 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 −⋯)

다음 페이지 계속…

𝐺 𝑧 =1

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

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

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

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

𝐹𝑛 =1

5(∅𝑛 − ∅ 𝑛)

(14)

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

𝐹𝑛 =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

끝. 질문은 님께~