從n個數選出最大的m個的演算法比較

2021-10-17 11:10:02 字數 621 閱讀 3611

n×m遍掃瞄

【演算法基本描述】n×m遍掃瞄

【演算法思想】每次都掃瞄一遍陣列,取出最大元素,這樣掃瞄m遍就能得到m個最大的數

【演算法複雜度】o(nm)

排序後取最大m個數

【演算法基本描述】對n個數排序,對拍完序後的序列取m個最大的數

【演算法複雜度】視排序的複雜度,一般為o(nlogn)或o(n^2)

計數排序(bitmap)

一次遍歷陣列記錄出現次數o(n),倒過來變數計算m個。

最小堆【演算法基本描述】一遍掃瞄+最小堆

【演算法複雜度】o(nlogm) 遍歷o(n) 最小堆o(logm)

【其他】如果要求n個數中取最小的m個,只要把演算法反一下即可

【演算法偽**】

00-建立乙個最小堆(優先佇列),最小堆的大小控制在m之內

01-for 每個數:

02-----if 這個數比最小堆的堆頂元素大:

03---------彈出最小堆的最小元素

04---------把這個數插入到最小堆

05-最小堆中的m個元素就是所要求的元素

06-其中最小堆的作用就是保持裡面始終有m個最大元素,且m個元素中最小的元素在堆頂。

從n個數中提取最小的m個數的演算法

從n個數中提取最小的m個數的演算法 2007 02 10 23 58 45 分類 經常在網上看到有人討論這個問題 如何高效地從n個數中提取最小的m個數?或者是其他類似的問題,今天我也簡單地分析一下。具體問題具體分析,既然這個題目只要求我們找出這m個數,沒有要求對其進行排序,所以負擔也就輕了,相應地也...

從m個數中選擇n個數的實現

從m個數中選出n個數來 0 n m 要求n個數之間不能有重複,其和等於乙個定值k。求一段程式,羅列所有的可能。例如備選的數字是 11,18,12,1,2,20,8,10,7,6 和k等於 18 那麼組合的可能有 18 8,10 2,20 12,6 11,7 11,1,6 1,10,7 12,2,8 ...

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

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