使用最小广播消息计算生成树的算法

时间:2013-05-23 11:57:03

标签: algorithm computer-science distributed-computing

对于一项任务,我必须想出一种方法来修改这个算法,以便我可以删除用于降低消息复杂性的一条消息,但仍然保持算法的正确性。我老实说不知道该怎么做,因为据我所知,每个节点都需要知道它的哪个邻居在树中连接到它,哪些不是。

我应该补充说,这是使用同步系统

完成的

这是原始算法:

Initially parent = null, children = empty, and other = empty

Upon receiving no message:
  if p_i = p_r, and parent = null then
    send M to all neighbors
    parent := p_i

upon receiving M from neighor p_j:
  if parent = null then
    parent := p_j
    send "parent" to p_j
    send M to all neighbors except p_j
  else send "already" to p_j

upon receiving "parent" from neighor p_j:
  add p_j to children
  if children union other contains all neighbors except parent, then terminate

upon receiving "other" from neighbor p_j:
  add p_j to other
  if children union other contains all neighbors except parent, then terminate

我需要删除“已经”消息...所以我的第一步是删除最后一段代码和“else send”行已经“到p_j”。但现在呢?据我所知(这并不是非常好),我不能让处理器永远等待从所有邻居那里听到回来。我无法任意终止它,因为树可能还没有建成。

关于如何实现这一目标的任何提示?

1 个答案:

答案 0 :(得分:2)

在同步系统中,不按时接收消息也是信息。