Ixizi
V2EX  ›  问与答

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

  •  
  •   Ixizi · Sep 9, 2015 · 2159 views
    This topic created in 3952 days ago, the information mentioned may be changed or developed.
    4 replies    2015-09-09 12:44:18 +08:00
    xxm459259
        1
    xxm459259  
       Sep 9, 2015
    字符集多大?常见的中英文么?用 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
       Sep 9, 2015 via iPhone
    @pandachow 英文比较难看懂啊…
    xxm459259
        3
    xxm459259  
       Sep 9, 2015
    @Ixizi 如果你需要检测的字符串只有一个,用 Boyer-Moore 或者它的一个简化版本 Horspool 即可,多数浏览器,编辑器的 Ctrl (Cmd )+F 查找功能都是用它实现的。

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

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

    我只能帮你到这里了。
    wangleineo
        4
    wangleineo  
       Sep 9, 2015
    弱弱问一句, KMP 和 Boyer-Moore 思路不是很相似吗?效率会有很大差别?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2820 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 07:44 · PVG 15:44 · LAX 00:44 · JFK 03:44
    ♥ Do have faith in what you're doing.