雙層桶 中位數求解

2021-06-26 22:07:13 字數 634 閱讀 2667

fstream操作參考:

題目描述:

101個數([0,1000)之間的數)用雙層桶的方法來計算中位數

分析:1. 分成4個桶即[0,250),[250,500),[500,750),[750,1000),對資料一次遍歷,得到四個桶的內容,分別寫入檔案,以及每個桶的資料量。

2. 假設用b[0-3]儲存,若b[0] = 20,b[1] = 41,b[2] = 20, b[3] = 20,我們知道101個數的中位數是第51大的資料。

3. 假設101個數儲存在a[101]中,那麼可以通過sort(a,a+101),a[50]來得到中位數。

#include #include #include #include #include using namespace std;

// 存放需要找的資料

int a[101];

// 儲存3個桶的大小,初始化為0

int b[4];

// 初始化a陣列,101個數字,中間值應該是50大的值,最大為1000,最小為0

void initialarray()

// 第51個元素為

int v = 51 - presum - 1;

int k = i;

cout<<"b(0-3) "<

動態求解中位數

題意是這樣的,給你乙個序列尋找中位數?其實這個可以轉化為topk問題,但是假如這個陣列不斷的變化呢?這個時候可以考慮使用堆來解決。這是乙個很經典的問題,值得反思和學習。參考這一道題leetcode 295.find median from data stream 雙優先順序佇列 中位數查詢 如下 i...

雙層桶劃分

什麼是雙層桶 事實上,與其說雙層桶劃分是一種資料結構,不如說它是一種演算法設計思想。面對一堆大量的資料我們無法處理的時候,我們可以將其分成乙個個小的單元,然後根據一定的策略來處理這些小單元,從而達到目的。適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址...

中位數的中位數

參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...