web-dev-qa-db-fra.com

Qu'est-ce que O (log * N)?

Qu'est-ce que O(log* N)?

Je connais grand-Oh, le log* est inconnu.

71
Timmy

O( log* N ) est " logarithme itéré ":

En informatique, le logarithme itéré de n, écrit log * n (généralement lu "log star"), est le nombre de fois que la fonction logarithme doit être itérativement appliquée avant que le résultat soit inférieur ou égal à 1.

79
Larry

Le bit log* N Est un algorithme itéré qui croît très lentement, beaucoup plus lentement que simplement log N. En gros, vous gardez simplement la journalisation itérative de la réponse jusqu'à ce qu'elle soit inférieure à une (par exemple: log(log(log(...log(N)))), et le nombre de fois que vous avez dû log() est la réponse.

Quoi qu'il en soit, c'est une question vieille de cinq ans sur Stackoverflow, mais pas de code? (!) Corrigeons cela - voici des implémentations pour les fonctions récursives et itératives (elles donnent toutes les deux le même résultat):

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;
}
18
Dan W

log * (n) - "log Star n" comme "Logarithme itéré"

Dans Word simple, vous pouvez supposer log * (n) = log (log (log (..... (log * (n)))))

log * (n) est très puissant.

Exemple:

1) Log * (n) = 5 où n = Nombre de atom dans l'univers

2) La coloration de l'arbre en utilisant 3 couleurs peut être effectuée dans log * (n) tandis que la coloration des couleurs de l'arbre 2 est suffisante mais la complexité sera O(n) alors.

) Trouver la triangulation de Delaunay d'un ensemble de points connaissant l'arbre minimal euclidien: temps O (n log * n) randomisé.

7
Manish Kumar