wow056   5년 전

리스트를 이용해 피보나치 수열을 역연산하면서 0과 1의 개수를 세도록 만들어봤는데요

숫자가 20을 넘어가면 연산속도가 현저히 떨어지기 시작합니다.

아마도 피보나치 수열의 연산을 이용하면 연산속도가 2의 숫자 제곱에 비례할 것이라고 생각하는데요

O(2^n)이 아닌 O(n^2)이나 O(n)인 알고리즘이 존재하나요?

njw1204   5년 전

다이나믹 프로그래밍을 이용하면 O(n)으로 가능합니다.

아이디어는 fib(3)을 호출할 때 결과값을 저장해놓고,

다음에 fib(3)이 필요할때는 함수를 호출할 필요없이 저장된 값만 불러오면 된다는 것입니다.

이것을 메모이제이션이라고 부릅니다.

다이나믹 프로그래밍에서 아주 대표적인 문제이니 학습해보시는걸 추천합니다.

댓글을 작성하려면 로그인해야 합니다.