海量資料中選出若干大數字的演算法

2021-09-01 18:47:25 字數 580 閱讀 1608

今天去面試了一家公司,被問到了這樣一道題目:

如何最快的從1m資料中選出100個最大的資料。

問題不在於找出最大的資料,而是在於最快的演算法。

我們可以建堆來搞定這件事,比如建乙個100的小頂堆。這樣只需要和最小的比較就好了。

這個大概時間複雜度為o(n log^2 m) 應該說這是乙個比較不錯的方案。

也許還有更快的方案。

比如快速排序。

如果我們快速排序支點選擇的好,可以加速這個尋找的過程。

比如說,如果我們很幸運,找到了第m+1個大的數目,基本一次快排就搞定了。

所以下面的問題就是我們通常沒那麼走運,那麼如何選擇支點就是乙個可以優化的方向。

如何選擇支點呢?

乙個簡單的方法,經過一次掃瞄,得到資料中最大值和最小值,然後二分來做為支點。

這樣由於二分其實是乙個很不錯的降解方案(不用考慮資料分布了)。可以很快找到m個數字。

所以應該在資料規模不是很大的情況下,應該用二分+快排來搞定這件事情。

當然如果規模更大的話就要考慮桶排序或者bitmap之類的啦。

另外,這種題目基本不是來考驗人的應變的,更多的感覺是考驗乙個人的經驗。

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

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

大資料與演算法系列之海量資料查詢演算法

在某些時候,可能會涉及在海量資料中的查詢,如果採用通常的做法,則很難達到一定的效果,在實際工程實踐中,海量資料的查詢效能很肯恩鬼成為整個系統的效能瓶頸,在海量資料中的查詢包括基於布隆過濾器的方式,以及基於倒排索引的資料結構。布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙...

論 大資料 時代下的海量資料儲存技術

高畫質 長週期呈現海量儲存需求 高畫質已經在安防行業全面鋪開應用。除了帶給使用者能夠看得更清的良好視覺感受外,對儲存容量的需求亦成幾何式增長。例如 前端ipc有130w到500w畫素,碼流也從有2mbps到8mbps,而乙個130w畫素,8mbps碼流的前端,錄影乙個月就需要2531.3gb,資料量...