【发布时间】:2012-09-19 10:08:42
【问题描述】:
我正在寻找一种使用二进制搜索进行部分匹配的方法。这是我的代码:
public void checkCardIndexForMatches(List<String> wordsToCheck) throws IOException {
String[] cardIndexCache = cardIndexCreator.getCardIndexCache();
for (String text: wordsToCheck){
int i = Arrays.binarySearch(cardIndexCache, text.getText().toLowerCase().trim());
if (i > 0){
text.setCardIndexMatch(true);
}
//check if partial match
// else if
}
}
到目前为止,它非常简单 - 基本上有一个外部文件被输入,文件中的每一行都作为数组存储在 cardIndexCache 中。当用户希望能够匹配数组中的“短语”(一个短语是多个单词,例如 Mohammed Ali)时,问题就出现了。 wordsToCheck 参数中的单词仅作为单个单词传入。所以第一个词将是 Mohammed 但二分查找失败,因为它不知道第二个词是什么。我想不出一种简单的方法来让二进制搜索表明一个单词有可能成为匹配项(第一部分匹配,只需附加下一个单词并查看是否匹配)。
非常感谢任何想法!
【问题讨论】:
-
您知道 binarySearch 不只是在未找到项目时返回 -1 吗?它返回 -(如果项目存在,该项目所在的索引)。如果您不想自己实际实现二进制搜索或尝试,您可以使用该返回值来伪造它。
-
感谢您的提示!我会试一试,看看我的进展如何......
-
二进制搜索用于精确大小写搜索.. 对按字母顺序排列的字符串列表进行二进制搜索由数字索引引导,最终是精确大小写搜索.. 做一个好的搜索算法,你建立一个 trie,并做一个最大公共前缀作为近似值,或者找到另一种更困难的方法
标签: java data-structures binary-tree