看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) Linux 問題(Question): 有一個檔案,裡面有非常多數字, 即使僅算不同的,也還是很多 想將數字依照出現的次數多寡排序 餵入的資料(Input): 10 11 10 12 預期的正確結果(Expected Output): 10, 2 11, 1 12, 1 程式碼(Code): (請善用置底文標色功能) 我原本想用 map<int, int> 先計數,將結果存進檔案。 之後再用 sort command 排序那個檔案。 可是因為 input 太多了,跑出 std::bad_alloc 的錯誤 應該是記憶體不足。 請問要怎麼做比較好呢? 補充說明(Supplement): 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.48.214
mself:不一定要 stable sort、但 stable 當然是很好 12/26 20:36
x000032001:有沒有數字範圍 多少資料 12/26 20:45
loveme00835:範圍一定要知道, 如果非常密集, 排不完的 12/26 20:50
mself:數字範圍是 32bit,個數有 1~2 billion 個 12/26 21:02
mself:覺得用 external sort 先 sort 過可能會比較好... 12/26 21:11
VictorTom:一兩億的話, 至少也得要32bits來存, range也有32bits, 12/26 21:23
VictorTom:開陣列你需要16G的memory才放得下!?(小弟有沒算錯啊Orz) 12/26 21:24
VictorTom:可以直接找資料庫來處理這些資料嗎....(光速逃XD) 12/26 21:25
mself:仔細想過後,應該先 sort 再記數。 12/26 21:34
mself:sort algorithm 有一類是專門處理超過 memory 大小的 12/26 21:34
mself:那就是 external sort。 sort 過就好辦多了。 12/26 21:35
mself:最後再 sort 一次~ 12/26 21:43
bleed1979:billion是10億,現在把1024當1000, 12/27 10:01
bleed1979:4 * 1000000000 / 1000(kb) / 1000(mb) = 4000(mb) = 4G 12/27 10:03
bleed1979:一個檔案這麼大,連開檔都很累吧。 12/27 10:07