這是來自Cormen文本的問題,但我想看看是否還有其他解決方案。尋找m最大數字
給定一個具有n個不同數字的數組,你需要找到數組中最大的m個數組,並且它們按照排序順序排列。假設n和m很大,但增長不同。特別是,你需要 在m = t * n的情況下考慮,其中t是一個小數字,比如說0.1,然後是m =√n。
書中給出的解決方案提供3個選項:
- 排序陣列並返回頂部米長的段
- 陣列轉換爲最大堆並提取m個元素
- 選擇第m個最大的數字,對該數組進行分區,然後對較大條目的分段進行排序。
這些都有道理,他們都有自己的優點和缺點,但我想知道,有沒有另一種方式來做到這一點?它不一定要更好或更快,我只是好奇,看看這是更多解決方案的常見問題,還是僅限於這3種選擇。
通過數組「m」次遍歷你的最後一個最大值,以抓取最近的一個,而不會超過。價格是正確的風格。 – 2014-10-29 15:33:11
Mb這樣的事情。有優先級隊列長度爲'm',按順序放置數字,所以在隊列的開始處是最大的數字,最後是最小的數字。然後你拿下一個號碼,如果它比較小,那麼你不會做的最小的號碼不會超大,而是將它插入wright order。它與第2點的最大堆相同,但我們有一個有限的堆(或隊列,不知道什麼會更好) – 2014-10-29 15:38:12
@CBif'm'太大了,你有O(n^2),它更快用快速排序對它進行排序 – 2014-10-29 15:40:21