Rabin-Karp搜索算法工作正常,但任何人都可以幫助指導我將其修改爲遞歸搜索嗎? http://algs4.cs.princeton.edu/53substring/RabinKarp.java.html。 例如:返回遞歸匹配的字符串搜索算法 - Java
* **pattern:** rar
* **text:** abacadabrararbracabrarararacadabrabrarbracad
* **match1:** rar
* **match2:** rar
* **match3:** rar
* **match4:** rar
* **match5:** rar
* **match5:** rar
還有其他的遞歸文本匹配搜索更快的算法?
SOLUTION
從http://johannburkard.de/software/stringsearch/添加外部庫構建路徑。下面的代碼將返回比賽的所有起始位置。包括像match1和match2這樣的嵌入式應用。
import com.eaio.stringsearch.BNDM;
String pattern = "rar";
String text = "abacadabrararbracabrarararacadabrabrarbracad";
// Loop through text to get starting position of matched pattern.
List<Integer> matchPoint =new ArrayList<Integer>();
int slice = -1;
while (slice<text.length()){
slice+=1;
com.eaio.stringsearch.BNDM result = new BNDM();
int pos = result.searchString(text, slice, pattern);
if (pos != -1) {
slice = pos;
matchPoint.add(pos);
}
}
你有沒有經驗將迭代代碼轉換爲遞歸代碼,對於一般情況是? – 2012-01-17 09:30:38
nope,通常我只是簡單地將'pattern'放入一個函數中並調用搜索,直到函數返回'text'的末尾。 – alvas 2012-01-17 09:34:11
好吧,你在某種程度上處於正確的軌道。這個想法是打破一個迭代解決兩個或多個子問題然後用另一個遞歸調用來解決問題的問題。這是基本原則。 – 2012-01-17 09:38:34