左式堆合并操作时间界的证明

阅读《数据结构与算法分析:java语言描述》一书时看到了对左式堆合并操作时间界的说明,但书中没有给出详细证明,这里自己思考并补全了证明细节,如下文(全文假定讨论的左式堆具有最小堆序,最大堆序的讨论是类似的)

证法一:

我们用 T [ i , j ] T[i,j] T[i,j] 表示右路径(从左式堆的根节点出发抵达根节点或以其右子女为根的子树中子女数不为2的节点的最短路径)长度为i的左式堆L1和右路径长度为j的左式堆R1合并的平均时间代价。现设i>=0 且 j>=0 , L1和R1合并时存在两种可能,如果R1的根节点关键码值大于等于L1根节点关键码值,则应将L1右子树代表的左式堆LR1和左式堆R1合并,此时由于L1的右路径长度为i,故LR1根节点的零路径长度为i-1,而LR1根节点的零路径长度是LR1左路径(定义类似右路径)长度和右路径长度中的较小值,且由左式堆的性质,LR1左路径长度应当大于等于右路径长度,于是LR1的右路径长度即为i-1,这样将左式堆LR1和左式堆R1合并的平均时间代价可以表示为 T [ i − 1 , j ] T[i-1,j] T[i1,j] 。如果R1的根节点关键码值小于L1根节点关键码值,则应将左式堆L1和R1右子树代表的左式堆RR1合并,通过和上文类似的分析可知合并的平均时间代价可以表示为 T [ i , j − 1 ] T[i,j-1] T[i,j1]

另外一个空左式堆和任意一个左式堆合并的时间代价显然为 O ( 1 ) O(1) O(1) ,因此 T [ − 1 , 0 ] = T [ − 1 , 1 ] = − − − = T [ − 1 , j ] = 1 T[-1,0]=T[-1,1]=---=T[-1,j]=1 T[1,0]=T[1,1]==T[1,j]=1

T [ 0 , − 1 ] = T [ 1 , − 1 ] = − − − = T [ i , − 1 ] = 1 T[0,-1]=T[1,-1]=---=T[i,-1]=1 T[0,1]=T[1,1]==T[i,1]=1

