对于一项任务,我必须想出一种方法来修改这个算法,以便我可以删除用于降低消息复杂性的一条消息,但仍然保持算法的正确性。我老实说不知道该怎么做,因为据我所知,每个节点都需要知道它的哪个邻居在树中连接到它,哪些不是。
我应该补充说,这是使用同步系统
完成的这是原始算法:
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”。但现在呢?据我所知(这并不是非常好),我不能让处理器永远等待从所有邻居那里听到回来。我无法任意终止它,因为树可能还没有建成。
关于如何实现这一目标的任何提示?
答案 0 :(得分:2)
在同步系统中,不按时接收消息也是信息。