2010-03-05 13 views
63

Was ist O(log* N)?Was ist O (log * N)?

Ich weiß Big-Oh, die log* ist unbekannt.

+0

Sagen Sie uns, wo Sie es gefunden haben –

+0

Ähnliche Fragen: http://stackoverflow.com/questions/2307283/what-does-olog-n-mean-exactly Keine Antwort auf 'O (log * N)' leider. – BalusC

+1

Ist diese Frage über den * nach dem Protokoll oder über O() Notation im Allgemeinen? –

Antwort

73

O(log* N) ist "iterated logarithm":

In der Informatik, der iterierten Logarithmus von n, geschrieben log * n (in der Regel "log Stern" lesen), ist die Anzahl der Male der Logarithmus-Funktion iterativ sein muss bevor das Ergebnis angewendet kleiner oder gleich 1.

+8

Das ist wirklich interessant, von dem ich noch nie gehört habe. Q + A +1 jeweils.Ich nehme an, O (log * N) ist für alle Intents und Zwecke O (1). Cool. – Greg

+0

@greg, no log (n) bedeutet, dass mit der Anzahl der Elemente die Zeit langsamer steigt. z.B. 10x so viele Elemente lassen die Funktion nur 2x so lange dauern –

+2

Ich denke, dass ich in der Analyse des Union-Find-Algorithmus zuerst darauf stieß, als es "O (N log * N)" war, bevor es zu "O" (AN) ', wobei A die inverse Ackermann-Funktion ist. Ich verstehe den letzteren Beweis immer noch nicht, aber der "O (N log * N)" - Algorithmus ist ein relativ guter Lesevorgang. – Larry

7

log * (n) - "log Stern n" als

als "iterierten Logarithmus" bekannt ist 210

In einfachen Wort kann man davon ausgehen, log * (n) = log (log (log (..... (log * (n))))

log * (n) sehr mächtig ist.

Beispiel:

1) Log * (n) = 5, wobei n = Anzahl der Atom im Universum

2) Baum Coloring 3 Farben verwendet, kann in log erfolgen * (n) Während der Färbung von Baum 2 Farben ausreichen, wird die Komplexität dann O (n) sein.

3) Finden der Delaunay-Triangulation einer Menge von Punkten mit Kenntnis des euklidischen minimalen Spannbaums: randomisierte O (n log * n) -Zeit.

12

Das log* N Bit ist ein iterierter Algorithmus, der sehr langsam wächst, viel langsamer als nur log N. Sie im Grunde nur iterativ "Logging" die Antwort, bis es unter eins kommt (z. B. log(log(log(...log(N)))), und die Anzahl der Male, die Sie hatten log() ist die Antwort.

Wie auch immer, dies ist eine fünf Jahre alte Frage auf Stackoverflow, aber kein Code Lassen Sie uns das in Ordnung bringen - hier Implementierungen sowohl für die rekursive und iterative Funktionen (sie beide das gleiche Ergebnis)? (!):

public double iteratedLogRecursive(double n, double b) 
{ 
    if (n > 1.0) { 
     return 1.0 + iteratedLogRecursive(Math.Log(n, b),b); 
    } 
    else return 0; 
} 

public int iteratedLogIterative(double n, double b) 
{ 
    int count=0; 
    while (n >= 1) { 
     n = Math.Log(n,b); 
     count++; 
    } 
    return count; 
} 
+1

Wie beantwortet das die Frage? – Maroun

+2

@MarounMaroun: Ich habe den Anfang der Antwort bearbeitet, um mehr Kontext zu geben. Der Code ist die Beschreibung/Definition, nach der er gefragt hat. –

Verwandte Themen