Co to jest O (log * N) i czym się różni od O (log N)?
Co to jest O (log * N) i czym się różni od O (log N)?
Odpowiedzi:
O( log* N )
jest „ logarytmem iterowanym ”:
W informatyce iterowany logarytm n, zapisany log * n (zwykle czytany jako „log star”), to liczba razy, gdy funkcja logarytm musi być iteracyjnie zastosowana, zanim wynik będzie mniejszy lub równy 1.
O( N log* N )
zanim został ulepszony do O( A N )
, gdzie A jest odwrotną funkcją Ackermanna. Wciąż nie rozumiem tego ostatniego dowodu, ale O( N log* N )
algorytm jest stosunkowo dobry do czytania.
log* N
Nieco to powtórzyć algorytm, który rośnie bardzo powoli, znacznie wolniej niż po prostu log N
. Zasadniczo po prostu powtarzasz „rejestrowanie” odpowiedzi, dopóki nie spadnie poniżej jednego (np .:) log(log(log(...log(N)))
, a liczba razy, którą musiałeś, log()
jest odpowiedzią.
W każdym razie jest to pytanie sprzed pięciu lat na temat Stackoverflow, ale brak kodu? (!) Naprawmy to - oto implementacje dla funkcji rekurencyjnych i iteracyjnych (obie dają ten sam wynik):
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" znany jako "logarytm iterowany"
W prostym słowie możesz założyć log * (n) = log (log (log (..... (log * (n))))
log * (n) jest bardzo potężny.
Przykład:
1) Log * (n) = 5, gdzie n = liczba atomów we wszechświecie
2) Kolorowanie drzewa przy użyciu 3 kolorów można wykonać w log * (n), podczas gdy kolorowanie drzewka 2 kolory są wystarczające, ale złożoność będzie wynosić O (n).
3) Znalezienie triangulacji Delaunaya zbioru punktów ze znajomością minimalnego euklidesowego drzewa rozpinającego: losowy czas O (n log * n).
O(log* N)
Niestety brak odpowiedzi .