Coursera Algorithms, Part 1 Week 1: Analysis of Algorithm

這一部分主要是算法理論上的分析,包括時間和空間的複雜度,僅僅找了一個比較有意思的例子來設計算法。


問題:給定N個不同的整數,計算有多少這樣的組合使得其中三個數之和爲0。


暴力的O(N^3)算法就不說了,下面來看個另外一種的算法。


(1)對於這N個不同的數,先將這N個數進行排序,O(N*lgN)

(2)找出所有的兩個數的組合(ai, aj) 0<=i, j<=N-1且i!=j,對每一對(ai, aj),計算-(ai+aj)的值,O(N^2)

(3)對於每一個-(ai+aj)的值,在已經排序的序列中二分查找,確定是否存在該值,存在的話,計數加一,O(lgN)

(4)爲避免重複計數,可以增加判斷條件,O(1)

算法的複雜度從O(N^3)降到O(N^2*lgN)


還是那句話,每天積累一點點,總會有牛逼的一天的!


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