什么是O(log* N)
?
我知道很大哦,log*
未知。
答案 0 :(得分:77)
O( log* N )
是“iterated logarithm”:
在计算机科学中,n的迭代对数,写入log * n(通常称为“log star”),是在结果小于或等于1之前必须迭代地应用对数函数的次数。 / p>
答案 1 :(得分:18)
log* N
位是一种迭代算法,其生长速度非常慢,比log N
慢得多。你基本上只是反复地记录'记录'答案直到低于1(例如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;
}
答案 2 :(得分:7)
log *(n) - "记录星号n" ,称为"迭代对数"
简单来说,你可以假设log *(n)= log(log(log(.....(log *(n))))
log *(n)非常强大。
示例:强>
1) Log *(n)= 5其中n =宇宙中的原子数
2)使用3种颜色的树着色可以在log *(n)中完成,而着色树2的颜色就足够了,但复杂度将是O(n)。
3)找到知道欧几里德最小生成树的一组点的Delaunay三角剖分:随机O(n log * n)时间。