Что такое O (log * N)?

Что такое O(log* N)?

Я знаю большой - О, log* неизвестно.

Ответ 1

O( log* N ) " итерированный логарифм":

В информатике итерированный логарифм n, записанный log * n (обычно читаемый "лог-звезда" ), представляет собой число раз, когда функция логарифма должна быть итеративно применена до того, как результат будет меньше или равен 1.

Ответ 2

Бит log* N - это итерированный алгоритм, который растет очень медленно, намного медленнее, чем просто log N. Вы в основном просто продолжаете итеративно "регистрировать" ответ до тех пор, пока он не станет ниже одного (например: log(log(log(...log(N)))), и количество раз, когда вам приходилось log(), был ответ.

В любом случае, это пятилетний вопрос о Stackoverflow, но не код? (!) Пусть исправить это - вот реализации как для рекурсивных, так и итеративных функций (оба они дают одинаковый результат):

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;
}

Ответ 3

log * (n) - "log Star n" , известный как Итерированный логарифм

В простом слове вы можете считать log * (n) = log (log (log (..... (log * (n))))

log * (n) очень мощный.

Пример:

1) Журнал * (n) = 5 где n = Число атомов во Вселенной

2) Цветовая раскраска деревьев с использованием 3 цветов может быть выполнена в журнале * (n), в то время как окраска цветов дерева 2 достаточно, но сложность будет тогда O (n).

3) Поиск триангуляции Деланея множества точек, знающих евклидово минимальное остовное дерево: рандомизированное время O (n log * n).