n ^ 2 log n Komplexität

8

Ich bin nur ein bisschen verwirrt. Wenn die zeitliche Komplexität eines Algorithmus durch

gegeben ist

Was ist das in großer O-Notation? Nur oder wir behalten das Protokoll?

    
darxsys 02.02.2014, 12:03
quelle

4 Antworten

7

Wenn das die Zeit-Komplexität des Algorithmus ist, dann ist es schon in der großen O-Notation, also, ja, behalten Sie das Protokoll. Asymptotisch gibt es einen Unterschied zwischen O(n^2) und O((n^2)*log(n)) .

    
Martin Dinov 02.02.2014, 12:09
quelle
5

Ein einfacher Weg, die große O-Notation zu verstehen, besteht darin, die tatsächliche Anzahl atomarer Schritte durch den Ausdruck mit dem großen O zu teilen und zu validieren, dass man eine Konstante erhält (oder einen Wert, der kleiner ist als eine Konstante).

zum Beispiel, wenn Ihr Algorithmus 10n²⋅logn Schritte:

10n²⋅logn / n² = 10 log n - & gt; nicht konstant in n - & gt; 10n²⋅log n ist nicht O (n²)

10n²⋅logn / (n²⋅log n) = 10 - & gt; Konstante in n - & gt; 10n²⋅log n ist O (n²⋅logn)

    
zvisofer 02.02.2014 12:19
quelle
2

Sie behalten das Protokoll, da log (n) mit steigendem n zunimmt und Ihre Komplexität insgesamt erhöht, da es multipliziert wird.

Als allgemeine Regel würden Sie nur Konstanten entfernen. Wenn Sie zum Beispiel O (2 * n ^ 2) hätten, würden Sie einfach sagen, dass die Komplexität O (n ^ 2) ist, da die Ausführung auf einer Maschine, die doppelt so leistungsstark ist, die Komplexität nicht beeinflussen sollte.

Wenn Sie die Komplexität O (n ^ 2 + n ^ 2) hätten, würden Sie genauso zu dem obigen Fall kommen und einfach sagen, dass es O (n ^ 2) ist. Da O (log (n)) optimaler ist als O (n ^ 2), würden Sie, wenn Sie O (n ^ 2 + log (n)) hätten, die Komplexität als O (n ^ 2) bezeichnen, weil es noch weniger ist als mit O (2 * n ^ 2).

O (n ^ 2 * log (n)) fällt nicht in die obige Situation, also sollten Sie es nicht vereinfachen.

    
Vlad Schnakovszki 02.02.2014 12:18
quelle
2

Wenn die Komplexität eines Algorithmus = O (n ^ 2) ist, kann es als O (n * n) geschrieben werden. ist es O (n)? Absolut nicht. also ist O (n ^ 2 * logn) nicht O (n ^ 2) .Was du vielleicht wissen willst ist, dass O (n ^ 2 + logn) = O (n ^ 2).

    
tanmoy 04.02.2014 08:20
quelle

Tags und Links