2017-01-28 4 views
0

Was die ungünstigste Zeit Komplexität der folgenden ist:Worst-Case-Komplexität für diese Python-Code

def fun(n): 
    count=0 
    i=n 
    while i>0: 
     for j in range(0,i): 
      count+=1 
     i/=2 
    return count 
+2

Nur neugierig, ist dies eine Hausaufgabe Frage. Hast du zuerst versucht, daran zu arbeiten? –

+0

Verwenden Sie Python2 oder Python3? Division funktioniert anders für i/2 wenn ich ganzzahlig ist – Mirac7

+0

sein Python 2.7.12 – xlax

Antwort

0

Worst case Zeitkomplexität, wenn n wirklich große ganze Zahl ist.

O (log (n) * n) (Erraten).

So kam ich zu meiner Schlussfolgerung.

while i>0: 
     ... 
     i/=2 

Dies wird log (n) mal ausgeführt, weil es jedes Mal halbiert wird, wenn es ausgeführt wird.

for j in range(0,i): 

Dies wird n mal zuerst, n/2 mal das 2. mal, und so weiter. Also, für diese Linie Gesamtlaufzeit ist n + n/2 + n/4 .... 1 = (2n-1)

count+=1 

Dies ist ein preiswerter Betrieb so ist O (1).

Somit wird die Gesamtlaufzeit dieser Funktion O (log (n)) * O (2n-1), wenn n eine ganze Zahl ist. Vereinfacht wird O (log (n) * (n)).

+0

sollte es nicht n + n/2 + n/4 .... 1 – xlax

+0

Sorry, ja, danke für die Korrektur mich. Korrigiere es. –

+0

'2n-1' ist die Gesamtzahl der Operationen, die von der inneren Schleife ausgeführt werden, nicht die Anzahl der Operationen, die bei jeder Iteration der äußeren Schleife ausgeführt werden. Daher sollten "2n-1" und "log (n)" hinzugefügt, nicht multipliziert werden. und die gesamte Zeitkomplexität wird "O (n)" sein. Siehe auch: http://stackoverflow.com/questions/41708311/two-loops-but-thetan – Anton