在每個面試問題,我一直在問「你會如何排序的十億學生名單,根據他們的測試總成績?從1-學生的舉動卷數的列表1B和分數的範圍是10-100。「 雖然任何排序算法會做,但效率高嗎?排序十億學生
Q
排序十億學生
2
A
回答
6
只需運行counting sort輸入,它在這種情況下O(n)
,因爲範圍爲界。這也是最有效的方式,因爲任何輸出所有學生的方法都需要Ω(n)。
您可以通過他們的循環可能獲得分數輸出的學生(例如,如果90個可能的分數存在,通過學生圈90倍,在第一時間輸出學生的分數100,....)。
這個任務可以通過bucket sort完成。但首先你應該循環輸入,找到每個相關學生的分數,然後通過考慮其學生數量爲每個分數創建一個桶,然後填充桶,注意你應該創建一個桶的數組,也應該有一個額外的參數,用於在每個存儲桶中保存當前項目數第一種方法(使用直接計數排序)是O(n),O(1)額外空間,第二種方法是O(n),O(n)多餘空間,但第二種方法更快,因爲它是2*n
,第一個是90*n
。
0
使用計數排序。如果你知道在這個問題中滿足的最大值和一些其他參數,那是很好的。它在排序爲O(n)
0
我會用某種鴻溝而治之算法(如合併排序或快速排序或桶排序),並使用這個想法告訴了幾個桶之間進行劃分排序。 當您需要將所有數據合併回大數組時,會出現問題,但由於子數組已經排序,只需要O(n)。
bucket sort(L)
{
list Y[k+1]
for (i = 0; i <= k; i++) Y[i] = empty
while L nonempty
{
let X = first record in L
move X to Y[key(X)]
}
for (i = 0; i <= k; i++)
concatenate Y[i] onto end of L
}
有兩個循環取O(k)時間,一個取O(n),所以總時間爲O(n + k)。當k小於n時這是好的。例如。假設你想按分數排序10億人; n = 1000000000,k = 100-10,所以時間= O(n)。
相關問題
- 1. 基於櫃檯的數十億行排序hbase表
- 2. 安排學生降序
- 3. 排序的學生數組
- 4. 按學生ID對學生列表進行排序
- 5. 對普通學生和非普通學生進行排序
- 6. 排序列表學生按等級
- 7. 最快的nosql爲數十億記錄
- 8. 從Spark輸出數十億行
- 9. Java處理數十億字節
- 10. 如何分割十億或百萬
- 11. 查詢數據有超過十億行
- 12. 什麼是十億三倍挑戰?
- 13. Mysql容量處理數十億行
- 14. 獲得學生排名
- 15. 排行學生和平均
- 16. 安排學生上課
- 17. 通過排序相似度鏈接學生俱樂部的名單,以學生
- 18. SQL查詢來安排學生的痕跡降序排列
- 19. 將百億/十億個縮寫變成實際數字?即。 5.12M - > 5,120,000
- 20. 查找其中包含學生指向的學生的排名
- 21. Wordpress中的小學和中學排序
- 22. 在Haskell中生成十億個隨機雙打的最快方法
- 23. TCL排序文件數學
- 24. 雙核電腦需要多長時間才能按特定特徵對十億個文件進行排序?
- 25. 在MYSQL中通過一個varchar列快速排序10億行
- 26. 排名的學生按年級
- 27. 根據他們的教師編號排序學生列表
- 28. 排序字符串形式的學生數據
- 29. 用Java按字母順序排列學生數組
- 30. 在學生班級之間排序名稱
你想排序他們的名字作爲次要標準或只有他們的標記? – Gaim