算法設計與分析課程複習筆記6——統計算法

算法設計與分析課程複習筆記6——統計算法

統計算法

修路問題

Given (x,y) coordinates of N houses, where should you build road parallel to x-axis to minimize construction cost of building driveways?
修路問題
修路問題解決
最終正確的解決方案:將街道置於Y座標的中間

序列統計

  • 求極大和極小
  • 求第k小元素

求極小或極大
Minimum(A)
min←A[1]
for i=2……n
 do if A[i] < min
  then min ← A[i]
return min

Lemma: The minimum or maximum of a set of n elements can be found using n – 1 comparisons.(通過n-1次比較能找到n個元素的極大或極小)

同時求極大和極小
簡單答案:極大和極小可通過2n-2次比較得到
更好的辦法:
Min-Max(A)
 for i = 1…n / 2
  do if A[2i – 1] ≤ A[2i]
   then B[i] ← A[2i – 1]
     C[i] ← A[2i]
   else B[i] ← A[2i]
     C[i] ← A[2i – 1]
 min ← Minimum(B)
 max ← Maximum(C)
 return (min, max)

n/2次得到B和C,從B中找到最小的,從C中找到最大的。
總共比較次數:3n/2-2

從序列中選出第i小元素
想法:
用快速排序中的分割算法對序列進行分割
在分割後的一邊尋找第i小元素,需要與分割中心位置比較
第i小
時間開銷:
可以以Θ(n)開銷完成

隨機選擇算法
RANDOMIZED-SELECT(A, p, r, i )
if p = r
 then return A[p]
q ←RANDOMIZED-PARTITION(A, p, r) (返回值)
k ← q - p + 1 (分割中心所在位置)
if i = k            //pivot value is the answer
 then return A[q]
else if i < k
 then return RANDOMIZED-SELECT(A, p, q-1, i )
else return RANDOMIZED-SELECT(A, q + 1, r, i-k)

分析:
最壞情況: 以最大或最小爲分割中心,分隔開銷Θ(n)
T(n)=O(1)[]+Θ(n)[]+T(n1)=1+n+T(n1)=Θ(n2)T(n)=O(1)[選擇分割中心]+Θ(n)[分割]+T(n-1)=1+n+T(n-1)=Θ(n^2)
平均情況:
E[T(n)]2nk=n/2n1[T(k)]+O(n)E[T(n)]\leq \frac2n\sum_{k=\lfloor{n/2}\rfloor}^{n-1}[T(k)]+O(n)

更好的選擇算法
在最壞情況下選擇開銷爲O(n)
採用改進的分割方法,不再是以序列的最後一個元素爲分割中心

  1. 分成\lceiln/5\rceil
  2. 找到每組的中值
  3. 找到\lceiln/5\rceil組中值的中值x
  4. 運用改進的分割算法在x處分割
  5. 如果i=k,返回x結束;否則,在左右遞歸求解

example:
尋找第6小的元素
A = {12, 34, 0, 3, 22, 4, 17, 32, 3, 28, 43, 82, 25, 27,
34, 2 ,19 ,12 ,5 ,18 ,20 ,33, 16, 33, 21, 30, 3, 47}

1.分成\lceiln/5\rceil組。

1️⃣12,34,0,3,22
2️⃣4,17,32,3,28
3️⃣43,82,25,27,34
4️⃣2,19,12,5,18
5️⃣20,33,16,33,21
6️⃣30,3,47

2.找到每組的中值。

1️⃣0,3,12,22,34
2️⃣3,4,17,28,32
3️⃣25,27,34,43,82
4️⃣2,5,12,18,19
5️⃣16,20,21,33,33
6️⃣3,30,47

3.找到\lceiln/5\rceil組中值的中值x。

12,12,17,21,30,34

4. 運用改進的分割算法在x處分割。

第一部分:12, 0, 3, 4, 3, 2, 12, 5, 16, 3
pivot:17【position of the pivot is q = 11】
第二部分:34, 22, 32, 28, 43, 82, 25, 27, 34, 19, 18, 20, 33, 33, 21, 30, 47

5.在第一部分遞歸求解。

1.O(n)
2.O(n)
3.T(\lceiln/5\rceil)
4.O(n)
5.≤ T(7n/10 + 6)——閱讀教材

T(n)=T(\lceiln/5\rceil)+T(7n/10 + 6)+O(n)
T(n)=O(n)T(n)=O(n)

參考:任課教師邱德紅教授的課件

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