现在考虑由平面上整点 ( m , k ) (m,k) (m,k) − 1 < = m < = i − 1 < = k < = j -1<=m<=i -1<=k<=j 1<=m<=i1<=k<=j 以及这些整点中相邻点之间的垂直水平连线构成的矩形网格 ,由上文分析知,从整点 ( i , j ) (i,j) (i,j) 出发,首先右路径长度为i的左式堆和右路径长度为j的左式堆的合并操作对应于整点 ( i , j ) (i,j) (i,j) ,且在整点 ( i , j ) (i,j) (i,j) 对应的合并操作中要么右路径长度为i的左式堆根节点的右子树和右路径长度为j的左式堆合并,此时该合并操作对应于整点 ( i − 1 , j ) (i-1,j) (i1,j) ,要么右路径长度为i的左式堆和右路径长度为j的左式堆根节点的右子树合并,此时该合并操作对应于整点 ( i , j − 1 ) (i,j-1) (i,j1) ,完成整点 ( i , j ) (i,j) (i,j) 对应的合并操作相当于首先完成整点 ( i − 1 , j ) (i-1,j) (i1,j) ( i , j − 1 ) (i,j-1) (i,j1) 的合并操作,然后再将这一合并操作的合并结果(一颗左式堆)链接至i或j的右子树并在必要时调换i,或j的左右子树,因此整点 ( i , j ) (i,j) (i,j) 对应的合并操作也可视为连接 ( i − 1 , j ) (i-1,j) (i1,j) ( i , j − 1 ) (i,j-1) (i,j1) ( i , j ) (i,j) (i,j) 的一条垂直(水平边),更确切地说整点 ( i , j ) (i,j) (i,j) 对应的合并操作完全可以看做先完成 ( i − 1 , j ) (i-1,j) (i1,j) ( i , j − 1 ) (i,j-1) (i,j1) 对应的合并操作再沿这一垂直(水平边)回溯至整点 ( i , j ) (i,j) (i,j) . 类似地,对代表完成整点 ( i , j ) (i,j) (i,j) 对应的合并操作之前需要完成的合并操作的整点 ( i − 1 , j ) (i-1,j) (i1,j) 或整点 ( i , j − 1 ) (i,j-1) (i,j1) ,可以用和上文所述完全相同的方法继续分析,不断地抵达新的整点并选择连接这些整点中相邻整点的垂直水平边,这一过程中抵达一个新的整点后会向左或向下移动至下一个相邻整点,最终就可以得到向矩形网格左下方延伸的递降路径M,从 ( i , j ) (i,j) (i,j) 出发沿M向左下方前进抵达的每个整点(除 ( i , j ) (i,j) (i,j) 外)的纵坐标均小于等于其M上前驱整点的纵坐标,横坐标均小于等于其M上前驱整点的横坐标。如果令 ( i , j ) (i,j) (i,j) 为M的出发点,则M的终点最终必然会在 ( − 1 , 0 ) ( − 1 , 1 ) − − − ( − 1 , j ) ( 0 , − 1 ) ( 1 , − 1 ) − − − ( i , − 1 ) (-1,0) (-1,1) --- (-1,j) (0,-1) (1,-1) --- (i,-1) (1,0)(1,1)(1,j)(0,1)(1,1)(i,1) 之一,设其为 ( a , b ) (a,b) (a,b) ,这样对右路径长度为i的左式堆和右路径长度为j的左式堆的合并操作可以用M描述为首先完成 ( a , b ) (a,b) (a,b) 对应的合并操作,操作必然有一个被合并左式堆为空堆,时间代价为1,然后对 ( a , b ) (a,b) (a,b)在M上的前驱节点 ( a 2 , b 2 ) (a2,b2) (a2,b2) 将合并得到的左式堆链接至右路径长为 a 2 a2 a2 b 2 b2 b2(这取决于构造M时从 ( a 2 , b 2 ) (a2,b2) (a2,b2) 抵达 ( a , b ) (a,b) (a,b) 的方向(垂直或水平),即完成 ( a 2 , b 2 ) (a2,b2) (a2,b2) 对应的合并操作前最后需要完成的合并操作是什么)的左式堆的根节点右指针域并在必要时调换根节点左右子树的位置,这一操作时间复杂度显然为 O ( 1 ) O(1) O(1),该操作完成后 ( a 2 , b 2 ) (a2,b2) (a2,b2) 对应的合并操作即完成,此时的累计时间复杂度为2,随后从 ( a 2 , b 2 ) (a2,b2) (a2,b2)出发,对 ( a 2 , b 2 ) (a2,b2) (a2,b2) 在路径M上的前驱节点 ( a 3 , b 3 ) (a3,b3) (a3,b3) 而言将 ( a 2 , b 2 ) (a2,b2) (a2,b2) 对应的合并操作的合并结果链接至右路径长为 a 3 a3 a3 b 3 b3 b3的左式堆的根节点右指针域并在必要是调换根节点左右子树位置这一操作时间复杂度显然为 O ( 1 ) O(1) O(1),该操作完成后 ( a 3 , b 3 ) (a3,b3) (a3,b3) 对应的合并操作即完成,此时的累计时间复杂度为3.随后从 ( a 3 , b 3 ) (a3,b3) (a3,b3) 按照这一过程继续沿M向 ( i , j ) (i,j) (i,j) 回溯,当最终回溯至 ( i , j ) (i,j) (i,j) 后, ( i , j ) (i,j) (i,j) 对应的合并操作即完成,此时的累计时间复杂度恰为M上整点个数,即为M的路径长度加一

( a , b ) = ( − 1 , m ) (a,b)=(-1,m) (a,b)=(1,m) 0 < = m < = j 0<=m<=j 0<=m<=j 则M路径长为 i + 1 + j − m = i + j − m + 1 i+1+j-m=i+j-m+1 i+1+jm=i+jm+1

