有沒有O(1 / n)算法? 算法
或者其餘任何小於O(1)的東西? less
inline void O0Algorithm() {}
這是一個簡單的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或更少的指令。 函數
在數值分析中,近似算法在近似容差中應具備亞常數漸近複雜度。 this
class Function { public double[] ApproximateSolution(double tolerance) { // if this isn't sub-constant on the parameter, it's rather useless } }
正如已經指出的,除了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
不少人都有正確的答案(不)這是證實它的另外一種方式:爲了擁有一個功能,你必須調用該功能,你必須返回一個答案。 這須要必定的時間。 即便其他的處理花費更少的時間來處理更大的輸入,打印答案(咱們能夠假設是一個單位)至少須要一個恆定的時間。 input