《演算法導論》學習分享 9 中位數和順序統計量

2021-09-24 23:13:02 字數 1300 閱讀 8751

順序統計量,第i個順序統計量指n個元素集合中第i小的元素。

最小值,第1個順序統計量。

最大值,第n個順序統計量。

中位數,第n/2個順序統計量。(若n為偶數,取n/2-1)

我們可以通過一次遍歷陣列,取得最大值或者最小值。

但是若要取得中位數或者其他順序統計量,則沒辦法通過一次遍歷陣列得到。

如果將陣列排序,將可以直接得到中位數或者任意順序統計量。由之前所學的排序演算法可知,時間複雜度最好為θ(n

lg⁡n)

\theta(n\lg n)

θ(nlgn)

利用隨機快速排序的思想,隨機的挑選乙個元素作為主元,並把陣列分為兩側,一側比主元小,一側比主元大,如果主元的位置q就是想找的順序統計量的位置i,則返回主元,否則繼續遞迴的查詢左側陣列或者右側陣列。偽**如下:

這個演算法由幾個大牛共同完成,發布在**time bounds for selection中。

中文描述如下:

練習9.3-6

1. 如果k為1時,返回空陣列

2. 如果k為偶數,找到陣列的中位數,並把陣列分為兩組(比中位數大的一組,比中位數小的一組),遞迴解決這兩個子問題,並把中位數以及兩個字問題的解合併返回

3. 如果k為奇數,找到陣列中間的兩個分位數left和right,並把陣列分出兩組(比left小的一組,比right大的一組),遞迴解決這兩個子問題,並把left right以及兩個字問題的解合併返回

9.3-7

1. 線性時間找到中位數

2. 線性時間算出每個元素和中位數的距離(|x-middle|)

3. 線性時間找到第k小的距離

4. 線性時間找出比k小的距離對應的元素

9.3-8

1. 選擇x y兩陣列的中位數作為主元xk和yk

2. 比較xk和yk,如果xk大於yk,則取xk左側的元素作為新的x陣列(包括x),取yk右側的元素作為新的y陣列(包括y)

3. 重複1 2 兩部,直到每個陣列只剩兩個元素,剩下的四個元素中第二小的便是兩陣列的中位數

github source: 中位數和順序統計量.m

演算法導論 9 中位數和順序統計量

乙個中位數是它所屬集合的中點元素 9.1.1 在乙個有n個元素的集合中,需要做多少次比較才能確定其最小元素呢 9.1.2 同時找到最小值和最大值 實現 同時求解最大值和最小值 123 4567 891011 1213 1415 1617 1819 2021 2223 2425 26 def mini...

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

在乙個由n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。乙個中位數是它所屬集合的 中點元素 當n為奇數時,中位數是唯一的,位於i n 1 2處 當n為偶數時,存在兩個中位數,分別位於i n 2和i n 2 1處。如果不考慮n的奇偶性,中位數總是出現在i n 1 2 處 下中位數 和i ...

演算法導論學習筆記7 中位數和順序統計量

在乙個n nn個元素的集合中,至少需要做n 1 n 1n 1次比較才能確定其最小元素或最大元素。下面的偽 給出了最樸素的一種方式 minmum a min a 1 for i 2 to a.length if min a i min a i return min當需要同時確定最大最小值時,如果利用上...