[英]Suffix Array Implementation in Java
我正在尋找一個有效的n階馬爾可夫鏈方法,在給定一組示例文本的情況下生成隨機文本字符串。 我目前有一個使用多層Maps的Java實現,但它很笨重。 后綴數組對於我的需求是完美的,但我不清楚是否可以在Java中有效地實現。
在CI中可能會執行以下操作:
char exampleText[MAX];
char *suffixArray[MAX];
...
while(n<MAX && suffixArray[n++] = &exampleText[n]);
sort(suffixArray);
這得到在Java中粗糙,因為我不得不采取的子exampleText
,或將suffixArray
到索引數組,或別的東西。
有沒有在Java中采用這種方法的建議?
String
將[通常]為您執行此操作。 (當使用substring
創建時,典型實現共享后備數組,盡管可能隨時更改。)
您可以使用后綴數組制作一些變體:
第一:
public static String[] suffixes(String s)
{
int N = s.length();
String[] suffixes = new String[N];
for (int i = 0; i < N; i++)
suffixes[i] = s.substring(i, N);
return suffixes;
}
第二:
public static String[] suffixes(String s)
{
int N = s.length();
StringBuilder sb = new StringBuilder(s);
String[] suffixes = new String[N];
for (int i = 0; i < N; i++)
suffixes[i] = sb.substring(i, N);
return suffixes;
}
對於任何對在Java中構造后綴數組的更有效方法感興趣的人,我曾經使用過一個名為jsuffixarrays的庫。 代碼在這里 。 它提供了一系列構造算法可供選擇,我發現它可以很好地工作。 例如,要使用SKEW算法,請執行以下操作:
import org.jsuffixarrays.Algorithm;
import org.jsuffixarrays.ISuffixArrayBuilder;
import org.jsuffixarrays.SuffixArrays;
import org.jsuffixarrays.SuffixData;
String exampleText = "....";
ISuffixArrayBuilder suxBuilder = Algorithm.SKEW.getDecoratedInstance();
SuffixData sux = SuffixArrays.createWithLCP(text,sux_builder);
/* Then, to access the suffix array: */
sux.getSuffixArray();
/* And, to access the LCP array: */
sux.getLCP();
如果不需要,您可以在沒有LCP陣列的情況下構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.