Republican

  :: 首页 :: 新随笔 :: :: 订阅 :: 管理 ::

Selected as the "No.1 popular" from the top ten classsic algorithms in the world through web investigation,

I spent no more than 2 hours for a breath-retaking tour and detour around the entire Union-Find Algorithm:

Here's my break-into-pieces whole analysis:

Basic Concept--The inverse form of Ackermann Function

AckermannFunction Definition:(you can alternatively define AckermannFunction '--1' formular to another form, for instance, A(1,j)=j+1 for different occasions

A(1,j)=2exp(j),   j>=1   --1

A(i,1)=A(i-1,2),  i>=2   --2

A(i,j)=A(i-1,A(i,j-1)), i,j>=2     --3

Then we define the inverse of Ackermann Function as:

a(M,N)=min{i>=1|A(i,[M/N])>logN}

it can be easily seen  that one calculates the times that the iAckermann Function operates even much slower than log*N.

Now we are going to prove that any kind or order of M=omiga(N) union-find operations take a total of O(Mlog*N) times:

由于定理太多,直接采用多线推理解说,证明过程溶于解说中:规定秩为r,树为T,秩组为G

Conclusion 1:在一棵二项树中,执行任何union指令,一个秩为r的node一定至少含有2exp(r)个子节点。该定理通过数学归纳法和假设法可以pass。

假设T具有最少子节点,T的形成是最后一次union op为子节点T1和T2的union。如果T1秩为r,那么T1高度为r,且T1含有2exp(r)个子节点,T1也有最少子节点,而T1节点数一定小于T,矛盾,从而T1的秩<=r-1。又因为T是由T1和T2合并而成,T1已经小于T的秩,T2就是唯一能增加T的秩的树,那么T2一定>=T2,又T2<=r-1,所以T2的秩r2一定=r-1,从而T1秩为r-1.因此,T的子节点数目为2exp(r-1)+2exp(r-1)为2exp(r). 定理1得证。

Conclu 2:秩为r的节点数目(横向)最多为N/2exp(r)

由conclu1结论很容易prove。

Conclu3:从树叶到根的routine上,所有的节点的秩单调递增。

树的基本特征,一眼看出,在做路径压缩操作时,秩不改变。

 

再做一些定义和差异化标志。

定义:把一片森林中的树按照秩的不同,分成不同秩组,秩r在秩组G(r)中,每个秩G的最大秩为F(G),则G和F互逆。

差异化规则,简化起见:1,如果节点v是森林的根,或者v的父亲是根,那么该节点v为特殊顶点,给v做标记Z。

2,如果节点v不是情况1,那么给v做标记Y。

现在求,M次随机的Union/Find操作总共有多少Y和Z?

Conclu4:任意一次Union/Find操作,Y和Z标记的总和等于路上的节点个数。

一眼看出。

Conclu5:M次操作后,N的标记个数最多共有M(G(N)+2)

执行一次Union/Find操作,需要经过根节点和根的子节点(秩为1),总共2个节点,而一次操作最多经过G(N)节点,所以总共有M(G(N)+2)个标记Z。

Conclu6:秩组g>0中,节点个数V(g)最多为N/2exp(F(g-1))个

有Conclu2可知,秩为r的节点个数最多为N/2exp(r)个。那么秩组中的所有节点个数

V(g)<=N/2exp(F(g-1)+1) + ...+N/2exp(F(g))

      <=N/2exp(F(g-1)+1) + ... + infinity

     <=N/2exp(F(g-1)+1) * (1/2exp(0) + 1/2exp(1)  + ... + 1/2exp(infinity))

     <=N/2exp(F(g-1))

Conclu7:秩组g所有节点,最多可以有NF(g)/2exp(F(g-1))个标记Y

每个节点最多有F(g)个Y标记,所以由Conclu6可证。

Conclu8:结合Conclu7和Conclu5,可求得一棵森林中,所有的节点在M次操作后,总共的标记数

S = M(G(N)+2) + N* SUM(F(g)),g=0,1,2...G(N))/2exp(F(g-1))

选取F(g)方式:按照递归函数F(g)=2exp(F(g-1))和终结条件F(0)=0----单值Ackermann函数

得出S=O(Mlog*N) + O(Nlog*N) = O(Mlog*N)

这是一个时间界,但不够严格,用到类似单值Ackermann函数,求证并不困难,分析也简单,主要难点在于求证数量多,而且连接紧凑。

 

 

 

 

posted on 2012-08-14 23:58  Republist  阅读(290)  评论(0)    收藏  举报