百萬資料處理,找到前K大的數字(TopK問題)。

2021-09-25 14:12:51 字數 623 閱讀 4561

假如你有一組資料,現在讓你求出前k大的數字。有的人說,直接排序不就ok了。那麼我的問題來了。

如果這個資料很多呢,並且現在給你分配的記憶體很小,不足以讓你開闢足夠大的空間去儲存陣列。我們該怎麼辦。

這個時候我們就可以用堆來實現。

比如我們現在有300000個隨機數字,現在讓你找出來前100大的數字。

思路:我們可以建立乙個容量為100堆,先將前100個資料存入。將堆變成小根堆,接下來每次從隨機數字中取出乙個數字,和堆頂的元素比較大小,如果大於堆頂的元素,將堆頂元素替換,在將堆變成小根堆。以此類推,直到所有元素遍歷完。

堆實現模組

public class testheap 

public void heapsort(int arr)else}}

}//列印輸出

public void show()

}}

測試

public class test 

heap.heapsort(arr);

}}

有什麼問題歡迎指出。

海量資料處理之歸併 堆排 前K方法的應用

對於海量資料 尋找前k大 目前總結起來我想一般也就兩種方案 堆排序 k選擇。這裡需要說明兩點 1 如果資料量比較大,一般我們認為k 2,如果k 2,遍歷一遍即可求,無需過多討論 2 如果資料量不是太大,完全可以做k次冒泡來求得 這裡我們考慮的是資料量比較大,k 2的情況 網上對於解決海量前k大問題比...

在海量資料中找到最大的前K個數(top K問題)

問題分析 資料是海量的,可能達到10億或者100億以上,只需要找最大的前100個數。所以將資料一次性排序然後取前100個是不太可取的操作。做了很多無用功,並且記憶體一次性也載入不了海量資料。解決方案 方案一 堆。一般說在很多資料中取前多少個資料,我們都會想到堆,這裡我們使用堆來解決問題。首先取k個數...

如何從前N個資料中找到前K個大 小的資料並列印?

要解決這個問題,那麼我們可以從前十個資料入手,先拿到前十個資料,接下來我們以求前2000個資料中前十個小的資料為例 取出前十個資料,我們把它放入小跟堆裡 從十乙個資料vec i 開始,我們與第一小minheap.top 資料作比較。如果vec i minheap.top 則將vec i 的值賦給mi...