M上整点个数即M的累计时间复杂度为 i + j − m + 2 i+j-m+2 i+jm+2 由于M为向左下角延伸递降路径,出发点为 ( i , j ) (i,j) (i,j) ,终点为 ( − 1 , m ) (-1,m) (1,m) 故所有可能的M的数量为组合数 C ( i + j − m + 1 , i + 1 ) C(i+j-m+1,i+1) C(i+jm+1,i+1),理想情况下可以认为每一种路径可能出现的概率是相等的,均为 1 C ( i + j − m + 1 , i + 1 ) \frac{1}{C(i+j-m+1,i+1)} C(i+jm+1,i+1)1 ,于是每条路径M的期望时间复杂度为 i + j − m + 2 C ( i + j − m + 1 , i + 1 ) \frac{i+j-m+2}{C(i+j-m+1,i+1)} C(i+jm+1,i+1)i+jm+2 , 对所有可能的M的期望时间复杂度求和得到出发点在 ( i , j ) (i,j) (i,j) 终点在 ( a , b ) = ( − 1 , m ) (a,b)=(-1,m) (a,b)=(1,m) 0 < = m < = j 0<=m<=j 0<=m<=j 的所有路径的期望时间复杂度 i + j − m + 2 C ( i + j − m + 1 , i + 1 ) C ( i + j − m + 1 , i + 1 ) = i + j − m + 2 \frac{i+j-m+2}{C(i+j-m+1,i+1)}C(i+j-m+1,i+1)=i+j-m+2 C(i+jm+1,i+1)i+jm+2C(i+jm+1,i+1)=i+jm+2

可以认为当M的出发点为 ( i , j ) (i,j) (i,j) 时,终点落在 ( − 1 , 0 ) ( − 1 , 1 ) − − − ( − 1 , j ) ( 0 , − 1 ) ( 1 , − 1 ) − − − ( i , − 1 ) (-1,0)(-1,1)---(-1,j)(0,-1)(1,-1)---(i,-1) (1,0)(1,1)(1,j)(0,1)(1,1)(i,1) 上每一点的可能性是相等的,概率均为 1 i + j + 2 \frac{1}{i+j+2} i+j+21

于是出发点在 ( i , j ) (i,j) (i,j) 终点在每一个整点 ( − 1 , m ) (-1,m) (1,m) 0 < = m < = j 0<=m<=j 0<=m<=j 的所有路径的期望时间复杂度为 ∑ m = 0 j 1 i + j + 2 i + j − m + 2 = j + 1 − j ( j + 1 ) 2 ( i + j + 2 ) \sum_{m=0}^{j}{\frac{1}{i+j+2}i+j-m+2}=j+1-\frac{j(j+1)}{2(i+j+2)} m=0ji+j+21i+jm+2=j+12(i+j+2)j(j+1)

同理出发点在 ( i , j ) (i,j) (i,j) 终点在每一个整点 ( m , − 1 ) (m,-1) (m,1) 0 < = m < = i 0<=m<=i 0<=m<=i 的所有路径的期望时间复杂度为 ∑ m = 0 i 1 i + j + 2 i + j − m + 2 = i + 1 − i ( i + 1 ) 2 ( i + j + 2 ) \sum_{m=0}^{i}{\frac{1}{i+j+2}i+j-m+2}=i+1-\frac{i(i+1)}{2(i+j+2)} m=0ii+j+21i+jm+2=i+12(i+j+2)i(i+1)

累加以上两式得到整点 ( i , j ) (i,j) (i,j) 对应的左式堆合并操作对应的期望时间复杂度 T [ i , j ] = = i + 1 − i ( i + 1 ) 2 ( i + j + 2 ) + j + 1 − j ( j + 1 ) 2 ( i + j + 2 ) = i + j + 2 − i 2 + j 2 2 ( i + j + 2 ) − i + j 2 ( i + j + 2 ) T[i,j]==i+1-\frac{i(i+1)}{2(i+j+2)}+j+1-\frac{j(j+1)}{2(i+j+2)}=i+j+2-\frac{i^{2}+j^{2}}{2(i+j+2)}-\frac{i+j}{2(i+j+2)} T[i,j]==i+12(i+j+2)i(i+1)+j+12(i+j+2)j(j+1)=i+j+22(i+j+2)i2+j22(i+j+2)i+j

