Ich weiß, mit O (n) hast du normalerweise eine einzelne Schleife; O (n ^ 2) ist eine Doppelschleife; O (n ^ 3) ist eine Dreifachschleife usw. Wie wäre es mit O (log n)?
Du machst es hier wirklich falsch. Sie versuchen sich zu merken, welcher Big-O-Ausdruck zu einer bestimmten algorithmischen Struktur gehört, aber Sie sollten wirklich nur die Anzahl der Operationen, die der Algorithmus benötigt, hochzählen und diese mit der Größe der Eingabe vergleichen. Ein Algorithmus, der seine gesamte Eingabe durchläuft, hat eine O (n) -Leistung, weil er die Schleife n-mal durchläuft, und nicht, weil er eine einzelne Schleife hat. Hier ist eine einzelne Schleife mit O (log n) -Leistung:
for (i = 0; i < log2(input.count); i++) {
doSomething(...);
}
Jeder Algorithmus, bei dem die Anzahl der erforderlichen Operationen in der Größenordnung des Logarithmus der Größe der Eingabe liegt, ist also O (log n). Aus der Big-O-Analyse geht hervor, wie sich die Ausführungszeit eines Algorithmus im Verhältnis zur Größe der Eingabe ändert: Wenn Sie die Größe der Eingabe verdoppeln, führt der Algorithmus einen weiteren Schritt aus (O (log n)). , doppelt so viele Schritte (O (n)), viermal so viele Schritte (O (n ^ 2)) usw.
Hilft es aus Erfahrung zu wissen, dass Algorithmen, die ihre Eingaben wiederholt partitionieren, normalerweise "log n" als Komponente ihrer Leistung haben? Sicher. Aber suchen Sie nicht nach der Partitionierung und gehen Sie zu dem Schluss, dass die Leistung des Algorithmus O (log n) ist - es könnte sich um etwas wie O (n log n) handeln, was ganz anders ist.