V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Ixizi
V2EX  ›  问与答

怎么高效的检测一个字符串在大量字符串是否有同名的?

  •  
  •   Ixizi · 2015-09-09 10:32:42 +08:00 · 1665 次点击
    这是一个创建于 3179 天前的主题,其中的信息可能已经有所发展或是发生改变。
    4 条回复    2015-09-09 12:44:18 +08:00
    pandachow
        1
    pandachow  
       2015-09-09 10:39:05 +08:00
    字符集多大?常见的中英文么?用 Wu Manber :

    http://webglimpse.net/pubs/TR94-17.pdf

    DNA 序列用 SBOM

    http://www-igm.univ-mlv.fr/~lecroq/string/bom.html
    Ixizi
        2
    Ixizi  
    OP
       2015-09-09 10:55:53 +08:00 via iPhone
    @pandachow 英文比较难看懂啊…
    pandachow
        3
    pandachow  
       2015-09-09 11:09:02 +08:00
    @Ixizi 如果你需要检测的字符串只有一个,用 Boyer-Moore 或者它的一个简化版本 Horspool 即可,多数浏览器,编辑器的 Ctrl (Cmd )+F 查找功能都是用它实现的。

    大名鼎鼎的 KMP 也可以,不过它速度战五渣。

    单字符串匹配基本有三种思路:
    1. 挨个读字符,检查是否有匹配。代表算法是 KMP 和 Shift-Or 。
    2. 构造一个滑动的窗口,然后一边滑动窗口,一边检查公共后缀。代表算法是 Boyer-Moore ,和它的一个著名的简化版本 Horspool 。
    3. 也是构造窗口,但是搜索的最长后缀。模式串较短的话,用 BNDM ,较长的话,用 BOM 。

    我只能帮你到这里了。
    wangleineo
        4
    wangleineo  
       2015-09-09 12:44:18 +08:00
    弱弱问一句, KMP 和 Boyer-Moore 思路不是很相似吗?效率会有很大差别?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:09 · PVG 04:09 · LAX 13:09 · JFK 16:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.