CircularSuffixArrayクラスをJavaで実装しようとしています(Suffix array Wikipedia)。私のアプローチでは、Comparator
を実装して各接尾辞の最初の文字を比較する内部クラスを作成し、等しい場合は再帰的に次の文字のためにcompare
を呼び出します。このような何か:コンパイラを使用したJavaの円形サフィックス配列
public class CircularSuffixArray {
private String string;
private int[] sortSuffixes;
private class SuffixesOrder implements Comparator<Integer> {
public int compare(Integer i, Integer j) {
if ((length() - 1) < i) return 1;
else if ((length() - 1) < j) return -1;
if (string.charAt(i) != string.charAt(j))
return compare(string.charAt(i), string.charAt(j));
else
return compare(i+1, j+1);
}
private int compare(char a, char b) {
return b - a;
}
}
private Comparator<Integer> suffixesOrder() {
return new SuffixesOrder();
}
// circular suffix array of s
public CircularSuffixArray(String s) {
if (s == null) throw new NullPointerException("null argument");
string = s;
sortSuffixes = new int[length()];
for (int i = 0; i < length(); i++)
sortSuffixes[i] = (length() - 1) - i;
Arrays.sort(sortSuffixes, suffixesOrder());
}
}
しかし、私はそれをコンパイルしようとしたとき、私はこのエラーを取得:
CircularSuffixArray.java:35: error: no suitable method found for sort(int[],Comparator<Integer>) Arrays.sort(sortSuffixes, suffixesOrder());
はあなたが私に教えコール:
- まず第一に、場合実装は大丈夫です(私は今、多くのコードが関連していますが、私は自分で試してみたい)
- "アルゴリズム"が間違っていても、caあなたはなぜこのエラーが出るのか理解してもらえますか?
私がすることを疑われ...しかし、私はそれがポインタだから整数を使用しないようにしようと、そのサイズがより大きくなりますint(問題はCoursera、Algorithms IIからのもので、最適化は非常に厳しいものです)。私は整数で試してみます。 そして、私はlength()メソッドをコピーするのを忘れていました。ありがとう! – nikolat328