本章其實只講了乙個問題,那就是如何從乙個陣列當中用線性時間內找出第i個小的元素。
最小值和最大值
這個就比較簡單了,直接挨個比,執行時間就是線性的,而且這就是最好的辦法。
如何同時找出最小值和最大值咧?這個其實也簡單,那就記錄兩個資料唄。執行時間是找單個的兩倍。
但是這個就不是最好的辦法了。有乙個比這個更好的方法。上面的辦法是每乙個元素需要比較兩次,
而下面的方法是每兩個元素需要比較三次。比上乙個好一點
那就是我們不去乙個乙個比較,而是一對一對的比較,然後把小的跟最小值比較,大的跟最大值比較。厲害吧。
期望線性時間內的選擇問題(這個翻譯總感覺不通順)平均情況嘛θ(
n2)
用的核心思想是分治法。最壞的情況下執行時間是 θ(
n2)
上偽**
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 < k
then
return randomized-select(a,p,q-1,i)
else
return randomized-select(a,q+1,r,i-k)
最壞的情況下以線性時間執行
上面的演算法在最壞的情況下的執行時間是θ(
n2) ,原因就是我們在最不幸運的時候每次劃分
然後出現一邊沒有元素,一邊n-1個元素的情況。這裡就是用一種方法來保證不會出現這種情況。怎麼來了咧
看書吧。。。。
演算法導論 第九章
這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以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...