zoukankan      html  css  js  c++  java
  • 差异---虐爆了yxs的 后缀数组裸题 板子题 单调栈的简单应用 字符串的基础理解考察题

      先玩柿子,发现可以拆开,前半部分可以瞬间求出,于是只求后半部分

      然后抄板子就好了,完结撒花

      下边是个人口胡,因为已经被虐爆头脑不清醒了

      定义:LCP(a,b)为排名为a,b两个后缀的最长公共前缀

      证明1:LCP(i,k)=min(LCP(i,j),LCP(j,k)),(i<=j<=k)

        sa[i]和sa[j]的前LCP(i,j)个字符相等,sa[j]和sa[k]的前LCP(j,k)个字符相等,所以LCP(i,k)不会小于右式。

        然后(skyh:显然。)因为后缀们已经被排好序,所以不存在形如$left{ egin{array}{cc}a&b&c\a&b&d&e\a&b&c&e end{array} ight.$
    的后缀,一旦在中间有LCP的缩小,将来不会再次复原,
    所以LCP(i,k)不会大于右式。

        所以左式等于右式。

      证明2:LCP(i,k)=min(LCP(j,j-1)),i<=j<=k

        由证明1,LCP(i,k)=min(LCP(i,i+1),LCP(i+1,k))

                  =min(LCP(i,i+1),LCP(i+1,i+2),LCP(i+2,k))

                  ......    

        于是左式等于右式。

      定义:height[i]=LCP(i,i-1),h[i]=height[rk[i]]

        注意左i是排名,右i是位置

      证明口胡3:h[i]>=h[i-1]-1

        不妨设 rk[k-1]=rk[i-1]-1,则h[i-1]==LCP(rk[k-1],rk[i-1])

         如果char[k-1]!=char[i-1],那么h[i-1]=0,上式显然成立

         如果char[k-1]==char[i-1],那么同时去掉char[k-1]和char[i-1],string[k-1]变成string[k],string[i-1]变成string[i],显然LCP(rk[i],rk[k])==h[i-1]-1,而且由于rk[k-1]<rk[i-1],rk[k]<rk[i],所以前一句应该写成LCP(rk[k],rk[i])==h[i-1]-1了

        由证明2,LCP(rk[k],rk[i])<=LCP(rk[i]-1,rk[i]),即LCP(rk[k],rk[i])<=h[i]

        等量代换,h[i]>=h[i-1]-1

        这个定理是求h数组的复杂度保证。

      求sa流程:

        1.将原字符作为第一关键字塞进桶里,无第二关键字

        2.桶排序,得到初始sa

        3.处理出按第二关键字排名进行排序的第一关键字位置(起始位置)

        4.桶排序,注意当第一关键字相同时按第二关键字排序

        5.排序结果作为下一次倍增的第一关键字,注意判断相等

        6.判断排名数量,如果有并列,重复3~5

        7.没有并列,则已经求出sa

      求rank流程:

        1.这还用求吗一个for就把sa变成rank

      求height流程:

        1.首先提醒自己h数组是根据下标(位置)转移的,不是排名

        2.枚举位置,初始为0

        3.根据证明3,可以以h[i-1]-1为起点,然后暴力拓展

        4.一个for循环结束,求出height或h

        注意当rk[i]==1时,证明3所证的定理就萎了..只能特判它等于0(有没有发现证明过程中运用了一个k,还说rk[k]<rk[i])(其实i==1时定理也不成立,因为用到了i-1,但是因为k初始就是0,它一开始就是暴力...)

        upd:我在写上一段的时候突然发现,定理成立需要很多条件...例如i>1,k>1,rk[i]>1,rk[i-1]>1...而我并没有办法控制这些全部满足时才使用定理求解...所以我在此恳求看到此处的oier们..谁能解决这个问题...谢谢了...(雾

       

  • 相关阅读:
    PPT图片
    饥荒Steam相关mod代码
    Ubuntu20.04更换阿里源 source.list文件
    中断处理与进程调度的区别与联系
    原语和系统调用的区别
    立下个flag,这个月底之前要发一个深度学习入门系列的文章
    conda安装skimage
    机器学习入门(三)
    zip安装的MySQL绑定my.ini配置文件
    Anaconda配置安装
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11291021.html
Copyright © 2011-2022 走看看