Özyinelemeli Fibonacci algoritmasının karmaşıklığı


13

Aşağıdaki özyinelemeli Fibonacci algoritmasını kullanarak:

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

Fib (5) bulmak için 5 sayısını girersem, bunun 5 çıktısı olacağını biliyorum ama bu algoritmanın karmaşıklığını nasıl inceleyebilirim? İlgili adımları nasıl hesaplayabilirim?



Ben de aynısını arıyordum ve MyCodeSchool tarafından bu videoya rastladım .
snbk97

Yanıtlar:


23

T(n)=T(n1)+T(n2)+Θ(1)T(n)=Θ(ϕn)ϕϕ=(1+5)2

Tekrarların nasıl çözüleceği hakkında daha fazla bilgi edinmek istiyorsanız , Algoritmalara Giriş bölüm 4'ü okumanızı şiddetle tavsiye ederim .


0

tekrarlama ilişkilerine / matematik analizine bir alternatif olarak (ancak bir ikame değil ), görünüşe göre sınıflarda çok sık öğretilmeyen, ancak çok bilgilendirici olan basit bir ampirik egzersiz, işlevin yürütme sayısını saymak ve daha sonra bir aralık için sayıyı grafik olarak çizmektir. küçük , n girdileri, ve daha sonra eğri sonucu uygun. sonuçlar genellikle teorik matematik yaklaşımıyla yakından eşleşecektir.

Bu alıştırma için iyi destekleyici materyal ücretsiz çevrimiçi bölüm 3, algoritmaların çalışma süresi / Bilgisayar Biliminin Temelleri , Ullman'da bulunabilir.


1) Çizim, hiçbir şekilde resmi analizin yerini almaz. Kolayca kandırılır. 2) Sanırım alıntıladığınız kaynağı yanlış temsil ediyorsunuz. Çizimden bahsediyorlar, ancak "karmaşıklığı" belirlemenin bir yolu olarak değiller . 3) FWIW, yaklaşıma katılmıyorum ve Ullman'ın sunduğu gibi kullanıyorum, ama bu senin hatan değil.
Raphael

1
cevap, çizimin matematik analizinin yerine geçmediğini söyleyerek esasen feragatnamenizle başlar . çizim bilimsel bir yöntemdir ve bazen kandırıldığını söylemek / gözlemlemek, bilimsel analizin bir başka yönü olan verilerin istatistiksel yönlerini öğrenmek / çağrıştırmaktır . "kolayca kandırıldığını" söylemek oldukça dramatiktir, başarısız olduğu "patolojik" durumlar vardır, ancak bunlar tipik olarak "çelişkilidir" ... soru algoritmanın karmaşıklığını incelemekti ve ampirik analiz kilit bir özelliktir / bu açı, ve belli ki değil tek açı vb ...
vzn

0

Fib (n) 'nin sonucu 1'i döndüren tüm özyinelemeli çağrıların toplamıdır. Bu nedenle fib (1)' i değerlendiren tam olarak fib (n) özyinelemeli çağrılar vardır. Böylece uygulama süresi Ω (fib (n)); 0 döndüren çağrıların ve diğer özyinelemeli çağrıların buna önemli ölçüde eklenmediğini göstermeniz gerekir.

Aynı akıl yürütme, 1 veya 0 döndüren özyinelemeli olarak tanımlanan herhangi bir işlev veya başka bir özyinelemeli çağrının sonucu için de geçerlidir.


Ω

Cevabınızı güçlü bir şekilde hissediyorsanız cevabı düzenlemekten çekinmeyin.
gnasher729

0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.