• 关于模式匹配


    众所周知,KMP算法是模式匹配中一个最为经典的算法,然而它也是一个极为复杂的算法。

    我TM搞了半天也搞不懂是个什么掉意思。QNM。

    又学习到一个Sunday算法,易懂又高效。

    在说Sunday算法之前,我们先说说它的前身Horspool算法。

    这个算法的理念是

    1.比较模式串和目标串时,不是传统的从左向右比较,而是从右向左比较。

    2.遇到mismatch时,寻找mismatch的那个字符在模式串中的位置,并将模式串移动。

    例子:

    匹配串:abcbc sdxzcxx

    模式串:cbcac

    这个时候我们从右向左进行对暗号,c-c ,恩对上了,第二个b-a ,不对啊,我们应该怎么办?难道就这么放弃么。于是,模式串从不匹配的那个字符开始从右向左寻找匹配串中不匹配的字符b 的位置,结果发现居然有,赶快对上赶快对上,别耽误了。

    匹配串:abcbcsd xzcxx

    模式串: cbcac

    然后继续从最右边的字符从右向左进行比较。这时候,我们发现了,d-c 不匹配啊,而且模式穿里面没有噢,没办法,只好移动一个模式串长度的单位了。

    匹配串:abcbcsdxzcxx

    模式串:      cbcac

     

    而Sunday算法在此基础上做了一点改进,即如果出现mismatch,直接找下一个字符在模式串中的位置。废话不多说,上例子

    匹配串:abcbc zdxzc

    模式串:zbcac

    恩,这里我们看到b-a 没有对上,我们就看匹配串中的z 在模式串的位置,然后,嘿嘿。

    匹配串:abcbczdxzc

    模式串:     zbcac

    如果模式串中的没有那个字符怎么办呢?很简单,跳过去呗。

    匹配串:abcbc edxzcs

    模式串:zbcac

    e 不在模式串中出现

    那么我们就

    匹配串:abcbcedxzcs

    模式串:      zbcac

  • 相关阅读:
    栈的压入、弹出序列
    CSS min-height 属性
    ie6 png 透明的解决方法,大网站都在用
    div覆盖div DIV相互重叠如何解决
    div代码大全 DIV代码使用说明
    CSS中ul li居中的问题
    复选框单选框与文字对齐问题的研究与解决
    CSS利用filter/opacity实现背景透明
    什么是块级元素和内联级元素(二)
    网页上PNG透明图片的运用(ie6+滤镜)
  • 原文地址:https://www.cnblogs.com/elnino/p/5676710.html
Copyright © 2020-2023  润新知