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 線性...