< = i + j + 2 − i j i + j + 2 − 1 2 ( 1 + 2 i + j ) <=i+j+2-\frac{ij}{i+j+2}-\frac{1}{2(1+\frac{2}{i+j})} <=i+j+2i+j+2ij2(1+i+j2)1

< = i + j + 2 − 1 2 ( 1 + 2 i + j ) <=i+j+2-\frac{1}{2(1+\frac{2}{i+j})} <=i+j+22(1+i+j2)1

当i,j充分大时,由最后一个不等式可见 T [ i , j ] < = i + j + 3 2 T[i,j]<=i+j+\frac{3}{2} T[i,j]<=i+j+23

T [ i , j ] = O ( i + j ) T[i,j]=O(i+j) T[i,j]=O(i+j) 设右路径长度为i的左式堆节点数为N,右路径长度为j的左式堆节点数为H,有 i < = [ l o g 2 N + 1 ] i<=[log_{2}N+1] i<=[log2N+1]{向下取整} j < = [ l o g 2 H + 1 ] j<=[log_{2}H+1] j<=[log2H+1]{向下取整} 故 T [ i , j ] = O ( l o g 2 N + l o g 2 H ) = O ( m a x ( l o g 2 N , l o g 2 H ) ) T[i,j]=O(log_{2}N+log_{2}H) =O(max(log_{2}N,log_{2}H)) T[i,j]=O(log2N+log2H)=O(max(log2N,log2H))

证毕

证法二:

T [ i , j ] T[i,j] T[i,j]的含义如证法一开头所述,这里i>=0,j>=0,T的边界条件和证法一所述相同,根据证法一开头的分析,我们可以认为L1右子树代表的左式堆LR1和左式堆R1合并以及左式堆L1和R1右子树代表的左式堆RR1合并的可能性相同,概率均为 1 2 \frac{1}{2} 21.从而可以认为 T [ i , j ] = 1 2 ( T [ i − 1 , j ] + T [ i , j − 1 ] ) + 1 T[i,j]=\frac{1}{2}(T[i-1,j]+T[i,j-1])+1 T[i,j]=21(T[i1,j]+T[i,j1])+1 ( 1 ) {(1)} (1)

这里1表示完成对 [ i − 1 , j ] [i-1,j] [i1,j] [ i , j − 1 ] [i,j-1] [i,j1]对应的合并操作后在 [ i , j ] [i,j] [i,j]对应的合并操作中链接和调换子树位置所需的常量时间

于是 T [ i , j ] = 1 2 T [ i − 1 , j ] + 1 2 T [ i , j − 1 ] + 1 = 1 2 T [ i − 1 , j ] + 1 2 ( 1 2 T [ i − 1 , j − 1 ] + 1 2 T [ i , j − 2 ] + 1 ) + 1 T[i,j]=\frac{1}{2}T[i-1,j]+\frac{1}{2}T[i,j-1]+1=\frac{1}{2}T[i-1,j]+\frac{1}{2}(\frac{1}{2}T[i-1,j-1]+\frac{1}{2}T[i,j-2]+1)+1 T[i,j]=21T[i1,j]+21T[i,j1]+1=21T[i1,j]+21(21T[i1,j1]+21T[i,j2]+1)+1

= 1 2 T [ i − 1 , j ] + 1 2 2 T [ i − 1 , j − 1 ] + 1 2 2 T [ i , j − 2 ] + 1 2 + 1 =\frac{1}{2}T[i-1,j]+\frac{1}{2^{2}}T[i-1,j-1]+\frac{1}{2^{2}}T[i,j-2]+\frac{1}{2}+1 =21T[i1,j]+221T[i1,j1]+221T[i,j2]+21+1

