2016-05-06 5 views

Antwort

1

Ihre zweite Formel hat O(1) Komplexität, das heißt, es läuft in konstanter Zeit, unabhängig von n.

Es gibt keinen Widerspruch. Die Komplexität ist ein Maß dafür, wie lange der Algorithmus zum Ausführen benötigt. Verschiedene Algorithmen können dasselbe Ergebnis mit unterschiedlichen Geschwindigkeiten berechnen.

[BTW die richtige Formel ist n*(n+1)/2.]

Edit: Vielleicht ist Ihre Verwirrung mit einem Algorithmus zu tun hat, die n*(n+1)/2 Schritte unternimmt, die (n^2 + n)/2 Schritte ist. Wir nennen das O(n^2), weil es im Wesentlichen (asymptotisch) wie n^2 wächst, wenn n groß wird. Das heißt, es wächst in der Größenordnung vonn^2, der Term hoher Ordnung des Polynoms.

+0

bedeutet, dass Sie sagen, dass in der Formel (n (n + 1)/2) Entschuldigung für Minuszeichen) n wird nicht als Algorithmus-Eingabegröße betrachtet. aber beachte nur die letzte Zahl. – amit

+1

Unterscheiden Sie die Mathematik, die das Programm berechnet, von der Mathematik, die wir verwenden, um zu analysieren, wie lange es dauert, um zu laufen. Ein Programm, das 'n' Zahlen addiert, nimmt' n' Schritte, unabhängig von den Zahlen (unter der Annahme einer Ganzzahlmathematik mit fester Breite). Das ist 'O (n)' Komplexität. Ein Programm, das jede von "n" Zahlen miteinander vergleicht, wird "n * (n + 1)/2" Schritte annehmen, was "0 (n^2)" Schritte [in der Größenordnung von n^2] seit 'ist n^2 'ist eine gute Näherung dafür, wie schnell' n * (n + 1)/2 'wächst, wenn' n 'groß ist. Siehe http://stackoverflow.com/a/487278/1682419 für ein Diagramm, das den dramatischen Unterschied zwischen Big-O-Komplexitäten zeigt. – Jerry101

+0

ya ... es ist wahr ... übrigens danke ... für eine schnelle Antwort ... es ist jetzt klar ... – amit

2

Sie sind verwirrt, was die Zahlen darstellen.

Grundsätzlich zählen wir die # Schritte, wenn wir über Komplexität sprechen.

n(n+1)/2 die Antwort der Summation ist (1..n), das ist richtig, aber unterschiedliche Art und Weise anders # nehmen von es zu berechnen, die Schritte, und wir werden die # solcher Schritte zu zählen.

Vergleichen Sie die folgenden:

int ans = 0; 
for(int i=1; i<=n;i++) ans += i; 
// this use n steps only 

int ans2 = 0; 
ans2 = n*(n+1)/2; 
// this use 1 step!! 

int ans3 = 0; 
for(int i=1, mx = n*(n+1)/2; i<=mx; i++) ans3++; 
// this takes n*(n+1)/2 step 
// You were thinking the formula would look like this when translated into code! 

Alle drei Antworten den gleichen Wert geben!

So können Sie nur die erste Methode siehe & die dritte Methode (was natürlich überhaupt nicht praktisch) von n, unterschiedliche n betroffen ist, wird sie nehmen unterschiedliche Schritte führen, während das zweite Verfahren, das die Formel verwendet, nehmen immer 1 Schritt, egal was n

Being sagte ist, wenn Sie die Formel im Voraus wissen, es ist immer das beste, was Sie berechnen nur die Antwort direkt mit der Formel

Verwandte Themen