求中位數總結

2021-09-06 17:52:49 字數 575 閱讀 9480

今天在某個群中看到有人問在流式的資料中如何動態的維護中位數的方法,因為之前看到同學的乙個問題,當時他沒答出來。但是後來了解到類似top(k),last(k)需要用到最大堆,最小堆一樣,中位數需要利用雙堆維護一下。

先複習一下,如果是靜態的資料求取中位數的方法有哪些呢?

(1)排序          

(2)fink-k

這兩種方法不太適合於流式的資料動態變更中位數,所以就引出了雙堆求取中位數的策略:

演算法如下:

1、初始化的時候設定兩個變數分別記錄兩個堆【左堆和右堆】的元素的個數。

2、取第乙個元素【d[0]】作為初始中位數m。

3、迴圈後面的每乙個元素,如果比m大,則插入到右堆,如果比m小,則插入到左堆。

4、.如果此時最小堆和最大堆的元素個數的差值》=2 ,則將m加入到元素個數少的堆中,然後從元素個數多的堆將根節點賦值到m,最後重建兩個最大堆和最小堆,返回到3。

此時,如果想要知道當前的中位數,輸出m即可。

簡單**一下:

Problem B 求中位數

實驗8 problem b 求中位數 description 中位數 medians 是乙個統計學名詞,是指將統計總體當中的各個資料的值按大小順序排列起來,形成乙個數列,處於變數數列中間位置的值就稱為中位數。當資料的項數n為奇數時,處於中間位置的資料值即為中位數 當n為偶數時,中位數則為處於中間位置...

中位數總結

主要是51nod上的中位數 距離之和最小 一 1096 距離之和最小 是一道水題 include include include using std sort int map 10010 int main printf lld ans return0 1096 距離之和最小 二 1108 距離之和最...

求列表中位數Python

給你乙個整數列表l,輸出l的中位數 若結果為小數,則保留一位小數 例如 l 0,1,2,3,4 則輸出 2 題目 於pythontip,中位數的計算取決於元素的個數,如果元素個數為奇數個,直接取中間的下標即可,如果為偶數,需要計算中間兩個的和,再取平均值。但是python需要注意整除和除法與其他語言...