티스토리 뷰
728x90
[Cache] fibonacci?
피보나치 함수는 일반적으로 시간복잡도가 O(2^N) 이다.
정확하게 하면 O(1.6^N) 이다. 이렇게 지수승 시간복잡도는 매우 큰 값이므로 N이 커지면 구하기 어렵다.
그래서 fibonacci 함수를 만들때 시간복잡도를 선형으로 줄이기 위해
cache로 기존 호출했던 함수 값을 재사용해서 O(N)을 사용하도록 한다.
// fibonacci
// cache 사용의 중요성을 알게 해주는 예제
// cache를 사용하지 않는다면, fibonacci 의 시간복잡도는 O(2^N) 이다.
// 정확하게는 O(1.6^N) 이다. 왜냐하면, 양쪽이 동일한 트리모양이 아니라 한쪽만 뻗어나가는 트리이므로.
// cache를 사용하면 O(N)으로 해결할 수 있다.
// this-> pointer 이므로.
// 공간복잡도는 O(N) 이다.
#include <iostream>
using namespace std;
#define SIZE 1000000
class Fibonacci {
private:
int cache[SIZE];
public:
int get(int n) {
if(cache[n]) return cache[n];
if(n < 2) return cache[n] = n;
if(n < 0) return -1;
return cache[n] = this->get(n-1) + this->get(n-2);
}
};
int main() {
Fibonacci fibonacci;
cout << fibonacci.get(20) << endl;
return 0;
}
728x90
'공부' 카테고리의 다른 글
[Graph] Floyd Warshall? (0) | 2018.09.08 |
---|---|
[Sort] 수열에서 자기 위치에 위치하는 원소가 있는지 확인? (0) | 2018.09.07 |
[DataStructure] Stack? (0) | 2018.09.07 |
[DataStructure] bracketComplete? - Stack, Map, String (0) | 2018.09.07 |
[Recursive] numberPower? (0) | 2018.09.06 |
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Kluge
- 테슬라 리퍼럴 코드 혜택
- wlw
- 어떻게 능력을 보여줄 것인가?
- 메디파크 내과 전문의 의학박사 김영수
- 팔로워 수 세기
- 할인
- Bot
- 개리마커스
- 테슬라 레퍼럴 적용 확인
- 연애학개론
- 테슬라
- 인스타그램
- 유투브
- 클루지
- 테슬라 추천
- 테슬라 리퍼럴 코드
- follower
- COUNT
- 테슬라 리퍼럴 코드 생성
- 김달
- 레퍼럴
- 책그림
- 테슬라 레퍼럴
- 모델y
- 모델 Y 레퍼럴
- 테슬라 크레딧 사용
- 테슬라 레퍼럴 코드 확인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함