找回密码
 立即注册
楼主: johnsoncodehk

有哪些算法惊艳到了你?

[复制链接]
发表于 2021-7-22 09:48 | 显示全部楼层
看 KMP 被提了一万遍,特来为 Boyer-Moore 找点存在感
在长度 n 的字符串中寻找长度 m 的子串,Boyer Moore 算法的最优情况时间复杂度是 O(n/m),最差情况(打上补丁之后)是 O(n)
做到 O(n/m) 的方法特惊艳:从右往左匹配
具体点,假设在 "1234567" 里面查找 "abcd",一般的算法要比较 '1'!='a', '2'!='a', '3'!='a', '4'!='a' ... 然鹅 Boyer-Moore 算法只需要做一次字符比较就能得出结论:'4'!='d', 所以匹配窗口应该右移4位,越界,所以没有匹配  (当然为了快速得出匹配失败之后窗口最多可以右移多少位的结论需要花 O(m) 的时间预处理模式串 "abcd")




P.S. 具体算法这里用通俗语言讲得特别清楚:Boyer-Moore algorithm
P.P.S. 好消息好消息 c++17 标准里包含了实现 std::boyer_moore_searcher - cppreference.com
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 11:00 , Processed in 0.087341 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表