什么是O(log * N)?

时间:2010-03-05 15:06:06

标签: algorithm complexity-theory logarithm iterated-function

什么是O(log* N)

我知道很大哦,log*未知。

3 个答案:

答案 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)时间。