有沒有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

相關文章
相關標籤/搜索