Ich versuche, eine CircularSuffixArray-Klasse in Java zu implementieren (Suffix array Wikipedia). Bei meinem Ansatz habe ich eine innere Klasse erstellt, die Comparator
implementiert, um das erste Zeichen jedes Suffixes zu vergleichen und, wenn sie gleich sind, rekursiv compare
für die nächsten Zeichen aufzurufen. Etwas wie folgt aus:Circular Suffix Array in Java mit Comparator
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());
}
}
Aber wenn ich es zu kompilieren versucht, bekomme ich diesen Fehler:
CircularSuffixArray.java:35: error: no suitable method found for sort(int[],Comparator<Integer>) Arrays.sort(sortSuffixes, suffixesOrder());
Rufen Sie mich sagen:
- Vor allem, wenn die Implementierung ist in Ordnung (ich jetzt, dass es eine Menge Code related ist, aber ich will es selbst versuchen)
- Egal, der "Algorithmus" ist falsch, ca n hilfst du mir herauszufinden, warum ich diesen Fehler bekomme?
Ich vermutete, dass ... Aber ich habe versucht, Integer nicht zu verwenden, weil es ein Zeiger ist und seine Größe größer als ist ein int (das Problem ist von Coursera, Algorithmen II, und sie sind sehr streng mit Optimierungen). Ich werde es mit Integer versuchen. Und ja, ich habe vergessen, die length() Methode zu kopieren. Vielen Dank! – nikolat328