我正在努力实现一个后缀数组,用于加速短语搜索。
我有一个“后缀”对象数组,这是后缀数组。每个后缀对象都有两个值,即文档和位置。
我有一个比较器,它根据字符串字典中的查找使用两个值文档和位置对此数组进行排序。 (例如,一个后缀对象,其中document = 1,position = 5指向“fish”,另一个对象指向“cake”。“Cake”将在“fish”前面排序。这样做很好,后缀数组按照词汇顺序按预期排序
但是,现在我想在这个后缀数组中进行二进制搜索查找,这次输入是一个字符串。我如何使用Arrays.binarySearch()与我做的比较器来比较一个String键(我正在搜索的短语)来搜索后缀数组?如果binarySearch()方法让我在比较器中以某种方式进行比较,那么将String与Suffix对象进行比较是微不足道的......
答案 0 :(得分:1)
不确定我是否完全理解,但这是我的想法:
修改班级中的compareTo
方法,如下所示:
class Suffix implements Comparable<Object>
{
/* ... */
int getDocumentId() { /* ... */ }
int getPosition() { /* ... */ }
@Override
public int compareTo(Object o)
{
if (o.getClass() == String.class)
{
/* Derived from compare code comment */
String key = dictionary.getDocument(getDocumentId()).getData();
String suffix = (getPosition() == 0) ? key : key.substring(getPosition());
suffix.compareTo((String)o);
}
else
{
/* same as original comparison */
}
}
}
然后你可以这样做:
Arrays.binarySearch(yourArray, yourString);