zoukankan      html  css  js  c++  java
  • 最小表示法证明

    最小表示法证明

     

    设字符串为a[1],a[2],……,a[n]。该字符串形成环,即a[n]的后继为a[1],两者连接起来。

     

    设置两个指针i,j,一开始i=1,j=2,

    1.比较以i,j为始的字符串,字符串长度k从1到n递增,两个字符串不再相等或长度为n之后结束比较。

    2.当字符串长度k为n时,结束比较。当字符串长度k不为n,即两个字符串不相等,当以i为始的字符串大于以j为始的字符串(比较第k位即可,前面k-1位相等),则i=max(i+k+1,j+1);

    当以j为始的字符串大于以i为始的字符串(比较第k位即可,前面k-1位相等),则j=max(j+k+1,i+1);

    3.直到i>n或者j>n结束操作,最小字符串(其中一个)的首位置为a[min(i,j)];否则重复1,2,3操作。

     

    证明该方法的正确性:

    I.每次进行1,2操作后a[1]~a[i-1](排除j),a[1]~a[j-1](排除i)不能够作为最小字符串的首位置

    证明:

    设上一次的值为i,j,这一次的值为i’,j’。归纳假设,设上一次的值i和j满足a[1]~a[i-1] (排除j),a[1]~a[j-1](排除i)不能够作为最小字符串的首位置。

     

    1操作有a[i+k]>a[j+k]或a[i+k]<a[j+k](k<n):

     

    A:当a[i+k]>a[j+k],a[i]~a[i+k]都不能够作为最小字符串的首位置,因为以a[i+t](0<=t=k)作为字符串的首位置,大于以a[j+t]作为字符串首位置的字符串【它们前k-t位相同,而a[i+t+(k-t)]>a[j+t+(k-t)],即a[i+k]>a[j+k]】。即a[1]~a[i+k]不能够作为最小字符串的首位置。

     

    i’=max(i+k+1,j+1)是因为前面已经得证a[1]~a[i+k],a[1]~a[j-1]不能够作为最小字符串的首位置,而且j(j')可以排除。

     

    此时的i’满足a[1]~a[i’-1] 不能够作为最小字符串的首位置(排除j');

    j’=j,当前a[i]不能够作为最小字符串的首位置,满足a[1]~a[j’-1] 不能够作为最小字符串的首位置,得证。

     

    排除j,排除i的例子:

    cabcab的(i,j)变化:(1,2)->(3,2)(排除2)->(4,2) (排除2)->(5,2) (排除2)->结束

    bcabca的(i,j)变化:(1,2)->(1,3)(排除3)->(4,3) (排除3)->(5,3) (排除3)->(6,3) (排除3)

     

     

    B:当a[i+k]<a[j+k],同理得证。

     

    II.当k=len时退出,min(i,j)为最小字符串的首位置

    证明:

    设此刻的值为i,j。i,j不相等,设i<j。

    a[i]~a[i+len-1]和a[j]~a[j+len-1]相等,则说明j-i为一个循环节,其中一个最小字符串的首位置为i~j-1的其中一个。

    前面已证明a[1]~a[i-1](排除j),a[1]~a[j-1](排除i)不能够作为最小字符串的首位置,其中包含a[i+1]~a[j-1],所以得出最小字符串的开头位置为a[i](当然a[j]也可以,距离相差r*(j-i)的对应的数也可以)。

     

     

    III. 直到i>n或者j>n结束操作

    证明:

    前面已证明a[1]~a[i-1](排除j),a[1]~a[j-1](排除i)不能够作为最小字符串的首位置,当i>n,则位置j以外的字符串的其它数不能够作为最小字符串的首位置,即位置i为最小字符串的首位置;当j>n,则位置i以外的字符串的其它数不能够作为最小字符串的首位置,即位置j为最小字符串的首位置。得证。

     

    时间复杂度:

    每次操作1,2结束后,max(i,j)都会增加,而初始max(i,j)=2,而倒数第二次max(i,j)<=n,所以最多执行n次,时间复杂度O(n)。

     

     

     

  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/cmyg/p/7203585.html
Copyright © 2011-2022 走看看