1 树状算法的基本理论
树算法常用于在分布式系统中实现广播操作,这里您提供了一些基本定义和一个引理关于广播操作的消息复杂度和时间复杂度的下界。
1.1 广播定义
广播操作是由单个处理器(源节点)发起的,其目的是向系统中的所有其他节点发送一条消息。
1.2 图的基本定义
两节点间的距离:在无向图G中,节点u 和v之间的距离是指u和v之间最短路径的长度。
节点的半径:节点u的半径是指u与图中任何其他节点之间的最大距离,表示为
图的半径:图的半径是指图中任何节点半径的最小值,表示为
图的直径:图的直径是指图中任意两个节点之间最大距离的最大值,表示为
引理:
消息复杂度:广播的消息复杂度至少是 n - 1 ,其中 `n` 是图中的节点数。这是因为至少需要 n - 1 条消息才能确保每个节点都收到源节点发出的消息。
时间复杂度的下界:源节点的半径是时间复杂度的下界。这意味着,广播消息到达所有节点所需的最短时间至少是等于源节点的半径的。这是因为在最坏情况下,消息必须传递源节点的半径那么远才能到达最远的节点。
这些定义和引理在设计和分析分布式算法时非常重要,尤其是在确定算法的效率和性能限制时。例如,在使用树或者其他图结构来传播消息时,了解这些基本概念可以帮助我们优化广播操作的时间和消息开销。在实际应用中,如在网络协议或并行计算中,这些理论可以指导我们选择合适的数据结构和算法以达到高效的通信。
2 泛洪算法Flooding algorithm
洪泛算法是网络通信中确保消息到达网络内所有节点的一种基本技术。其操作流程如下:
a.源节点(根节点)将消息发送给它的所有邻居节点。
b.每个接收到消息的节点在第一次收到消息时将该消息转发给它的所有邻居节点。
c.如果后来节点通过其他路径再次收到同一消息,该节点可以丢弃这条消息。
在同步系统中,所有节点的算法步骤都是同步执行的,洪泛算法将创建一个从根节点开始的广度优先搜索(BFS)生成树。这是因为每个节点将在其父节点在BFS树中的下一步之后接收到消息,确保消息按层从源节点向外传播。
然而,在异步系统中,消息传递的时间不受保证。消息在节点间的传递可能需要不同的时间,这意味着洪泛算法创建的生成树可能不是BFS树。消息可能会以与BFS预测不同的顺序到达节点。
异步系统中的停止条件:
来自所有邻居的消息接收:一种可能的停止条件是,当节点从所有邻居那里都收到了相同的消息时,它可以停止转发该消息。这确保了消息遍历了所有可能的路径。
序列号:源节点可以在每条消息中包含一个序列号。节点只转发它们之前未见过的序列号的消息,并且在收到旧序列号的消息时停止转发。
确认消息:节点可以向发送者回送确认消息。一旦节点从它转发消息的所有邻居那里收到了确认,它就可以停止参与洪泛。
生存时间(TTL):每条消息可以携带一个TTL,每经过一个节点就减一。当TTL降到零时,消息不再被转发。
还需要注意的是,在没有可靠故障检测器的异步系统中,没有完美的停止条件可以保证消息被所有节点接收,因为总是存在消息还没有被慢速或暂时不可达的节点接收或发送的可能性。
3. 回声算法Echo algorithm
回声算法(Echo Algorithm)是分布式系统中常用的一种算法,与洪泛算法(Flooding Algorithm)配合使用以实现信息的汇聚(Convergecast)。汇聚过程与广播过程相反:不是由一个根节点向所有其他节点发送消息,而是所有其他节点将信息发送到根节点。
3.1 这里是回声算法的工作步骤
a.叶子节点向其父节点发送消息。
b.如果一个内部节点从每个子节点都接收到了消息,它就向其父节点发送消息。
3.2 汇聚(Convergecast)
汇聚是广播的逆过程,在广播中,消息从根节点向外传播到所有节点;而在汇聚中,所有节点的信息最终传递回根节点。
在一些应用场景,如传感器网络中,汇聚可以用来收集数据,每个节点收集来自其子节点的数据,然后将汇总的数据发送到父节点,直到所有数据最终到达根节点。
3.3 洪泛/回声(flooding/echo)配合使用
洪泛算法首先在树中的所有节点间广播一个信号,通常是为了初始化过程或者通知所有的叶子节点开始汇聚过程。
回声算法随后启动,叶子节点开始向上发送信息,每个内部节点等待其所有子节点的回声消息到来后,再将汇总的信息向上发送。
这种组合确保了信息可以从树的底部(叶子节点)有效地汇聚到树的顶部(根节点)。
使用洪泛/回声的组合方法,可以在没有中央协调的情况下实现有效的数据汇集,这对于能量受限和需要自组织的网络系统特别有用。
4. Bellman-Ford BFS 算法
Bellman-Ford BFS 的算法是一种用于在图中计算单源最短路径的经典算法,特别是在边的权重可能是负数的情况下。然而,这里描述的变种更类似于在分布式系统中使用的算法,用于构建广度优先搜索(BFS)生成树。
算法的步骤如下:
a.每个节点 u 存储一个整数 ,代表它到根节点的距离。初始时,根节点的距离 设为 0,其他所有节点 u的距离设为无穷大∞。
b.根节点开始算法,向所有邻居发送数字 “1”。
c.如果一个节点 u 从邻居收到一个消息 且 小于 ,则:
节点设置它的距离 为 。
节点向它的所有邻居(除了发送 )。
在同步系统中,洪泛算法是构建广度优先搜索(BFS)生成树的有效方法。在这样的系统中,算法的每一步都可以在所有节点上同时发生。
在异步系统中,由洪泛算法构建的生成树可能与 BFS 生成树相差甚远。这是因为消息的传递和接收没有固定的时间顺序,所以节点接收到消息的顺序可能与 BFS 预期的不一致。
Bellman-Ford BFS 算法作为一种异步算法实现了经典的 BFS 构建。它的时间复杂度为O(D) ,其中是图的直径,即两个节点之间最长路径的最短长度。它的消息复杂度为,其中是图中边的数量,是节点的数量。
这个算法在分布式环境中特别有用,因为它允许每个节点根据从邻居节点接收到的信息来独立更新自己的状态,最终所有节点都能计算出自己到根节点的距离。这种方法不需要节点之间的全局协调,适用于网络通信可能存在延迟和不可靠的场合。