zoukankan      html  css  js  c++  java
  • 有关字符串循环节的一些性质

    我们最常用的求一个字符串循环的算法是kmp。

    结论:

    设$len=n-nxt[n]$

    (1) $nxt[n]=0$  不存在循环节

    (2) $nxt[n]>0$ $&&$ $n\%len eq0$ 存在循环节但是长度不整除

    (3) $nxt[n]>0$ $&&$ $n\%len=0$ 存在整除循环节

    而且更长的循环节一定是$len$的倍数。

    证明1:若为(2),那么不存在一个长度更长的循环节使其整除。

    一个小性质:对于(2),(3)情况,则$forall 1leq l leq r leq n$,$S[l,r]$满足(2),当$(r-l+1)\%len=0$时满足(3)。

    考虑反证法,证明不存在整除循环节$len$,满足$exists nxt[n]>n-len$。

    (1)$len\%(n-nxt[n])=0$,显然矛盾。

    (2)$len\%(n-nxt[n]) eq 0$,设$x=n-nxt[n]$。

    $S[1,len]$和$S[len+1,2*len]$之间产生$S[1,x]$的前后缀相等,设其长度为pre。

    考虑证明$nxt[n]=n-x+pre$,只需证明$S[x-pre+1,2*x-pre]=S[1,x]$即可,也是用$S[1,len]$和$S[len +1,2*len]$交叉的证明。

    都推出了矛盾就证完了。

    证明2:若(1),则所有整除循环节长度是$len$的倍数。

    证明与证明1非常类似,都是以推出更长循环节为矛盾的。

    但有时我们并不满足于对于一个串$|S|$以$O(n^2)$的复杂度搞出所有子串的循环节。

    设以$i$为左端点开始的子串不同最小循环节的个数为$g(i)$。

    结论:$sum_{i=1}^{n}g(i)$是$n*logn$级别的。

    证明:我想证明$g(i)$是logn级别的,但是遇到了瓶颈啊。。。

  • 相关阅读:
    HTML5 新标签
    lAMBDA表达式剖析
    whitespace 属性设置如何处理元素内的空白。
    "~/" asp.net 表示路径的方法
    ASP.NET Session详解
    关于CSS Selector的优先级
    关于汉字转拼音
    ChildActionOnly + ActionName的用法
    html中的caption是什么用
    window.location.href location.href parent.location.href
  • 原文地址:https://www.cnblogs.com/asd123www/p/10249761.html
Copyright © 2011-2022 走看看