10.鞏固學習PriorityQueue類------海量資料處理的 Top K演算法(問題) 小頂堆實現
海量資料處理的 Top K演算法(問題) 小頂堆實現
問題描述:有N(N>>10000)個整數,求出其中的前K個最大的數。(稱作Top k)
問題分析:由於(1)輸入的大量資料;(2)只要前K個。
那麼對整個輸入資料的儲存和排序是非常耗時耗記憶體且沒必要的。
可以利用資料結構的最小堆來處理該問題。
最小堆如圖所示,對於每個非葉子節點的數值,一定不大於孩子節點的數值。這樣可用含有K個節點的最小堆來儲存K個目前的最大值(當然根節點是其中的最小數值)。
每次有資料輸入的時候可以先與根節點比較。若不大於根節點,則捨棄;否則用新數值替換根節點數值。並進行最小堆的調整。
Java實現如下:
int[] topK(int nums[],int k){
PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>();
for (int v:nums) {
if (priorityQueue.size() < k)
priorityQueue.add(v);
else if (priorityQueue.peek() < v) {
priorityQueue.poll();
priorityQueue.add(v);
}
}
int[] result = new int[k];
for (int i = k - 1; i >= 0; i --)
result[i] = priorityQueue.poll();
return result;
}
相關文章
- 經典演算法-海量資料處理演算法(top K問題)演算法
- 海量資料處理問題知識點複習手冊
- RabbitMQ鞏固學習一MQ
- 經典面試問題: Top K 之 —- 海量資料找出現次數最多或,不重複的。面試
- 經典面試問題: Top K 之 ---- 海量資料找出現次數最多或,不重複的。面試
- 海量資料處理
- MySQL鞏固學習記錄(一)MySql
- java使用PriorityQueue即優先佇列實現大根堆和小根堆Java佇列
- 海量資料處理:十道面試題與十個海量資料處理方法總結面試題
- 《排序演算法》——堆排序(大頂堆,小頂堆,Java)排序演算法Java
- JavaSE複習鞏固Java
- 海量資料處理2
- 海量資料處理 (轉)
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- 海量資料的併發處理
- 海量資料處理_批量插入
- 海量資料處理_批量更新
- BFPRT 演算法(TOP-K問題)演算法
- 快手關於海量模型資料處理的實踐模型
- java資料結構基礎-利用Heap(堆)實現PriorityQueue(優先佇列)Java資料結構佇列
- 海量資料處理_表分割槽
- PHP處理海量樣本相似度聚類演算法PHP聚類演算法
- 資料處理--pandas問題
- 超3萬億資料實時分析,JCHDB助力海量資料處理
- 大頂堆的python實現Python
- 我的《海量資料處理與大資料技術實戰》出版啦!大資料
- 從問題的處理方式感悟學習方法
- 海量資料處理利器greenplum——初識
- 【LeetCode回溯演算法#08】遞增子序列,鞏固回溯演算法中的去重問題LeetCode演算法
- 教你如何迅速秒殺掉:99%的海量資料處理面試題面試題
- N道大資料海量資訊處理 演算法面試集錦大資料演算法面試
- iOS小記--使用結構體處理資料表的問題iOS結構體
- 海量資料處理_資料泵分批資料遷移
- 用PriorityQueue解決選擇最小的K個數問題
- 資料探勘聚類之k-medoids演算法實現聚類演算法
- go學習鞏固知識點(3) 資料庫操作 sql.DB 增刪改查Go資料庫SQL
- 深度學習--資料預處理深度學習
- c語言的一結構資料的堆疊實現問題薦C語言