Evet, en az en kötü durum analizi'un altında haklısınız.
Bazı doğal k
için, n = 2^k
için, stop deyimine erişme dışında durumun her zaman doğru olduğunu ve yineleme işlevinin iki kez çalıştırılacağını unutmayın. olduğunun tespit edilmesi
, analiz için yeterlidir:
X
bazı sabittir
T(n) = T(n/2) + T(n/2) + X
, (diğer tekrarlanan aramalara görmezden eğer her tekrarlayan çağrı, işin sürekli miktarda alır). ile master theorem case 1 itibaren
:
f(n) = X
a = 2, b = 2, c = 0 (since X is in O(n^0)=O(1))
Ve c=0 < 1 = log_2(2)
beri durumda 1 için koşullar geçerlidir ve biz T(n)
olan işlevi sonucuna varabiliriz Theta(n^log_2(2)) = Theta(n)
Ortalama vaka analizi:
Ortalama durumda, eşit dağıtılmış bir sayı n
ile, ikilideki bitlerin yarısı temsil eder. Bu sayının oranı artar (1) ve yarı 'aşağı' olur (0). 2'ye bölünüp yana
temelde aritmetik kaydırma doğru olduğunu ve en az önemli bit 0 olması durumunda ve bu ortalama karmaşıklığı fonksiyonudur anlamına geliyorsa koşul isEven(n)
doğrudur: Yani
T(n) = 0.5 T(n/2) + 0.5 * 2 T(n/2) + X = 0.5 * 3 * T(n/2) + X
= 1.5 * T(n/2) + X
a = 3/2, b = 2, c = 0
:
T(n) = 3/2 T(n/2) + X
Örnek 1 halen (sabit X
varsayılarak) uygular
Bu gerçekten tüm aritmetiği O(1)
varsayar:
ve Theta(n^log_1.5(2))~=Theta(n^0.58)
Hızlı Not ortalama vaka karmaşıklığını olsun. Eğer durum bu değilse (çok büyük sayılar), T(n)
tanımındaki sabitlik yerine karmaşıklıklarını koymanız ve yeniden analiz etmeniz gerekir. Her böyle bir işlemin, alt-lineer olduğu (sayıyı temsil eden bitlerin değil) olduğu varsayılırsa, ana teorinin 1. hali hala geçerli olduğundan, sonuç Theta(n)
olarak kalır. (Ortalama durum için, 'dan daha iyi olan herhangi bir işlev için
not. 'A = pow (x, n/2); a * a; ' – karakfa
geri dön Evet, biliyorum ama kitap, bu algoritmanın verimliliğini sorarak kavramı anlayıp anlamadığımızı görmek için test ediyordu. O (N) 'yi düzeltebilir miyim? –