1. 程式人生 > >如何在10億個數中找到前1000大的數?

如何在10億個數中找到前1000大的數?

如何在10億個數中找到前1000大的數?

定位

TopN問題

演算法

  • 排序不是最優的解決方案;
  • 可以考慮分治法;
  • 類似快速排序中的partition的操作,隨機選一個數t,然後對整個陣列進行partition,會得到兩部分,前一部分數都大於t,後一部分都小於t,時間複雜度O(n)。

注意點

  • 10億個數載入進記憶體大概需要4G記憶體;

  • 若一個機器資源有限,可採用分散式的思想,切分資料後分別計算然後彙總;

  • 如果只有一臺資源有限的機器,可以使用小頂堆(每個節點都要比它的左右子節點要小);

  • 從檔案中讀取出資料,遍歷一遍即可,比堆頂的資料大就替換,然後調整小