算法複雜度衡量算法好壞的誤區

衡量算法好壞的一般標準是漸進表示的時間複雜度。

在n極大的情況下O(n)的算法就沒有O(lgn)的算法好。

因爲n不一定會是非常大,因此常數項可能也會非常重要。這些都是非常明顯的道理。

但是,實際上還有另外一個非常重要的容易忽視的因素。

舉個排序的例子。

我們都知道插入排序算法的複雜度是O(n^2)的,不如很多O(nlgn)的算法快。但是爲什麼我們在碼牌的時候直覺上一定會選擇插入排序算法呢?僅僅是因爲牌的數量少的原因麼?

顯然不是這樣的。

問題的本質在於對計算機來說,比較兩個元素和交換兩個元素的時間是差不多的。但是對於人工來說,比較兩張牌只需要掃一眼。而交換2張牌則需要動手,這是非常消耗時間的操作。而插入排序雖然需要比較很多次,但是真正需要操作牌的次數只需要n-1次。

迷戀算法的誤區在於雖然算法的模板是相同的,但是具體操作的性質可能會隨着事實情況的不同而千差萬別。在一個模型下的分析可能不能適合於另一個模型。

這個還是需要額外注意一下的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章