演算法導論 八 九章

2021-06-12 02:40:58 字數 1202 閱讀 6962

第八章:線性時間排序

比較排序的時間下界是:o(n lg n)

因此該章講述的都不是基於比較的排序

記數排序:假設n 個輸入元素介於0-k之間

counting-sort(a,b,k) //存放於b中

for (i = 0 ; i <= k ; i ++) c[i]m = 0;

for (i = 1; i <= length[a]; i ++)c[ a[i] ] ++;

for (i = 1; i <= k; i ++) c[i] = c[i] + c[i - 1];  //包含小於等於i的元素個數

for( i =1; j <= length[a]; i ++)[

b[ c[ a[i] ] ] = a[i];

c[ a[i] ] --;

}//o(n)  while k~o(n)

基數排序:

radix-sort(a, d)//d是數字的位數

for(i = 1; i <= d; i++)

use counting-sort to sort array a on digit i;

//o(n)

需要把高位相同的分成一組比較,而不能一起比較了

桶排序:

bucket-sort(a)//注意,它的期望執行時間是o(n)

第九章:中位數和順序統計學

研究:輸入:乙個包含n個不同的數的幾何a和乙個數i, 1<= i <= n

輸出:a中元素x,它恰好大於a中其他 i - 1 個元素(第i個順序統計量)

最大值,最小值 o(n)

同時求 o(n)

這裡寫一下同時求的演算法

max-min(a)

else

for(i = begin; i < n; i+=2)// 3*n/2

用線性時間求第i個順序統計量

randomized-select(a, p, r, i){

if(p == r)return a[p]

q = ramdom-partition(a, p, r);

k = q - p + 1;

if( k == i)return a[q];

else if(i < k) return ramdomized-select(a, ,p , q - 1 , i );

else return ramdomized-select(a, ,q +1 , r , i );

演算法導論 第九章

這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以2分序列,這樣會有更好的效率。這章主要介紹如何不排序來找到序列的順序,由於不需要排序,可以減少很多比較的操作,最終可以獲得一些線性的演算法,得到排名第i的數字。演算法的基礎是首先...

第八,九章 BOM,客戶端檢測

bom的核心物件是window,表示瀏覽器的乙個例項。在網頁上,將window看作global物件。moveto 10,10 moveby 10,10 移動瀏覽器視窗到螢幕位置 設定瀏覽器頁面視口大小 clientwidth與clientheight window.open 開啟新視窗 有彈窗安全限...

演算法導論第十九章二項堆

自己寫的bug應該很多 binheapnode.h includeusing namespace std class binheap class binheapnode binheapnode void destory binheap.h include binheapnode.h class bi...