需要考虑的事项
我的第一个策略是等到我收到来自所有邻居的消息并在广播之前取得分钟,但这导致只有领导者周围的第一层(距离= 1)接收消息,因为他们不会收到来自节点的消息,真实距离为2.
答案 0 :(得分:1)
我假设邻居之间每条边的长度是1。让每个节点保持到领导者的路线,不一定是最短的(最初为空)。让每个节点在到达领导者的可行路线后立即将路线及其所有邻居的列表发送给这些邻居。
最初领导者的邻居会发出他们的路线(一跳)。这将导致节点两跳以计算路由并将其发送出去。在N个步骤之后,节点N远离领导者将至少具有到达它的路线,不一定是最短的。
一旦一个节点有一条到领导者的路由,它就会将该路由连同其邻居列表一起发送到该路由上的下一个跃点节点,该路由将根据其发送的邻居列表重新发送它。路线本身,所以我们知道路线上的意见分歧不会导致消息无限期地循环发送。
领导者知道它的邻居,所以它知道它的所有邻居何时向它发送了这个信息,并且通常它有足够的信息来知道它何时有来自图中所有节点的报告。然后,它可以汇集所有最短路径报告中的邻居列表,以计算出从每个节点到领导者的正确最短路径,并将带有此消息的消息发送到图中的每个节点。
在每个时间点,领导者都有一组节点,它们从中接收到信息(到领导者和邻居列表的路径)和一组它知道存在的节点(它自己的邻居和邻居提到的其他节点)收到的消息)。当它从中接收到信息的节点集与领导者知道的节点集相同时,它具有所需的所有信息。如果领导者不知道任何其他节点,则考虑从这样的节点到领导者的路线。当您前往领导者时,您最终会遇到领导者或领导者本身已知的节点。考虑第一个这样的节点。领导者知道其邻居,在这种情况下,领导者知道存在未知节点并且它还没有其邻居列表,或者领导者知道该节点存在但不知道其邻居。在任何一种情况下,领导者已知的节点集合大于领导者具有邻居列表的节点集合,因此领导者知道不会停止收集消息。