Что такое O(log* N)
?
Я знаю большой - О, log*
неизвестно.
Что такое O(log* N)
?
Я знаю большой - О, log*
неизвестно.
O( log* N )
" итерированный логарифм":
В информатике итерированный логарифм n, записанный log * n (обычно читаемый "лог-звезда" ), представляет собой число раз, когда функция логарифма должна быть итеративно применена до того, как результат будет меньше или равен 1.
Бит 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;
}
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).