演算法導論讀後感 之同時查詢最大數與最小數

2021-08-10 16:27:59 字數 520 閱讀 3821

在陣列中查詢最大數與最小數,通常的做法需要遍歷兩次陣列,進行2n次比較。但在演算法導論中,介紹了乙個更為高效的演算法,只需要比較3*n/2次。雖然兩種演算法均為線性複雜度,但效率仍然可提高25%。

其思想為將陣列中的元素成對處理,每次處理兩個元素,進行1次比較,將大的數和最大值比較,將小的數和最小值比較,因此,處理兩個元素,進行了3次比較。比原來每個數要比較1次最大值1次最小值就有提公升。具體演算法**如下:

void randomselect::selectmaxandmin(int

*a, int

length, int &maxindex, int &minindex)

if (a[2

*i + 1] > maxvalue)

}else

if (a[2

*i + 1] < minvalue)}}

if (length % 2 == 1)

if (a[length - 1] < minvalue)

}}

演算法導論讀後感 之紅黑樹的性質

紅黑樹是具有下列性質的二叉搜尋樹 1.每個節點或是紅色的,或是黑色的。2.根節點是黑色的。3.每個葉節點 nil 是黑色的。注意,這裡的葉節點均為外部節點。4.如果乙個節點是紅色的,則它的兩個子節點都是黑色的。5.對每個節點,從該節點到其所有後代的簡單路徑上,均包含相同數目的黑色節點。從某個節點x出...

演算法導論分治法 最大陣列問題

自己寫了半個小時沒有耐心寫下去了就查了查這個演算法到底是怎麼寫的,剛開始看偽 能看的懂,但是就是寫不出來 這是我原來寫的 剛開始寫的第乙個函式但是寫到遞迴就開始亂了。include include using namespace std typedef std vectornpt void find...

同時尋找最大數和最小數的最優演算法

我們知道,在乙個容量為n的資料集合中尋找乙個最大數,不管用什麼樣的比較演算法,至少要比較n 1次,就算是用競標賽排序也得比較n 1次,否則你找到的就不能保證是最大的數。那麼,在乙個容量為n的資料集合中同時尋找最大數和最小數的最小比較次數是多少呢?從乙個容量為n的資料集合中同時找到最大數和最小數的最優...