피보나치 모둠 과제 - 3월 30일

Download Report

Transcript 피보나치 모둠 과제 - 3월 30일

FIBONACCI SEQUENCE
1조
목차
1. 조 구성원
2. 목적
3. 문제
4. 프로그램 설명
5. 실행결과
6. 느낀점
1조 구성원
★ 전지우 : 아이디어 제공, 발표자료 제작
★ 채하람 : 총지휘, 발표
★ 박수찬 : 코드 제작
★ 조성진 : 발표자료 제작
목적
 피보나치 수열을 이용해 부채꼴의 넓이와
정사각형의 넓이와의 관계를 이해한다.
 피보나치 수를 빠르게 계산하는 방법을 이
해한다.
 제곱수를 빠르게 계산하는 방법을 이해한다.
문제
위와 같은 도형이 있다.
이때 초록색 부분의 넓이를 구하는 프로그램을 작
성하시오
구해야 할 식
 𝐹1 = 1, 𝐹2 = 1, 𝐹𝑛 = 𝐹𝑛−1 + 𝐹𝑛−2 를 만족하
는 수열 𝐹과 주어진 수 𝑛 𝑛 ≤ 2 × 103 에 대
해 구해야 할 값은 아래와 같다. (편의상 π =
3으로 가정)

1
𝜋
4
𝐹1 + 𝐹2 + ⋯ + 𝐹𝑛−1 + 𝐹𝑛 + 𝐹𝑛+1 −
𝐹1 + 𝐹2 + ⋯ + 𝐹𝑛−1 + 𝐹𝑛 2
3
= 𝐹𝑛+2 − 1 2 − 𝐹𝑛+1 − 1 2
4
피보나치 수 빠르게 계산하기
 비록 𝑛이 작긴 하지만, lg 𝐹105 ≈ 69423이므
로 단순한 O n × lg 𝐹𝑛 알고리즘으로는 식
의 결과를 내기가 어렵다. 따라서 훨씬 빠른
알고리즘이 필요한데, 그 대표적인 예가 아
래와 같이 행렬을 활용하는 알고리즘이다.
𝐹𝑛−1
𝐹𝑛 0 1
𝐹𝑛
𝐹𝑛+1

=
𝐹𝑛
𝐹𝑛+1 1 1
𝐹𝑛+1 𝐹𝑛+2
𝐹𝑛
𝐹𝑛+1
0 1𝑛
 따라서,
=
𝐹𝑛+1 𝐹𝑛+2
1 1
제곱수 빠르게 계산하기
 단순한 O(lg 2 𝐹𝑛 ) 알고리즘으로 𝐹𝑛+2 − 1
2
와 𝐹𝑛+1 − 1 2 의 값을 구하기에는 무리가
있다. (상수가 상당히 크기 때문에 실행 시간
이 너무 오래 걸릴 것이다) 그래서 구현이 비
교적 간단하고 효율이 좋은 곱셈 알고리즘
인 카라츠바 알고리즘을 사용하여 제곱수를
구할 것이다.
실행 결과
느낀 점
제곱수 계산 방법과 피보나치 수 계산이 위 방
법으로 하는 것이 쉽지 않았고, 큰 수를 계산하
기에는 힘든 점이 있었다.