horspool 算法java实现_关于String里indexOf()的一些思考

评论

# re: 关于String里indexOf()的一些思考

2010-09-30 11:36

denniis

理论上说简单的匹配算法是O(m*n)的时间复杂度,而KMP可以达到O(m+n),在我的测试里,KMP的实现也很难超过简单的匹配算法,这个跟测试数据有一定关系,只有在m和n足够大,也就是匹配串和被匹配字符串足够长的时候,KMP算法才能体现出来一些优势来。

想超过简单匹配,可以尝试下BM、Shift-And、Shift-Or之类的匹配算法。  回复  更多评论

# re: 关于String里indexOf()的一些思考

2010-09-30 16:41

changedi

@denniis

哦,谢谢Denniis大牛的指教。我一直觉得在寻找200长度的模式串已经算是长的了。

有时间的话我会看看关于String search相关的paper的。  回复  更多评论

# re: 关于String里indexOf()的一些思考[未登录]

2010-12-31 00:11

tony

程序好像有点问题:

21 while((pat.charAt(j)==pat.charAt(i+1))&&(i>=0)) i = f[i];

应该是 不等于吧

测试了一下

s = "abxabababc"

pat = "ababc"

输出是: -1

结果应该是:5  回复  更多评论

# re: 关于String里indexOf()的一些思考

2011-01-01 20:01

changedi

@tony

没错,改过了,谢谢提示  回复  更多评论

# re: 关于String里indexOf()的一些思考

2012-12-29 14:56

dizh

while((pat.charAt(j)==pat.charAt(i+1))&&(i>=0)) i = f[i];

22 if(pat.charAt(j)!=pat.charAt(i+1)) f[j] = i + 1;

你写错了吧,应该是while里面是!=,if是==  回复  更多评论

# re: 关于String里indexOf()的一些思考

2012-12-29 14:59

dizh

还是说K的取值觉定了?

f[j] = k < j where k is the maximum of pat[0..k] == pat[j-k..j]

你这里说要去最大K,你那么做是对的,可是书上说要取最小K,当然得按照我和tony说的。  回复  更多评论

# re: 关于String里indexOf()的一些思考

2014-04-15 16:18

seki

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab

aaaaaaaaaab

第一行的a你弄1w个,第2行的a你弄1k个,再试试...  回复  更多评论

# re: 关于String里indexOf()的一些思考

2015-04-24 18:15

ss

@seki

KMP主要对字符重复性较高的字符串有着高性能,其他的情况,性能应该不会有很大差距。  回复  更多评论

# re: 关于String里indexOf()的一些思考[未登录]

2016-02-26 16:43

z

是因为charAt函数太耗时了 可以先toCharArray再访问数组  回复  更多评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值