有没有O(1 / n)算法?

有没有O(1 / n)算法? 算法

或者其余任何小于O(1)的东西? less


#1楼

inline void O0Algorithm() {}

#2楼

这是一个简单的O(1 / n)算法。 它甚至作了一些有趣的事情! dom

function foo(list input) {
  int m;
  double output;

  m = (1/ input.size) * max_value;  
  output = 0;
  for (int i = 0; i < m; i++)
    output+= random(0,1);

  return output;
}

O(1 / n)是可能的,由于它描述了在增长输入大小的状况下函数输出如何变化。 若是咱们使用函数1 / n来描述函数执行的指令数,则不要求函数对任何输入大小采用零指令。 相反,对于每一个输入大小,n高于某个阈值,所需的指令数量高于正常数乘以1 / n。 因为没有实际数字,其中1 / n为0,而且常数为正,所以没有理由将该函数约束为采用0或更少的指令。 函数


#3楼

在数值分析中,近似算法在近似容差中应具备亚常数渐近复杂度。 this

class Function
{
    public double[] ApproximateSolution(double tolerance)
    {
        // if this isn't sub-constant on the parameter, it's rather useless
    }
}

#4楼

正如已经指出的,除了null函数可能的例外以外,不能有O(1/n)函数,由于所花费的时间必须接近0。 spa

固然,有一些算法,好比Konrad定义的算法,看起来它们至少在某种程度上应该小于O(1)code

def get_faster(list):
    how_long = 1/len(list)
    sleep(how_long)

若是您想研究这些算法,您应该定义本身的渐近测量,或者您本身的时间概念。 例如,在上面的算法中,我能够容许使用必定次数的“自由”操做。 在上面的算法中,若是我经过排除除睡眠以外的全部时间来定义t',那么t'= 1 / n,即O(1 / n)。 可能有更好的例子,由于渐近行为是微不足道的。 事实上,我确信那里的某我的能够想出能给出非平凡结果的感官。 get


#5楼

不少人都有正确的答案(不)这是证实它的另外一种方式:为了拥有一个功能,你必须调用该功能,你必须返回一个答案。 这须要必定的时间。 即便其他的处理花费更少的时间来处理更大的输入,打印答案(咱们能够假设是一个单位)至少须要一个恒定的时间。 input

相关文章
相关标签/搜索