演算法導論學習筆記 第九章 中位數和順序統計學

2021-05-22 17:13:11 字數 1619 閱讀 6747

總結:這一章講了找最大值、最小值的方法,介紹了以期望線性時間找第

i小的數的方法,以及以最壞情況線性時間找第

i小的數的方法。

1.

最大值和最小值

找最小值,遍歷一遍即可

偽**minimum(a)

min <- a[1]

for i <- 2 to length[a]

do if min > a[i]

then min <- a[i]

return min

若要同時比較最大值和最小值,可以設兩個變數

max, min

,再將a

兩兩一對,先兩個比對一下,將小的與

min比較,大的與

max比較,這樣比較次數最多是

3[n/2]

2.

以期望線性時間做選擇

利用快排中的

randomized-partition,

它返回a

中的第i

小的元素

演算法分析:平均情況下

o(n)

,最壞情況

o(n^2)

偽**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

then return a[q]

elseif i

then return randomized-select(a, p, q-1, i)

else

return randomized-select(a, q+1, r, i-k)

3.

以最壞情況線性時間做選擇

演算法select

,最壞情況執行時間

o(n)

執行步驟:

1)將輸入陣列的

n個元素劃分為

[n/5]

組,每組

5個元素,且至多只有乙個組由剩下的

n mod5

個元素組成。

2)尋找

[n/5]

個組中每一組的中位數。首先對每組中的元素進行插入排序,然後從排序過的序列中選出中位數。

3)對第

2步中找出的

[n/5]

個中位數,遞迴呼叫

select

以找出其中位數x

4)利用修改過的

partition

過程,按中位數的中位數

x對輸入陣列進行劃分。設x是第

k小的元素。

5)如果

i=k,則返回

x。否則,如果

i,則在低區遞迴呼叫

select

以找出第

i小的元素,如果

i>k

,則在高區遞迴呼叫

select

以找出第

i-k個最小元素。

演算法導論 第九章

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

演算法導論第九章 中位數和順序統計量

9.1 最小值和最大值 遍歷陣列,線性時間求最小值 int minimun int a 兩兩相比,3n 2次比較即可求最小值和最大值 void minandmax int a,int min,int max 如果n是偶數 else 成對地處理餘下的元素 for i length a i i 2 9....

演算法導論 第九章 中位數和順序統計量

def 第i個順序統計量,是該集合中第i小的元素。def 選擇問題 輸入,乙個包含n個數的集合a,和乙個整數i,1 i n。輸出,元素x屬於a,且a中恰好有i 1個其他元素小於它。9.1 最大值和最小值 尋找乙個陣列中的最大值和最小值需要經過n 1次比較找到 def minimum a mini a...