KMP算法证明

最近研究KMP,获得一些心得

问题描述:

P:模式字符串 P=P_0P_1\cdots P_{k-1}P_k\cdots P_{j-k}P_{j-k+1}\cdots P_{j-1}P_j      

j:用于记录模式串P的游标

S:文本模式串 S=S_{i-j}S_{i-j+1}\cdots S_{i-1}S_{i}

i:用于记录文本传的游标

条件:

    1、模式串P和文本串S除了最后一个字符,其他都一样

    P_s=P_0P_1\cdots P_{k-1}P_k\cdots P_{j-k}P_{j-k+1}\cdots P_{j-1} 

    S_s=S_{i-j}S_{i-j+1}\cdots S_{i-1}

    S_s=P_s

    2、已知存在k(最长公共元素长度),P1=P_0P_1\cdots P_{k-1}P2=P_{j-k}P_{j-k+1}\cdots P_{j-1},使P1=P2

    3、P_j\neq S_i

求证:

    是否存在m,1<m<k,使得

  S_m=S_{i-j+m}S_{i-j+m+1}\cdots S_iP_t=P_0P_1\cdots P_k\cdots P_{j-m}

  S_m= P_t

证明:

第一步:因为P_m=S_m    (P_m=P_mP_{m+1}\cdots P_k\cdots P_j), 所以只需要证明P_m=P_t

第二步:因为k是最长公共元素长度,而m<k,如果P_m=P_t成立,则与k是最长公共元素长度冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值