数据结构中Java实现KMP与BF算法对比

来源:互联网 发布:cisco 端口配置 编辑:程序博客网 时间:2024/06/14 03:44
public class KMPANDBF {public int indexBfCount(SeqString s,SeqString t,int begin){int slen,tlen,i=begin,j = 0;int count = 0;slen =s.length();tlen = t.length();while ((i<slen)&&(j<tlen)) {if (s.charAt(i)==t.charAt(j)) {i++;j++;}else{i = i - j +1;j = 0;}count++;}return count;}public int indexKMPCount(SeqString s,SeqString t, int begin) {int[] next = getNext(t);int i =begin ;int j =0;int count = 0;while (i<s.length()&&j<t.length()) {if (j == -1||s.charAt(i) == t.charAt(j)) {i++;j++;}else if(j == 0){i++;}else {j = next[j];}count++;}return count;}public int[] getNext(SeqString T) {int[] next = new int[T.length()];int j =1;int k = 0;next[0] = -1;next[1] = 0;while (j<T.length()-1) {if (T.charAt(j)==T.charAt(k)) {next[j+1] = k +1;j++;k++;}else if (k == 0) {next[j +1]=0;j++;}else {k = next[k];}}return (next);}public static void main(String[] args) {SeqString s1 =new SeqString("abcdbacc");SeqString t1 =new SeqString("abcd");KMPANDBF c =new KMPANDBF();System.out.println("测试1:主串 S = "+ s1.toString()+", 模式串 T = "+ t1.toString());System.out.println("BF算法比较次数: "+c.indexBfCount(s1, t1, 0) );System.out.println("KMP算法比较次数:" +c.indexKMPCount(s1, t1, 0));SeqString s2 = new SeqString("aaaaaaaaa");SeqString t2 = new SeqString("aaaab");System.out.println("测试1:主串 S = "+ s2.toString()+", 模式串 T = "+ t2.toString());System.out.println("BF算法比较次数: "+c.indexBfCount(s2, t2, 0) );System.out.println("KMP算法比较次数:" +c.indexKMPCount(s2, t2, 0));}}

0 0
原创粉丝点击