• 数据结构(十一)串


    一、ADT

    定义

     术语

    ADT

     b1串匹配

    算法评测

    b2 蛮力匹配

     版本一

     版本2

    复杂度

     

     

     

    c1KMP算法:从记忆力到预知力

    蛮力,为何低效

    很多比对不必进行

    不变性

    只要记忆力足够强

    记忆力转为预知力

    c2KMP算法:查询表

    事先确定t

     算法

    实例

    模式串,下面是对应的查询表,倒数第三个字符秩为j=7,查询表中next值为3

     主串,如果轮到这个表项发挥作用,说明当前这轮比对中,此前七个字符都是成功的

     即此时的场景是如下,即模式串中的字符l,与文本串中某个不是l的字符比对失败

    比对之前为模式串拍一个快照

     手动执行KMP算法,当前j=7,指向模式串中的字符l,接下来,KMP将在查询表中取出对应的那一项next[7},并用它来更新j,这个表项是3,接下来会用秩为3的字符,也就是n取代l,并继续与文本串中此前失配的字符对齐,就像这样:

     

    为模式串再拍一张快照:

     

     前后两张快照,模式串向右移动了4个字符,KMP排除了三个对齐位置

    c3 KMP算法:理解next[]表

    自匹配=快速右移

    借助必要条件,排除对齐位置

    最长自匹配=快速右移+避免回退

    Next[0]==1

     巧妙地使用哨兵,可以简化代码,统一理解

    c4 KMP算法:构造next[]表

    递推

    实现

    c5 KMP算法:分摊分析

    c6 KMP算法:再改进

    反例

     改进

    失败情况:Brute-force

    失败情况:KMP

    多个字符对多个字符

    d1 BM算法:坏字符

    善待教训

    更多地关注教训,使之更早地出现,更大者更早出现

    前轻后重

    以终为始

     Bad-Character

    构造bc[]表

    最好情况

    最差情况

     利用好了教训,没有很好的利用经验

    e1 BM_GS算法:好后缀

    经验=匹配的后缀

    good suffix shift

    实例

    e2 BM_GS算法:构造gs表

    MS[]->ss[]

    ss[]->gs[]

     构造ss[]

    e3 BM_GS算法:综合性能

    性能

     

    纵览

    f1 Karp-Rabin算法:串即是数

     凡物皆数

     

    串亦为数

    f2 Karp-Rabin算法:散列

    数位溢出

    散列压缩

     散列冲突

     快速指纹计算

  • 相关阅读:
    构建之法阅读笔记04
    学习进度条10
    描绘用户场景并将典型用户和用户场景描述
    学习进度条09
    构建之法阅读笔记03
    学习进度条08
    每日站立会议10(完成)
    每日站立会议09
    团队成员细节工作项估计
    JS实现全选、不选、反选
  • 原文地址:https://www.cnblogs.com/aidata/p/11584445.html
Copyright © 2020-2023  润新知