= 1 2 T [ i − 1 , j ] + 1 2 2 T [ i − 1 , j − 1 ] + 1 2 2 ( 1 2 T [ i − 1 , j − 2 ] + 1 2 T [ i , j − 3 ] + 1 ) + 1 2 + 1 =\frac{1}{2}T[i-1,j]+\frac{1}{2^{2}}T[i-1,j-1]+\frac{1}{2^{2}}(\frac{1}{2}T[i-1,j-2]+\frac{1}{2}T[i,j-3]+1)+\frac{1}{2}+1 =21T[i1,j]+221T[i1,j1]+221(21T[i1,j2]+21T[i,j3]+1)+21+1

= 1 2 T [ i − 1 , j ] + 1 2 2 T [ i − 1 , j − 1 ] + 1 2 3 T [ i − 1 , j − 2 ] + 1 2 3 T [ i , j − 3 ] + 1 2 2 + 1 2 + 1 =\frac{1}{2}T[i-1,j]+\frac{1}{2^{2}}T[i-1,j-1]+\frac{1}{2^{3}}T[i-1,j-2]+\frac{1}{2^{3}}T[i,j-3]+\frac{1}{2^{2}}+\frac{1}{2}+1 =21T[i1,j]+221T[i1,j1]+231T[i1,j2]+231T[i,j3]+221+21+1

=-----

= 1 2 T [ i − 1 , j ] + 1 2 2 T [ i − 1 , j − 1 ] + 1 2 3 T [ i − 1 , j − 2 ] + − − − + 1 2 j + 1 T [ i − 1 , 0 ] + 1 2 j + 1 T [ i , − 1 ] + 1 2 j + − − − + 1 2 + 1 ( 2 ) =\frac{1}{2}T[i-1,j]+\frac{1}{2^{2}}T[i-1,j-1]+\frac{1}{2^{3}}T[i-1,j-2]+---+\frac{1}{2^{j+1}}T[i-1,0]+\frac{1}{2^{j+1}}T[i,-1]+\frac{1}{2^{j}}+---+\frac{1}{2}+1^{(2)} =21T[i1,j]+221T[i1,j1]+231T[i1,j2]++2j+11T[i1,0]+2j+11T[i,1]+2j1++21+1(2)

由上式知,倘若有 T [ i − 1 , 0 ] − − − T [ i − 1 , j − 2 ] T [ i − 1 , j − 1 ] T [ i − 1 , j ] T[i-1,0] --- T[i-1,j-2]T[i-1,j-1]T[i-1,j] T[i1,0]T[i1,j2]T[i1,j1]T[i1,j] < = 2 i + 1 <=2i+1 <=2i+1

T [ i , j ] = 1 2 T [ i − 1 , j ] + 1 2 2 T [ i − 1 , j − 1 ] + 1 2 3 T [ i − 1 , j − 2 ] + − − − + 1 2 j + 1 T [ i − 1 , 0 ] T[i,j]=\frac{1}{2}T[i-1,j]+\frac{1}{2^{2}}T[i-1,j-1]+\frac{1}{2^{3}}T[i-1,j-2]+---+\frac{1}{2^{j+1}}T[i-1,0] T[i,j]=21T[i1,j]+221T[i1,j1]+231T[i1,j2]++2j+11T[i1,0]

+ 1 2 j + 1 T [ i , − 1 ] + 1 2 j + − − − + 1 2 + 1 +\frac{1}{2^{j+1}}T[i,-1]+\frac{1}{2^{j}}+---+\frac{1}{2}+1 +2j+11T[i,1]+2j1++21+1

= ∑ k = 0 j 1 2 k + 1 T [ i − 1 , j − k ] + 1 2 j + 1 T [ i , − 1 ] + 2 − 1 2 j =\sum_{k=0}^{j}{\frac{1}{2^{k+1}}T[i-1,j-k]}+\frac{1}{2^{j+1}}T[i,-1]+ 2-\frac{1}{2^{j}} =k=0j2k+11T[i1,jk]+2j+11T[i,1]+22j1

< = ( ∑ k = 0 j 1 2 k + 1 2 i + 1 ) + 1 2 j + 1 + 2 − 1 2 j <= (\sum_{k=0}^{j}{\frac{1}{2^{k+1}}2i+1})+\frac{1}{2^{j+1}}+2-\frac{1}{2^{j}} <=(k=0j2k+112i+1)+2j+11+22j1

