재귀 피보나치 알고리즘의 복잡성


13

다음과 같은 재귀 피보나치 알고리즘을 사용합니다.

def fib(n):
   if n==0:
      return 0
   elif n==1
      return 1
   return (fib(n-1)+fib(n-2))

fib (5)를 찾기 위해 숫자 5를 입력하면 이것이 5를 출력한다는 것을 알고 있지만이 알고리즘의 복잡성을 어떻게 조사합니까? 관련된 단계를 어떻게 계산합니까?



나는 똑같은 것을 찾고 있었고 MyCodeSchool 이이 비디오를 우연히 발견했으며 이것을 확인하는 것이 좋습니다.
snbk97

답변:


23

대부분의 경우 재귀 방정식을 사용하여 재귀 알고리즘을 나타낼 수 있습니다. 이 경우이 알고리즘에 대한 재귀 방정식은 입니다. 그런 다음 대입 방법 또는 확장 방법 (또는 재발을 해결하는 데 사용되는 다른 방법)을 사용하여 방정식의 닫힌 형태를 찾을 수 있습니다. 이 경우 을 얻습니다 . 여기서 는 황금 비율입니다 ( ).T ( N ) = Θ ( φ N ) φ φ = ( 1 + T(n)=T(n1)+T(n2)+Θ(1)T(n)=Θ(ϕn)ϕϕ=(1+5)2

반복 문제를 해결하는 방법에 대한 자세한 내용을 보려면 알고리즘 소개의 4 장을 읽어보십시오 .


0

재발 관계 / 수학 분석 ( 대체는 아님)에 대한 대안으로 , 수업에서 매우 자주 가르치지 않지만 매우 유익한 간단한 경험적 운동은 함수의 실행 횟수를 세고 범위의 수를 그래프로 나타내는 것입니다. 작은 n 입력의 다음 결과에 곡선 맞춤. 결과는 일반적으로 이론적 수학 접근 방식과 거의 일치합니다.

이 연습에 대한 유용한 지원 자료는 무료 온라인 3 장, 알고리즘 실행 시간 / 컴퓨터 과학 기초 , Ullman 에서 찾을 수 있습니다.


1) 플로팅은 공식 분석을 대체하지 않습니다. 쉽게 바보입니다. 2) 나는 당신이 인용 한 출처를 잘못 표현하고 있다고 생각합니다. 그들은 음모를 언급하지만 "복잡성"을 결정하는 방법은 아닙니다 . 3) FWIW, 나는 접근 방식에 동의하지 않으며 Ullman이 제시 한대로 사용하지만 그것은 당신의 잘못이 아닙니다.
Raphael

1
답은 본질적으로 면책 조항으로 시작하며, 플로팅은 수학 분석을 대신 할 수는 없습니다 . 플로팅은 과학적인 방법 이며, 때때로 바보짓되는 것은 과학적 분석 의 또 다른 측면 인 데이터의 통계적 측면을 배우고 불러내는 것입니다 . "쉽게 바보짓"은 다소 극적이라고 말하면, 그것이 실패하는 "병리학 적"사례가 있지만 일반적으로 "해결 된"사례입니다 ... 문제는 알고리즘의 복잡성조사하는 것이었고 경험적 분석은 핵심적인 측면 / 그것의 각도, 그리고 분명히 유일한 각도 등 ...
vzn

0

fib (n)의 결과는 1을 반환 한 모든 재귀 호출의 합계입니다. 따라서 fib (1)를 평가하는 정확히 fib (n) 재귀 호출이 있습니다. 따라서 실행 시간은 Ω (fib (n))입니다. 0을 반환하는 호출과 다른 재귀 호출이 이에 크게 추가되지 않음을 보여 주어야합니다.

1 또는 0을 반환하는 재귀 적으로 정의 된 함수 또는 다른 재귀 호출의 결과에 동일한 추론이 적용됩니다.


Ω

답변이 강하면 답변을 자유롭게 수정하십시오.
gnasher729

0

T(n)=T(n1)+T(n2) T(n)>2T(n2)T(n1)>T(n2)T(n)=Ω(cn)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.