海量資料的TopK問題

2021-08-07 07:37:54 字數 496 閱讀 5425

乙個基本的是思想是分治法,將1億個資料分成100份,每份100萬個資料,找出每份中最大的100個,最終可以在這100*100個資料中找出最大的100個。

我們知道,快排一次的結果是分界點前面的資料比他小,分界點後的比他大,我們可以做如下的討論

如果分界點後面的資料個數大於k個,那麼可以在後面的資料中重複上述過程

如果分界點後面的資料個數小於k個,其個數為m個,那麼可以在前面的資料中找到k-m個最大的

因此,我們總可以在這一堆資料中找到前k個比較大的

容易證明,小頂堆的堆頂元素是最小的,維護乙個k個資料的小頂堆,依次讀入乙個元素,若元素大於堆頂元素,則將堆頂元素移除,當前元素插入堆頂,並進行調整。

維護乙個k長的優先順序佇列,不斷把優先順序低的陣列出隊,最終剩下來的就是前k個最大的

在這個問題中,我們需要構造乙個map來統計頻率,然後問題轉化為計算value值屬於錢k大的問題,這時可以套用基本的topk問題

參考文獻:十道海量資料處理面試題與十個方法大總結

海量資料 TopK問題

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

海量資料topK問題

給你一億個資料,從中找出前k個大的資料。有兩種解決辦法。1.直接將資料從大到小排序,然後取前k個。但是由於資料的數量過於龐大,要開闢很大的空間,很浪費記憶體,所以這種方法不建議使用。2.用堆來解決。要找前k個大的資料,則將待找的元素的前k個元素建立大小為k的小根堆,小根堆的堆頂元素是這k個資料中最小...

求海量資料的topK問題

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