Content deleted Content added
No edit summary |
No edit summary |
||
Line 1:
The '''distributed minimum spanning tree (MST)''' problem involves the construction of a [[minimum spanning tree]] by a [[distributed algorithm]], in a network where nodes communicate by message passing. It is radically different from the classical sequential problem, although the most basic approach resembles [[Borůvka's algorithm]].
The problem was first suggested and solved in <math>O(V \log V)</math> time in 1983 by Gallager et. al.,<ref name="GHS" /> where <math>V</math> is the number of vertices in the [[graph theory|graph]]. Later, the solution was improved to <math>O(V)</math><ref>[[Baruch Awerbuch]]. “Optimal Distributed Algorithms for Minimum Weight Spanning Tree, Counting, Leader Election, and Related Problems,” ''Proceedings of the 19th ACM [[Symposium on Theory of Computing]] (STOC)'', New York City, New York, May 1987.
</ref> and finally<ref>Juan Garay, Shay Kutten and [[David_Peleg_(scientist)| David Peleg]], “A Sub-Linear Time Distributed Algorithm for Minimum-Weight Spanning Trees (Extended Abstract),” ''Proceedings of the IEEE [[Symposium on Foundations of Computer Science]]'' (FOCS), 1993.</ref> <ref>Shay Kutten and [[David_Peleg_(scientist)| David Peleg]], “Fast Distributed Construction of Smallk-Dominating Sets and Applications,” ''Journal of Algorithms'', Volume 28, Issue 1, July 1998, Pages 40-66.</ref>
<math>O(\sqrt V \log^* V + D)</math> where ''D'' is the network, or graph diameter.
<math>\Omega\left({\frac{\sqrt V}{\log V}}\right).</math>
Line 15:
== MST in message-passing model ==
[[Message_passing|Message-passing]] model is one of the common used models in [[distributed computing]]. In this model, each process is modeled as a node of a graph. The communication channel between two processes is an edge of the graph.▼
▲The [[Message_passing|
Two common used minimum spanning tree algorithms are [[Prim's_algorithm|Prim’s algorithm]] and [[Kruskal's_algorithm|Kruskal’s algorithm]]. However, it is difficult to apply these two algorithms in the message-passing model. The mainly challenges are:▼
* Both [[Prim's_algorithm|Prim’s algorithm]] and [[Kruskal's_algorithm|Kruskal’s algorithm]] executes sequentially. Therefore, when a process A is executing, other processes have to wait, which obviously degrades the performance.▼
▲Two
* Both [[Prim's_algorithm|Prim’s algorithm]] and [[Kruskal's_algorithm|Kruskal’s algorithm]] require processing one node or vertex at a time, making it difficult to make them run in parallel. (For example, Kruskal's algorithm processes edges in turn, deciding whether to include the edge in the MST based on whether it would form a cycle with all previously chosen edges.)
▲* Both [[Prim's_algorithm|Prim’s algorithm]] and [[Kruskal's_algorithm|Kruskal’s algorithm]]
Due to these difficulties, new techniques were needed for distributed MST algorithms in the message-passing model. Some bear similarities to [[Borůvka's algorithm]] for the classical MST problem.
== GHS algorithm ==
GHS algorithm is one of the best-known algorithms in distributed computing theory. This algorithm can construct the MST in [[Message_passing|Message-passing]] model.▼
▲The GHS algorithm of [[Robert G. Gallager|Gallager]], Humblet and Spira is one of the best-known algorithms in distributed computing theory. This algorithm can construct the MST in [[Message_passing|Message-passing]] model.
* The algorithm should run on connected undirected graph.<ref name="GHS" />▼
* Each node initially knows the weight for each edge incident to that node.<ref name="GHS" />▼
* The graph should have distinct finite weights assigned to each edge. (This assumption can be removed by breaking ties between edge weights in a consistent way.)
* Initially, each node is in a quiescent state and it either spontaneously awakens or awakened by receipt of any message from another node.<ref name="GHS" />▼
* Messages can be transmitted independently in both directions on an edge and arrive after an unpredictable but finite delay, without error.<ref name="GHS" />▼
▲* Initially, each node is in a quiescent state and it either spontaneously awakens or is awakened by receipt of any message from another node.
▲* Messages can be transmitted independently in both directions on an edge and arrive after an unpredictable but finite delay, without error.
* Each edge delivers messages in [[FIFO]] order.
=== Properties of MST ===
Let's define fragment of a MST G as a sub-tree of G, that is, a connected set of nodes and edges of G. There are two properties of MST:▼
# Given a fragment of a minimum spanning tree G, let e be a minimum-weight outgoing edge of the fragment. Then joining e and its adjacent non-fragment node to the fragment yields another fragment of G.<ref name="GHS" />▼
# If all the edges of a connected graph have different weights, then the MST is unique.<ref name="GHS" />▼
▲
▲# Given a fragment of a
▲# If all the edges of a connected graph have different weights, then the MST of the graph is unique.<ref name="GHS" />
These two properties form the
=== Description of the algorithm ===
The GHS algorithm assigns a ''level''
* '''Branch'''
* '''Rejected'''
* '''Basic'''
▲For level 0 fragments, each awaken node will do the followings:
# Send a message via the branch edge to notify the node on the other side.
▲# Chooses its minimum-weight incident edge and marks that edge as branch
#
The edge chosen by both nodes it connects becomes the core with level 1.
For a non-zero level fragment, an execution of the algorithm can be separated into three stages in each level:▼
▲For non-zero level fragment, an execution of the algorithm can be separated into three stages in each level:
==== Broadcast ====
The two nodes adjacent to the core broadcast messages to the rest of the nodes in the fragment. The messages are sent via the branch edge but not via the core. Each broadcast message contains the ID and level of the fragment. At the end of this stage, each node has received the new fragment ID and level.
====
In this stage,
==== Change core ====
After the
==== How to find minimum weight incident outgoing edge? ====
As discussed above, every node needs to find its minimum weight outgoing incident edge after the receipt of a broadcast message from the core. If node n receives a broadcast, it will pick its minimum weight basic edge and send a message to the node n’ on the other side with its fragment’s ID and level.
'''Case 1''': Fragment_ID(n) = Fragment_ID(n’).<br/>
Then, node n and n’ belongs to same fragment (so the edge is not outgoing).<br/>
'''Case 2''': Fragment_ID(n) != Fragment_ID(n’) and Level(n) <= Level(n’).<br/>
Then, node n and n’ belongs to the different fragments (so the edge is outgoing).<br/>
'''Case 3''': Fragment_ID(n) != Fragment_ID(n’) and Level(n) > Level(n’).<br/>
We
==== How to combine two fragments? ====
Let F and F’ be the two fragments that need to be combined. There
* '''Merge''': This operation occurs if both F and F’ share
* '''Absorb''': This operation occurs if Level(F) < Level(F’). The combined fragment will have the same level as F’.
Furthermore, when this operation occurs, F must be in the stage of changing the core while F’ can be in broadcast or
▲Furthermore, when this operation occurs, F must be in the stage of changing the core while F’ can be in broadcast or convertcast stage. Therefore, some work is needed to make sure absorb operation won’t interfere with operations in F’. Let e be the edge that F and F’ want to combine with and node n and n’ be the two nodes connected by e in F and F’ respectively. There are two cases to consider:<br/>
In this case, node n’ can simply
▲'''Case 1''': Node n’ hasn’t sent convertcast message back to the core.<br/>
▲In this case, node n’ can simply initial a broadcast to F to update the fragment ID and collect minimum weight outgoing edge in F.<br/>
That means n’ has
▲'''Case 2''': Node n’ has already finished the convertcast.<br/>
▲That means n’ has packed a minimum weight outgoing edge e’, which is different from e(otherwise, node n’ will postpone the response according to the algorithm), into the convertcast message that sends to the core and weight(e’) < weight(e). Therefore, e’ is still the minimum outgoing edge to choose after F is absorbed.
=== Progress property ===
This algorithm has a nice property that the lowest level fragments
== Approximation algorithms ==
|