簡體   English   中英

用Java壓縮后綴數組

[英]Compressing Suffix Arrays in Java

我已經使用Princeton實現創建了一個后綴數組。 但是,我的基本文本文檔非常非常大,因此,后綴數組的大小超過500mb。 有沒有辦法壓縮后綴數組?

謝謝!

與前面的答案相反,您不僅可以壓縮后綴數組,而且實際上壓縮后綴通常是通過先使用后綴數組模擬樹然后對其進行壓縮來實現的。

我不知道后綴數組壓縮的任何現成的Java實現 ,並且涉及各種現有算法,因此在此不進行詳細描述。 Navarro和Mäkinen撰寫了一篇論文 (DOI 10.1145 / 1216370.1216372),其中提供了詳細的說明和比較。

但是從廣義上講,有兩種通用方法

方法A:直接減小數組的大小 (請參見本文的7.1節)。 這涉及存儲后綴數組的某些條目,並在需要時插補丟失的條目。 使用函數(在本文中稱為ψ)進行插值,該函數本身以大數組(但不如原始后綴數組大)和索引位向量的形式存儲。

方法B:FM方法 (請參閱本文第9節)。 在這里,后綴數組基本上由相對短的數組C代替,該數組C指示主要詞典存儲區(即以相同的初始字符開頭的后綴組)的起始位置(在后綴數組中),並與另一個相對較大的數據結構Occ相結合啟用所謂的向后搜索 具體地,給出的搜索模式p = C 1 ..c ,它使得有可能迭代地進一步縮小為串c M-1 C M更小的桶的桶為字符C M,然后在鏟斗為C M -2 c m-1 c m依此類推,直到找到完整圖案p的最終范圍。 啟用此功能的數據結構Occ很大,但可以使用各種技術(尤其是小波樹)進行壓縮。

對搜索效果的影響
上面引用的論文包含仔細的分析和比較。 但是從廣義上講,壓縮后綴數組將導致搜索長度為m的模式(如果仔細實施,則可以在未壓縮的后綴數組中為O(m))延遲一個因數(通常為對數)整個文本的長度 此外,任何利用小波樹的方法都意味着對字母大小額外依賴

據我所知,您不能壓縮后綴數組(也許我只是不知道),但是可以壓縮后綴樹。 因此,您可以考慮更改數據結構。 只是Google壓縮后綴樹。

由於它們可以存儲大量數據,因此在遺傳測序和常見的子字符串問題中大量使用。

可以在這里找到說明: http : //bioinformatics.oxfordjournals.org/content/23/5/629.abstract
如果您單擊底部的鏈接,則會帶您到此頁面,您可以在此頁面上下載壓縮后綴樹的代碼: http : //www.cs.helsinki.fi/group/suds/cst/

暫無
暫無

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

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