從海量數值中找出最大的N個元素的演算法實現

2021-08-20 15:15:14 字數 610 閱讀 7642

首先,肯定不能將海量資料壓入treeset中進行排序,這樣會造成堆記憶體溢位。

首先想到的是,採用treeset,維護乙個小頂堆,堆裡只有k個元素,從而保證堆記憶體不溢位。然後將後面的元素壓入堆中,基於treeset的排序功能排序後,poll掉最上面的乙個元素(最小元素)。

其實jdk1.5以後還提供了priorityqueue,如果海量資料裡有重複資料,建議採用該優先順序佇列,因為treeset是不能存放重複資料的。

public

class

findtopn

//建立乙個小頂堆的treeset

treesetminheap = new treeset<>();

//按行讀取檔案內容

lineiterator iterator = fileutils.lineiterator(srcfile, "utf-8");

while (iterator.hasnext()) }}

iterator.close();

return minheap.toarray(new long{});

}}

從 n個長度的序列中找出前 m大個元素

方法一 利用優先佇列的特性 堆序 在構建出 max堆 大頂堆 之後,不斷將堆頂的元素移除,就能很輕鬆的獲取前 m個最大的元素.方法二 對第一種方法的優化,維護乙個含有 m個元素的序列,在對原始數列進行掃瞄,動態調整目標序列,一次掃瞄結束之後,前 m個元素也就找到了.public class sort...

海量資料中選出最大的N個

前幾天,面試了一家公司,其中出了一道演算法應用題,題是這樣的 有100個檔案,每個檔案裡有10000個資料,選出前100個大的資料 聽到這麼大的資料,第乙個想法就是 堆排,因為這個題很符合堆排的條件 1 大資料 2 選擇前多少個 當我說出堆排的時候,自己也有在想,這麼多的資料,能不能一下全部讀入呢,...

N個數中找出最大的K個數

題目描述 有很多個 n個 無序的數,我們姑且假定它們各不相等,怎麼選出其中最大的若干個 k個 數呢?1.n 100,k 10的時候怎麼處理?2.n 1000,k 100呢?3.n 1億億個,k 100呢?如果這些數是整數的話,怎麼處理?如果是浮點數呢?如果這些數是整數,並且存在上界呢?如果將題目中的...