다음과 같은 재귀 피보나치 알고리즘을 사용합니다.
def fib(n):
if n==0:
return 0
elif n==1
return 1
return (fib(n-1)+fib(n-2))
fib (5)를 찾기 위해 숫자 5를 입력하면 이것이 5를 출력한다는 것을 알고 있지만이 알고리즘의 복잡성을 어떻게 조사합니까? 관련된 단계를 어떻게 계산합니까?
다음과 같은 재귀 피보나치 알고리즘을 사용합니다.
def fib(n):
if n==0:
return 0
elif n==1
return 1
return (fib(n-1)+fib(n-2))
fib (5)를 찾기 위해 숫자 5를 입력하면 이것이 5를 출력한다는 것을 알고 있지만이 알고리즘의 복잡성을 어떻게 조사합니까? 관련된 단계를 어떻게 계산합니까?
답변:
재발 관계 / 수학 분석 ( 대체는 아님)에 대한 대안으로 , 수업에서 매우 자주 가르치지 않지만 매우 유익한 간단한 경험적 운동은 함수의 실행 횟수를 세고 범위의 수를 그래프로 나타내는 것입니다. 작은 n 입력의 다음 결과에 곡선 맞춤. 결과는 일반적으로 이론적 수학 접근 방식과 거의 일치합니다.
이 연습에 대한 유용한 지원 자료는 무료 온라인 3 장, 알고리즘 실행 시간 / 컴퓨터 과학 기초 , Ullman 에서 찾을 수 있습니다.
fib (n)의 결과는 1을 반환 한 모든 재귀 호출의 합계입니다. 따라서 fib (1)를 평가하는 정확히 fib (n) 재귀 호출이 있습니다. 따라서 실행 시간은 Ω (fib (n))입니다. 0을 반환하는 호출과 다른 재귀 호출이 이에 크게 추가되지 않음을 보여 주어야합니다.
1 또는 0을 반환하는 재귀 적으로 정의 된 함수 또는 다른 재귀 호출의 결과에 동일한 추론이 적용됩니다.