Was ist O (log * N) und wie unterscheidet es sich von O (log N)?
Was ist O (log * N) und wie unterscheidet es sich von O (log N)?
Antworten:
O( log* N )
ist " iterierter Logarithmus ":
In der Informatik ist der iterierte Logarithmus von n, geschriebenes log * n (normalerweise "loger Stern"), die Häufigkeit, mit der die Logarithmusfunktion iterativ angewendet werden muss, bevor das Ergebnis kleiner oder gleich 1 ist.
O( N log* N )
vor seiner Verbesserung auf O( A N )
A umgestellt wurde , wobei A die inverse Ackermann-Funktion ist. Ich verstehe den letzteren Beweis immer noch nicht, aber der O( N log* N )
Algorithmus ist eine relativ gute Lektüre.
Das log* N
Bit ist ein iterierter Algorithmus, der sehr langsam wächst, viel langsamer als nur log N
. Sie protokollieren die Antwort im Grunde nur iterativ, bis sie unter eins log(log(log(...log(N)))
fällt (zB :) , und die Häufigkeit, mit der Sie log()
die Antwort benötigen, ist die Antwort.
Wie auch immer, dies ist eine fünf Jahre alte Frage zu Stackoverflow, aber kein Code? (!) Lassen Sie uns das beheben - hier sind Implementierungen für die rekursiven und iterativen Funktionen (beide liefern 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;
}
log * (n) - "log Star n" , bekannt als "Iterierter Logarithmus"
In einfachen Worten können Sie log * (n) = log (log (log (..... (log * (n)))) annehmen.
log * (n) ist sehr mächtig.
Beispiel:
1) Log * (n) = 5 wobei n = Anzahl der Atome im Universum
2) Das Färben von Bäumen mit 3 Farben kann in log * (n) erfolgen, während das Färben von Baum 2-Farben ausreicht, die Komplexität dann jedoch O (n) beträgt.
3) Finden der Delaunay-Triangulation einer Menge von Punkten, die den euklidischen minimalen Spannbaum kennen: randomisierte O (n log * n) -Zeit.
O(log* N)
.