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;
}
相關文章
- 海量資料處理問題知識點複習手冊
- RabbitMQ鞏固學習一MQ
- 經典面試問題: Top K 之 ---- 海量資料找出現次數最多或,不重複的。面試
- 經典面試問題: Top K 之 —- 海量資料找出現次數最多或,不重複的。面試
- 海量資料處理
- 海量資料處理2
- 海量資料的併發處理
- java使用PriorityQueue即優先佇列實現大根堆和小根堆Java佇列
- MySQL鞏固學習記錄(一)MySql
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- 快手關於海量模型資料處理的實踐模型
- JavaSE複習鞏固Java
- 資料處理--pandas問題
- 【LeetCode回溯演算法#08】遞增子序列,鞏固回溯演算法中的去重問題LeetCode演算法
- 大頂堆的python實現Python
- 超3萬億資料實時分析,JCHDB助力海量資料處理
- 我的《海量資料處理與大資料技術實戰》出版啦!大資料
- N道大資料海量資訊處理 演算法面試集錦大資料演算法面試
- (003)我們一起學Python;鞏固練習,寫個小遊戲Python遊戲
- 【LeetCode回溯演算法#07】子集問題I+II,鞏固解題模板並詳解回溯演算法中的去重問題LeetCode演算法
- 用PriorityQueue解決選擇最小的K個數問題
- 機器學習經典聚類演算法 —— k-均值演算法(附python實現程式碼及資料集)機器學習聚類演算法Python
- 深度學習--資料預處理深度學習
- SpringMVC入門學習---資料的處理SpringMVC
- Sql Server資料庫類似正規表示式的字元處理問題SQLServer資料庫字元
- 機器學習處理問題如何選擇一個合適的演算法?機器學習演算法
- 機器學習經典分類演算法 —— k-近鄰演算法(附python實現程式碼及資料集)機器學習演算法Python
- go學習鞏固知識點(3) 資料庫操作 sql.DB 增刪改查Go資料庫SQL
- 海量資料處理利器 Roaring BitMap 原理介紹
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- Jtti:怎樣正確處理Redis中的海量資料JttiRedis
- 深度學習——資料預處理篇深度學習
- 【Pandas學習筆記02】處理資料實用操作筆記
- 機器學習策略篇:詳解處理資料不匹配問題(Addressing data mismatch)機器學習
- 大資料處理需留意哪些問題大資料
- Java中常見的異常分類,結合Spring的事務鞏固複習JavaSpring
- Oracle資料庫中的逐行處理問題NEOracle資料庫
- C++進階(點陣圖+布隆過濾器的概念和實現+海量資料處理)C++過濾器