1、这个算法分层构造各组件。对于每个k,第k层的各组件构成了一个生成森林,其中k层第一组件都包含一棵树,该树是MST的一个子图。K层的每个组件至少有2^k个节点。在每一层中,每个组件有一个独特的领导者节点。进程允许按一个固定的轮数O(n)来完成每层的工作。
2、算法从0层开始,各组件由单独的节点组成且不包含边。我们归纳地假设k层的各个组件已经确定了(包括它们的领导)。更特别地,假定每个进程都已经知道其组件的领导的领导的UID;这个UID就被用作整个组件的标识符。每个进程也知道它的哪条邻接边在该组件的树中。
3、为了得到K+1层的各个组件,K层的每个组件会沿着其生成树的边搜索组件的MWOE。领导者使用消息广播策略,沿着树的边广播搜索请求。每个进程都在自己的邻接边中找到一条权最小的组件的出向边;它为了完成这个工作,在所有的非树中的边上传递test消息,询问边的另一端点是否属于相同的组件(通过比较组件的标识符来确定)。然后各进程就会把本地最小权边的信息聚播给领导者,途中选择最小的。领导者得到的最小值就是整个组件的MWOE。
4、当K层的各组件都找到它们的MWOE后,这些组件就通过所有的MWOE合并为K+1层的组件。这涉及到K层的每个组件的领导者和与其MWOE相邻的进程通信,告知该相邻进程把这条边标记为属于新树;边的另一端进程也被告知做同样的工作。
5、然后对于K+1层的每个组件,按如下方式产生一个新的领导者。对由每组被合并到K+1层组件中的K层各组件,必定存在一条惟一的边e,e是该组的2个K层组件的共同MWOE,e的2个端点中具有更大UID的端点成为新的领导者。这个新的领导者利用本地可见信息来标识自己。
6、最后,使用广播在新的组件中传播这个新的领导者的UID