海量資料處理的top K個數的問題

2021-08-02 01:13:25 字數 699 閱讀 1120

這個問題有兩種的思路,第一種是將整個的數組建堆,(時間複雜度是o(n)),再分k次從堆的頂端取值,取完值之後將堆尾的元素放到堆首來下慮(k*logn),總的時間複雜度是(o(n+k*logn)).

//對原始的資料原地建最大堆,時間為o(n),然後提取k次,每次提取時,取第乙個值再下沉,k*logn,總的時間複雜度是o(n+k*logn)

#define length 9

#define get 5

void heapadjust(int *array,int hole,int len)

array[hole] = tmp;

}void swap(int &a,int &b)

int getmin(int *a,int len,int k)

void buildheap(int *a,int len,int k)

int j = len;

//k次迴圈來取最小的資料,

for(int i=k;i>=0;--i,--j) }

void print(int *a,int len)

array[hole] = tmp;

}void swap(int &a,int &b)

int getmin(int *a,int len,int k)

void buildkheap(int *a,int len,int k)

for(i=k;i

海量資料處理 top K

區域性淘汰法 用乙個容器儲存前 10000個數,然後將剩餘的所有數字一一與容器內的最小數字相比,如果所有後續的元素都比容器內的 1000個數還小,那麼容器內的這 10000個數就是最大的 10000個數。如果某一後續元素比容器內的最小數字大,則刪掉容器內最小元素,並將該元素插入容器,最後遍歷完這1億...

海量資料處理 (top K問題)

前兩天面試3面學長問我的這個問題 想說teg的3個面試學長都是好和藹,希望能完成最後一面,各方面原因造成我無比想去鵝場的心已經按捺不住了 這個問題還是建立最小堆比較好一些。先拿10000個數建堆,然後一次新增剩餘元素,如果大於堆頂的數 10000中最小的 將這個數替換堆頂,並調整結構使之仍然是乙個最...

海量資料處理(查重,topk)

求top k 對記憶體有限制的大資料處理 查重 就是在一組海量資料中,查詢重複的資料,一般的解題思路就是雜湊表 名稱特點 unordered set 單重集合,只存放key,不允許key重複 unordered multiset 多重集合,只存放key,允許key重複 unordered map 單...