演算法導論8 4

2021-07-02 18:46:52 字數 628 閱讀 1872

問題:n個紅色水壺和n個藍色水壺,相同顏色水壺可盛的水都不一樣多,但每乙個紅色水壺都有乙個對應的藍色水壺,二者可盛的水一樣多。不同顏色的水壺可以互相比較判斷可盛的水是否一樣多。但是相同顏色的水壺不能相互比較。設計乙個隨機演算法,其期望的比較次數為o(nlgn).

思路:紅色水壺和藍色水壺比較,可在找到與其容量一樣多的藍色水壺的同時將剩下的藍色水壺分為兩組:容量比它大的和容量比它小的;

利用找到的相同容量的藍色水壺可以反過來與剩下的紅色水壺比較,將紅色水壺也分為兩組:容量比它大的和容量比它小的;

偽**:

match(red,blue,p,r)

1.let c[p,...,r] be a new array//記錄配對資訊

2.if red.length==1

3. c[p]=p

4.i=random(p,r)

5.q=fast-sort(blue,p,r,red[i])//以red[i]為主元快排blue

6.fast-sort(red,p,r,blue[q])//以blue[q] 為主元快排red

7.match(red,blue,p,q-1)

8.match(red,blue,q+1,r)

演算法導論8 4

本小節介紹了桶排序,桶排序是將元素按照規則放在乙個個遞增區間內,區間之間是遞增的,區間內部也是遞增的,最後依次合併區間得到次序 具體過程如下 偽 如下 bucket sort a n a.length let b 0.n 1 be a new array for i 0 to n 1 make b ...

演算法導論 思考題 8 4

寫一下我的思路,大概是對的,詳細證明不出來。設藍色水壺為a,紅色為b 先取乙個a1,對所有的b做一次比較,可以將b分為兩個部分,一部分大於a1,一部分小於a1 再取乙個a2,將b分為三個部分 再取a3,將b分為四個部分 假設現在b被分成了k個部分,b1,b2,b3.bk,每次取ai,都從b集合的一半...

演算法導論 隨機演算法

一.概率分布 對於有些問題本身是屬於概率問題,如僱傭問題 對於此類問題,我們需要利用概率分析來得到演算法的執行時間,有時也用來分析其他的量。例如,僱傭問題中的費用問題也需要結合概率分析來計算得到。為了使用概率分析,我們必須使用或者假設已知關於輸入的概率分布,然後通過分析該演算法計算出平均情況下的執行...