如何求取陣列中第i 小(大)的數,好像就是順序統計了,反正我是這麼理解的。。。
有了順序統計,求取中位數就方便了。假設陣列有n個元素,如果n為奇數,則轉化為求取第(n+1)/2小的元素;如果n為偶數,則轉化為求取第n/2小和第n/2+1小的元素,並取平均值得到。
中位數的好處? 好像是為了解決求平均值時的乙個弊端:如果樣本中有乙個極大值,其它大部分都是普通值,則求出平均值和真實情況相比誤差很大。這時用中位數就比較好。(什麼?極大值正好在陣列中間?那是rp問題,>_<)
********************====
順序統計演算法
********************====
1. 基本思想
參考快速排序中的分治法,快速排序每一輪都將小於哨兵的元素放到哨兵之前,大於哨兵的元素放在哨兵之後。而小於等於哨兵的元素個數n和順序i有聯絡,利用這一點聯絡在**的某一側進行不斷的測試。
2. 演算法描述
和快速排序類似,見本部落格的另外一篇文章「排序演算法總結」。但有一點不明,在程式中標出了,望解答,謝謝。
3. 複雜度
空間複雜度o(1), 時間複雜度為o(n),原因是相對於快速排序,只在劃分的一側進行運算。
4. 演算法實現
templateint partition(t * array, const int low, const int high)
else
}
中位數和順序統計
1.陣列最大值和最小值問題 2.給定陣列a,查詢陣列中第i小的資料 1.1 給定乙個陣列a,如何求得陣列a中的最大元素和最小元素?最直接的演算法顯然就是通過遍歷陣列實現,那麼現在的問題是這個演算法是否是最優的呢?模擬比賽淘汰機制的話,可以看出上面的演算法在比較次數上是最優的。簡單的實現 int ma...
中位數和順序統計學
1 最大值和最小值 對大小為n的陣列求最大值或最小值,僅需比較n 1次即可。minmum a,n min a 0 for i 1 iif a i min a i 對最大值也是如此。若同時取得最大值和最小值,按照上述方法,需比較2 n 1 次。事實上,至多3 2n次即可同時求得最大值和最小值。成對成對...
演算法導論 中位數和順序統計量
在乙個由n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。乙個中位數是它所屬集合的 中點元素 當n為奇數時,中位數是唯一的,位於i n 1 2處 當n為偶數時,存在兩個中位數,分別位於i n 2和i n 2 1處。如果不考慮n的奇偶性,中位數總是出現在i n 1 2 處 下中位數 和i ...