Als Alternative verwenden, um eine variable Substitution y = n - x
von Sigma-Notation folgt die Anzahl der Iterationen der inneren while
Schleife des Algorithmus zu analysieren, . die Anzahl der Iterationen durch 1
für Fälle
Die obigen Überschätzungen für jeden inneren While-Schleife, wo n-1
nicht ein Vielfaches von i
ist, das heißt, wo (n-1) % i != 0
. Wenn wir fortfahren, nehmen wir an, dass (n-1)/i
eine ganze Zahl für alle Werte von i
ist, und überschätzt daher die Gesamtzahl der Iterationen in der inneren while
Schleife, die nachfolgend das kleinere oder gleiche Vorzeichen bei (i)
enthält. Wir gehen mit der Notation Analyse Sigma:
, wo wir bei (ii)
, die n
angenähert haben: th harmonic number durch das zugehörige Integral. Daher läuft Ihr Algorithmus asymptotisch in O(n·ln(n))
.
Asymptotik Weggehen und die tatsächliche Wachstum des Algorithmus zu studieren, können wir die schönen Beispieldaten exakter (n,cnt)
(wo cnt
ist die Anzahl der inneren Iterationen) Paare von @chux (siehe seine Antwort) verwenden und vergleichen mit der geschätzten Anzahl von Iterationen von oben, dh n(1+ln(n))-ln(n)
. Es ist offensichtlich, dass die Schätzung harmonisch mit der tatsächlichen Zählung harmoniert, siehe die folgenden Diagramme oder this snippet for the actual numbers.
Schließlich ist zu beachten, dass, wenn wir n->∞
in der Summe über 1/i
oben lassen, ist die resultierende Serie ist die infinite harmonic series, das ist merkwürdigerweise divergent. Der Beweis für letzteres macht Gebrauch von der Tatsache, dass in unendlicher Summe von Nicht-Null-Termen natürlich selbst unendlich ist. In der Praxis ist jedoch für eine ausreichend große, aber nicht unendliche n, ln(n)
eine geeignete Approximation der Summe, und diese Divergenz ist hier für unsere asymptotische Analyse nicht relevant.
IMHO ist kein Duplikat von Plain Englisch Erklärung von Big O überhaupt. OP weiß, was Big O ist und sie/er bittet in einem bestimmten Fall um die richtige Bewertung. –
Da es keinen Rückgabewert und keine Nebeneffekte gibt, können wir sicher sein, dass der Compiler sie nicht optimiert? – jpmc26
Woah .. würdest du erwarten, dass solch eine Frage eine solche Punktzahl bekommt? Mysteries of SO ... –