2016-11-03 5 views
0

Betrachten wir diese drei SchleifenGrundlegende Zeit Komplexität?

O (N^2)

int i = 0, s = 0; 
while (2*i <= N*N) { 
s+=i; 
i++; 
} 

O (N)

int i = 0, s = 0; 
while (s <= N*N) { 
s+=i; 
i++; 
} 

O (sqrt (N))

int i = 0, s=0, p=1; 
while (s < N) { 
i++; 
p = p*i; 
s += i; 
} 

Die Zeitkomplexität der ersten ist O (N^2), aber die zweite ist O (N) (mir scheint, dass N^2 geeigneter wäre). Woher? Zusätzlich, warum ist Schleife drei sqrt (N) und nicht log (N) - wie kann ich den Unterschied feststellen?

+0

Dreieckszahlen. – EOF

+0

Also dreieckige Zahl Iterationen bis N * N = O (N) und Dreieckszahl Iterationen bis N = O (sqrt (N)? – Aldo

+0

) Muss ich * wirklich * dies buchstabieren? Betrachten Sie, wie die n-te Dreieckszahl wächst n erhöht – EOF

Antwort

1

Zum zweiten: Lassen Sie sagen, die Iterationen k dann wird die Schleife für wiederholt werden wird:

1+2+3+...k <= N^2 --> k*(k-1)/2 <= N^2 --> k^2 <= N^2 --> k is O(N). 

Zum dritten: Lassen Sie sagen, die Iterationen k sein wird, dann wird die Schleife für wiederholt werden :

1+2+3...+k <= N -->...--> k^2 <= N --> k is O(sqrt(N)).