衡量算法好壞的一般標準是漸進表示的時間複雜度。
在n極大的情況下O(n)的算法就沒有O(lgn)的算法好。
因爲n不一定會是非常大,因此常數項可能也會非常重要。這些都是非常明顯的道理。
但是,實際上還有另外一個非常重要的容易忽視的因素。
舉個排序的例子。
我們都知道插入排序算法的複雜度是O(n^2)的,不如很多O(nlgn)的算法快。但是爲什麼我們在碼牌的時候直覺上一定會選擇插入排序算法呢?僅僅是因爲牌的數量少的原因麼?
顯然不是這樣的。
問題的本質在於對計算機來說,比較兩個元素和交換兩個元素的時間是差不多的。但是對於人工來說,比較兩張牌只需要掃一眼。而交換2張牌則需要動手,這是非常消耗時間的操作。而插入排序雖然需要比較很多次,但是真正需要操作牌的次數只需要n-1次。
迷戀算法的誤區在於雖然算法的模板是相同的,但是具體操作的性質可能會隨着事實情況的不同而千差萬別。在一個模型下的分析可能不能適合於另一個模型。
這個還是需要額外注意一下的