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
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
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)).
sollte es nicht n + n/2 + n/4 .... 1 – xlax
Sorry, ja, danke für die Korrektur mich. Korrigiere es. –
'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
Nur neugierig, ist dies eine Hausaufgabe Frage. Hast du zuerst versucht, daran zu arbeiten? –
Verwenden Sie Python2 oder Python3? Division funktioniert anders für i/2 wenn ich ganzzahlig ist – Mirac7
sein Python 2.7.12 – xlax