簡體   English   中英

使用序列化二叉搜索樹對海量數據進行排序

[英]Sorting huge volumed data using Serialized Binary Search Tree

我有 50 GB 這樣的結構化(作為鍵/值)數據,這些數據存儲在一個文本文件中(input.txt / 鍵和值是 63 位無符號整數);

3633223656935182015 2473242774832902432
8472954724347873710 8197031537762113360
2436941118228099529 7438724021973510085
3370171830426105971 6928935600176631582
3370171830426105971 5928936601176631564

我需要以該鍵的最小值按遞增順序將此數據排序為鍵。 結果必須在 30 分鍾內呈現在另一個文本文件 (data.out) 中。 例如,對於上面的示例,結果必須是這樣的;

2436941118228099529 7438724021973510085
3370171830426105971 5928936601176631564
3633223656935182015 2473242774832902432
8472954724347873710 8197031537762113360

我決定了;

  • 我將使用 input.txt 中的鍵及其最小值創建一個 BST 樹,但該樹將超過 50GB。 我的意思是,此時我有時間和內存限制。

  • 因此,我將使用另一個文本文件 (tree.txt),並將 BST 樹序列化到該文件中。

  • 之后,我將使用 in-order traverse 遍歷樹並將排序后的數據寫入 data.out 文件。

我的問題主要是序列化和反序列化部分。 如何序列化這種類型的數據? 我想對序列化數據使用 INSERT 操作。 因為我的數據比內存大。 我無法在內存中執行此操作。 其實我想用文本文件作為內存。

順便說一下,我對這種東西很陌生。 如果與我的算法步驟有沖突,請警告我。 任何想法、技術和代碼示例都會有所幫助。

OS: Linux
Language: C
RAM: 6 GB

注意:我不允許使用排序和合並等內置函數。

考慮到您的文件似乎具有大約 40 個字符的相同行大小,總共給我大約 1250000000 行,我將通過以下命令將輸入​​文件拆分成更小的文件:

split -l 2500000 biginput.txt

然后我會對他們每個人進行排序

for f in x*; do sort -n $f > s$f; done

最后我將它們合並

sort -m sx* > bigoutput.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM