簡體   English   中英

文件支持的Trie(或前綴樹)實現

[英]File backed Trie (or Prefix Tree) implementation

我必須在c ++映射中存儲很多字符串以保留唯一的字符串,並且一旦出現重復的字符串,我只需要增加計數器(pair.second)即可。 我使用過c ++映射,它非常適合這種情況。 由於處理的文件現在已高達30gig,因此我試圖將其保存在文件中而不是內存中。

在這種情況下,我還遇到了trie,它比map更快。 有人知道文件支持的Trie實現嗎? 我遇到了一個Trie實現,它與我正在尋找的實現相似,但似乎沒有錯誤。

如何將30GB一次全部加載到內存中? 而且由於您想要的是基於字典的行為,所以我想像您每次插入或遞增時,都需要加載整個文件(即使是逐段加載)以進行查找。

我建議使用數據庫。 那就是他們的目的...

如果您可以對包含字符串的文件進行排序 ,那么閱讀排序列表和計算重復項將很容易。 (您可以保留原始文件,並創建一個新的已排序字符串的文件。)有效地對大型文件進行排序是舊技術。 您應該能夠找到一個實用程序。

如果您不能排序 ,請考慮摘要這些字符串。 對於您的目的,MD5可能會過大。 你可以把東西弄平。 對於數十億個字符串,您可以使用8個字節的摘要。 使用摘要樹(可能是BST)。 對於每個摘要,存儲產生該摘要的唯一字符串的文件偏移量。

當您讀取一個字符串時,計算它的摘要,然后查找它。 如果找不到摘要,則說明該字符串是唯一的。 將其存儲在樹中。 如果找到摘要,請檢查每個關聯的字符串是否匹配,並進行相應處理。

要比較字符串,您將需要轉到文件,因為您存儲的只是文件偏移量。

重要的是要記住,如果兩個摘要不同,則產生它們的字符串也必須不同。 如果摘要相同,則字符串可能不相同,因此需要檢查。 當重復的字符串較少時,該算法將更加有效。

暫無
暫無

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

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