迄今为止我看过最好的 Boyer Moore 讲解

2015-03-07 00:14:34 +08:00
 mengzhuo

https://www.youtube.com/watch?v=PHXAOKQk2dw

然后我按讲解写的demo
https://gist.github.com/mengzhuo/d713cb8be6c871995b79

3488 次点击
所在节点    编程
9 条回复
illuz
2015-03-07 00:33:37 +08:00
看了一下,跟 KMP 一样神奇
cbwzwsq
2015-03-07 11:20:23 +08:00
mengzhuo
2015-03-07 15:41:35 +08:00
@illuz

比KMP在特定条件下快啊啊哈哈哈
而且把偏移值加一就是Sunday算法了

@cbwzwsq
看过了,但是解释得不清楚
illuz
2015-03-07 19:51:45 +08:00
@mengzhuo 看了一下 Sunday 算法,也是很酷啊
mulog
2015-03-18 19:01:47 +08:00
demo 有bug誒?
boyer_moore("dd", "dddddd") 只輸出 [0, 2, 4]
感覺是 40行 index 不該是那樣變動的
mengzhuo
2015-03-18 21:47:57 +08:00
@mulog
这是对的,子字段确实只匹配0,2,4
你的预期不会是0,1,2,3,4吧……
mulog
2015-03-18 23:08:45 +08:00
@mengzhuo
囧了 是的。。。 请问这是个约定俗成的规则吗? 不考虑 overlapping 的匹配?
因为我 google 了一下似乎没看到相关说明
以及当时搜到了一个 UT Dallas 的 这个算法的 demo,他是找出了所有匹配的,即0 1 2 3 4...
mulog
2015-03-18 23:09:40 +08:00
mengzhuo
2015-03-19 10:00:07 +08:00
@mulog
你好仔细,自愧不如中……

两者差在,你帖子里demo的算法并没有跳过整个匹配项,只按好字符移动。
那么必然速度就慢多了。

当然,如果需求是要匹配overlapping的项的话,肯定得按demo里的走了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/175050

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX