2
我正在尋找一種使用二分搜索進行部分匹配的方法。這裏是我的代碼:如何做BinarySearch的部分匹配()
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參數中的單詞僅作爲單個單詞傳入。所以第一個詞將是穆罕默德,但二分查找失敗,因爲它不知道第二個詞是什麼。我不能想到一個簡單的方法來獲得二進制搜索,以表明一個詞有潛力成爲一個匹配(第一部分匹配,只是追加下一個單詞,看看是否匹配)。
任何想法非常感謝!
您是否知道如果找不到項目,binarySearch不會返回-1?它返回 - *(如果它存在,項目的索引)*。如果你不想實際實現一個二進制搜索或者一個trie,你可以使用該返回值來僞造它。 –
感謝您的提示!我會給出一個去看看我如何... – maloney
二進制搜索用於確切的情況下搜索..按字母順序排列的字符串進行二進制搜索由數字索引指導,是一個最終的確切情況下的搜索..做一個好的搜索算法,你建立一個trie,並做一個最大共同前綴作爲近似或找到另一種方法,這將是更困難的 –