= ( 2 i + 1 ) ( 1 − 1 2 j + 1 ) + 2 − 1 2 j + 1 =(2i+1)(1-\frac{1}{2^{j+1}})+2-\frac{1}{2^{j+1}} =(2i+1)(12j+11)+22j+11

= 2 i + 3 − 2 i + 2 2 j + 1 =2i+3-\frac{2i+2}{2^{j+1}} =2i+32j+12i+2

= 2 i + 3 − i + 1 2 j < = 2 i + 3 = 2 ( i + 1 ) + 1 =2i+3-\frac{i+1}{2^{j}}<=2i+3=2(i+1)+1 =2i+32ji+1<=2i+3=2(i+1)+1

而由边界条件知 T [ − 1 , 0 ] T [ − 1 , 1 ] − − − T [ − 1 , j ] T[-1,0]T[-1,1]---T[-1,j] T[1,0]T[1,1]T[1,j] < = 1 = 2 ∗ ( − 1 + 1 ) + 1 <=1=2\ast(-1+1)+1 <=1=2(1+1)+1

故由以上结论知 T [ 0 , 0 ] T [ 0 , 1 ] − − − T [ 0 , j ] T[0,0]T[0,1]---T[0,j] T[0,0]T[0,1]T[0,j] < = 2 ( 0 + 1 ) + 1 <=2(0+1)+1 <=2(0+1)+1

于是进一步可推得 T [ 1 , 0 ] T [ 1 , 1 ] − − − T [ 1 , j ] T[1,0]T[1,1]---T[1,j] T[1,0]T[1,1]T[1,j] < = 2 ( 1 + 1 ) + 1 <=2(1+1)+1 <=2(1+1)+1

这样层层向上递推,最终得到 T [ i , 0 ] T [ i , 1 ] − − − T [ i , j ] 均 < = 2 ( i + 1 ) + 1 T[i,0]T[i,1]---T[i,j] 均 <=2(i+1)+1 T[i,0]T[i,1]T[i,j]<=2(i+1)+1

T [ i , j ] < = 2 ( i + 1 ) + 1 T[i,j]<=2(i+1)+1 T[i,j]<=2(i+1)+1 ( 3 ) (3) (3) i > = 0 j > = 0 i>=0 j>=0 i>=0j>=0

现在取 m a x ( i , j ) = n max(i,j)=n max(i,j)=n,首先我们有 T [ 0 , − 1 ] = T [ 1 , − 1 ] = − − − T [ n , − 1 ] = T [ − 1 , 0 ] = T [ − 1 , 1 ] = − − − = T [ − 1 , n ] = 1 T[0,-1]=T[1,-1]=---T[n,-1]=T[-1,0]=T[-1,1]=---=T[-1,n]=1 T[0,1]=T[1,1]=T[n,1]=T[1,0]=T[1,1]==T[1,n]=1

T [ 0 , 0 ] = T [ 0 , 0 ] T [ 1 , 1 ] = T [ 1 , 1 ] − − − − T [ n , n ] = T [ n , n ] T[0,0]=T[0,0] T[1,1]=T[1,1] ----T[n,n]=T[n,n] T[0,0]=T[0,0]T[1,1]=T[1,1]T[n,n]=T[n,n]

然后我们有 T [ 0 , 1 ] = 1 2 T [ 0 , 0 ] + 1 2 T [ − 1 , 1 ] + 1 = 1 2 T [ 0 , 0 ] + 1 2 T [ 1 , − 1 ] + 1 = T [ 1 , 0 ] T[0,1]=\frac{1}{2}T[0,0]+\frac{1}{2}T[-1,1]+1=\frac{1}{2}T[0,0]+\frac{1}{2}T[1,-1]+1=T[1,0] T[0,1]=21T[0,0]+21T[1,1]+1=21T[0,0]+21T[1,1]+1=T[1,0]

