• 关于模式匹配


    众所周知,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

  • 相关阅读:
    js确定取消—js确定取消判断
    css3响应式布局教程—css3响应式
    python算法介绍:希尔排序
    python教程:用简单的Python编写Web应用程序
    用Scratch制作一个Hello World程序
    scratch教程:学做控制类积木
    北邮《数据库原理与应用》应用阶段作业一带答案
    [20180614]删除bootstrap$记录无法启动2.txt
    [20180612]删除bootstrap$记录无法启动.txt
    [20180619]oradebug peek.txt
  • 原文地址:https://www.cnblogs.com/elnino/p/5676710.html
Copyright © 2020-2023  润新知