海量資料topK問題

2021-10-03 19:16:26 字數 578 閱讀 2654

給你一億個資料,從中找出前k個大的資料。

有兩種解決辦法。

1.直接將資料從大到小排序,然後取前k個。但是由於資料的數量過於龐大,要開闢很大的空間,很浪費記憶體,所以這種方法不建議使用。

2.用堆來解決。要找前k個大的資料,則將待找的元素的前k個元素建立大小為k的小根堆,小根堆的堆頂元素是這k個資料中最小的。從剩下的資料裡取乙個元素每次和堆頂元素比較,如果陣列當中的當前元素大於堆頂元素,則將堆頂元素出堆,然後將當前元素入堆。再將其調整為小堆,如此再迴圈。

**如下:

public

static integer[

]findknum

(int

array,

int k)})

;//2.

for(

int i=

0; i)else}}

integer[

] integers =

newinteger

[k];

for(

int i=

0; i)return integers;

}

海量資料 TopK問題

在海量資料中找出出現頻率最高的前k個數,或者從海量資料中找出最大的前k個數,這類問題通常被稱為topk問題。下面我們通過乙個簡單的例子來說明 假如面試官給你100w個資料,請找出其最大的前k個數,而且現在只有1m的空間?在32位作業系統中,預設乙個位元組為4個位元組,則有下列運算 needsize ...

海量資料的TopK問題

乙個基本的是思想是分治法,將1億個資料分成100份,每份100萬個資料,找出每份中最大的100個,最終可以在這100 100個資料中找出最大的100個。我們知道,快排一次的結果是分界點前面的資料比他小,分界點後的比他大,我們可以做如下的討論 如果分界點後面的資料個數大於k個,那麼可以在後面的資料中重...

求海量資料的topK問題

問題描述 取給定list中的前topk個最大的元素並輸出。關鍵點 1.topk個最大的元素 2.我們並不需要順序,因此一切涉及到sort的工作都是不必要的。3.要且只要topk個元素,no more needed!因此,我們雖然用堆,但並不需要將整個list都建成堆,只需要維護乙個k個元素的堆即可。...