接着 T [ 0 , 2 ] = 1 2 T [ 0 , 1 ] + 1 2 T [ − 1 , 2 ] + 1 = 1 2 T [ 1 , 0 ] + 1 2 T [ 2 , − 1 ] + 1 = T [ 2 , 0 ] T[0,2]=\frac{1}{2}T[0,1]+\frac{1}{2}T[-1,2]+1=\frac{1}{2}T[1,0]+\frac{1}{2}T[2,-1]+1=T[2,0] T[0,2]=21T[0,1]+21T[1,2]+1=21T[1,0]+21T[2,1]+1=T[2,0]

按照这一步骤向前递推最终得到

T [ 0 , 1 ] = T [ 1 , 0 ] T [ 0 , 2 ] = T [ 2 , 0 ] − − − T [ 0 , n ] = T [ n , 0 ] T[0,1]=T[1,0] T[0,2]=T[2,0] ---T[0,n]=T[n,0] T[0,1]=T[1,0]T[0,2]=T[2,0]T[0,n]=T[n,0] ( 4 ) (4) (4)

利用(4)并采用和以上和相同的步骤又可得到 T [ 1 , 2 ] = T [ 2 , 1 ] T [ 1 , 3 ] = T [ 3 , 1 ] − − − − T [ 1 , n ] = T [ n , 1 ] T[1,2]=T[2,1]T[1,3]=T[3,1]---- T[1,n]=T[n,1] T[1,2]=T[2,1]T[1,3]=T[3,1]T[1,n]=T[n,1]

继续递推,最终得到 T [ h , h + 1 ] = T [ h + 1 , h ] T [ h , h + 2 ] = T [ h + 2 , h ] − − − − T [ h , n ] = T [ n , h ] T[h,h+1]=T[h+1,h] T[h,h+2]=T[h+2,h]----T[h,n]=T[n,h] T[h,h+1]=T[h+1,h]T[h,h+2]=T[h+2,h]T[h,n]=T[n,h]

0 < = h < n 0<=h<n 0<=h<n

综上,对任意 0 < = g < = n 0 < = p < = n 0<=g<=n 0<=p<=n 0<=g<=n0<=p<=n 必有 T [ g , p ] = T [ p , g ] T[g,p]=T[p,g] T[g,p]=T[p,g]

i > = 0 i>=0 i>=0 j > = 0 j>=0 j>=0 i < = m a x ( i , j ) = n i<=max(i,j)=n i<=max(i,j)=n j < = m a x ( i , j ) = n j<=max(i,j)=n j<=max(i,j)=n T [ i , j ] = T [ j , i ] T[i,j]=T[j,i] T[i,j]=T[j,i]

这样对 T [ j , i ] T[j,i] T[j,i] 用(3)我们有 T [ j , i ] < = 2 ( j + 1 ) + 1 T[j,i]<=2(j+1)+1 T[j,i]<=2(j+1)+1

从而 T [ i , j ] = T [ j , i ] < = 2 ( j + 1 ) + 1 T[i,j]=T[j,i]<=2(j+1)+1 T[i,j]=T[j,i]<=2(j+1)+1

于是我们最终得到 T [ i , j ] < = 2 ( i + 1 ) + 1 T[i,j]<=2(i+1)+1 T[i,j]<=2(i+1)+1 T [ i , j ] < = 2 ( j + 1 ) + 1 T[i,j]<=2(j+1)+1 T[i,j]<=2(j+1)+1

从而得到时间界 T [ i , j ] = O ( i ) T[i,j]=O(i) T[i,j]=O(i) T [ i , j ] = O ( j ) T[i,j]=O(j) T[i,j]=O(j) T [ i , j ] = O ( m a x ( i , j ) ) T[i,j]=O(max(i,j)) T[i,j]=O(max(i,j))

即(由证法一结尾的说明) T [ i , j ] = O ( l o g 2 N ) T[i,j]=O(log_{2}N) T[i,j]=O(log2N) T [ i , j ] = O ( l o g 2 H ) T[i,j]=O(log_{2}H) T[i,j]=O(log2H) T [ i , j ] = O ( m a x ( l o g 2 H , l o g 2 N ) ) T[i,j]=O(max(log_{2}H,log_{2}N)) T[i,j]=O(max(log2H,log2N))

证完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值