【发布时间】:2012-08-02 22:06:54
【问题描述】:
我写了一个代码来填充 KMP 的前缀表。这是algorithm 的小变化。我无法说服自己这个算法/实现在 O(n) 时间内运行。我很难弄清楚第二次递归调用对总运行时间的影响。有什么帮助吗?
public void fillFailTable(int[] failTable,String p){
failTable[failTable.length-1] = preLength(failTable,p);
}
private int preLength(int[] failTable,String s){
if(s.length() == 1){
return 0;
}
int n = s.length();
int k = preLength(failTable,s.substring(0,n-1));
failTable[n-2] = k;
if(s.charAt(k) == s.charAt(n-1)){
return k+1;
}else{
return preLength(failTable,s.substring(n-1-k));
}
}
【问题讨论】:
-
使用分析器 - 在这里,看看:pawel-michalski-javnie.blogspot.com/2012/07/jvisualvm.html
标签: java performance algorithm string-matching