簡體   English   中英

Java中的后綴數組實現

[英]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.

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