分布式系统——树状算法

1 树状算法的基本理论

        树算法常用于在分布式系统中实现广播操作,这里您提供了一些基本定义和一个引理关于广播操作的消息复杂度和时间复杂度的下界。

1.1 广播定义

        广播操作是由单个处理器(源节点)发起的,其目的是向系统中的所有其他节点发送一条消息。

1.2 图的基本定义

        两节点间的距离:在无向图G中,节点u 和v之间的距离是指u和v之间最短路径的长度。
        节点的半径:节点u的半径是指u与图中任何其他节点之间的最大距离,表示为max_v d(u, v)
        图的半径:图的半径是指图中任何节点半径的最小值,表示为
        图的直径:图的直径是指图中任意两个节点之间最大距离的最大值,表示为

引理:
        消息复杂度:广播的消息复杂度至少是 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 存储一个整数 d_u,代表它到根节点的距离。初始时,根节点的距离 d_root设为 0,其他所有节点 u的距离d_u设为无穷大∞。

                b.根节点开始算法,向所有邻居发送数字 “1”。

                c.如果一个节点 u 从邻居v收到一个消息 yy 小于 d_u,则:

                        节点u设置它的距离 d_uy
                        节点u向它的所有邻居(除了v发送 y + 1)。

        在同步系统中,洪泛算法是构建广度优先搜索(BFS)生成树的有效方法。在这样的系统中,算法的每一步都可以在所有节点上同时发生。

        在异步系统中,由洪泛算法构建的生成树可能与 BFS 生成树相差甚远。这是因为消息的传递和接收没有固定的时间顺序,所以节点接收到消息的顺序可能与 BFS 预期的不一致。

        Bellman-Ford BFS 算法作为一种异步算法实现了经典的 BFS 构建。它的时间复杂度为O(D) ,其中D是图的直径,即两个节点之间最长路径的最短长度。它的消息复杂度为O(mn),其中m是图中边的数量,n是节点的数量。

        这个算法在分布式环境中特别有用,因为它允许每个节点根据从邻居节点接收到的信息来独立更新自己的状态,最终所有节点都能计算出自己到根节点的距离。这种方法不需要节点之间的全局协调,适用于网络通信可能存在延迟和不可靠的场合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242287.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

systemverilog/verilog文件操作

1、Verilog文件操作 Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1 、Verilog文件操作 1.1.1、打开和关闭文件 module tb; // 声明一个变量存储 file handler integer fd; initial begin // 以写权限打开一个文…

互联网加竞赛 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…

【react】创建react项目+项目结构

使用create-react-app快速搭建开发环境 create-react-app是一个快速创建React开发环境的工具,底层由Webpack构建,封装了配置细节 npx create-react-app react_hm执行命令后开始创建 创建好执行cd react_hm npm start 当看到webpack compiled successfu…

VMware workstation安装FreeBSD14.0虚拟机并配置网络

VMware workstation安装FreeBSD14.0虚拟机并配置网络 FreeBSD是类UNIX操作系统,FreeBSD带有多个软件包,并覆盖了广阔的应用领域,且都是免费和易于安装的。该文档适用于在VMware workstation平台安装FreeBSD14.0虚拟机。 1.安装准备 1.1安装…

【c++笔记】用c++解决一系列质数问题!

质数是c语言和c中比较常见的数学问题,本篇文章将带你走进有关质数的一系列基础问题,其中包含常见的思路总结,本篇文章过后,将会持续更新c算法系列,感兴趣的话麻烦点个关注吧! 希望能给您带来帮助&#xff…

openjdk源码了解

openjdk给出debug配置选项,common/autoconf/jdk-options.m4 AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL], [################################################################################# Set the debug level# release: no debug information, all opti…

Python项目——计算器(PySide6+Pyinstaller)

1、介绍 使用python编写一个计算器,可以实现基本的运算。【注】该项目最终还有一些细小的bug没有完善,例如符号可以一直输入。 2、实现 使用pyCharm创建一个新的项目。 2.1、设计UI 使用Qt designer设计一个UI界面,保存ui文件&#xff0…

从新手到高手:AI绘画实战中的Midjourney

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 随着人工智能(AI)技术的…

考研C语言刷编程题篇之分支循环结构基础篇(一)

目录 第一题 第二题 方法一:要循环两次,一次求阶乘,一次求和。 注意:在求和时,如果不将sum每次求和的初始值置为1,那么求和就会重复。 方法二: 第三题 方法一:用数组遍历的思想…

C语言第三弹---数据类型和变量

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 数据类型和变量 1、数据类型介绍1.1、整型1.2、浮点型1.3、字符型1.4、布尔类型1.5、各种数据类型的长度1.5.1、sizeof操作符1.5.2、数据类型的长度1.5.3、sizeo…

K8S--部署Nacos

原文网址:K8S--部署Nacos-CSDN博客 简介 本文介绍K8S部署Nacos的方法。Nacos版本是:2.2.3。 部署方案 本文为了简单,使用此部署方式:使用本地pvconfigmap,以embedded模式部署单机nacos。以nodePort方式暴露端口。 …

SpringSecurity+JWT前后端分离架构登录认证

目录 1. 数据库设计 2. 代码设计 登录认证过滤器 认证成功处理器AuthenticationSuccessHandler 认证失败处理器AuthenticationFailureHandler AuthenticationEntryPoint配置 AccessDeniedHandler配置 UserDetailsService配置 Token校验过滤器 登录认证过滤器接口配置…

Kafka常见指令及监控程序介绍

kafka在流数据、IO削峰上非常有用,以下对于这款程序,做一些常见指令介绍。 下文使用–bootstrap-server 10.0.0.102:9092,10.0.0.103:9092,10.0.0.104:9092 需自行填写各自对应的集群IP和kafka的端口。 该写法 等同 –bootstrap-server localhost:9092 …

ctfshow-SQL注入(web214-web220)

时间盲注 (最贴合实际的注入) web214 什么都不存在 使用bp进行抓包看看有没有注入点 在原始页面刷新 抓包发现修改debug为1是返回结果是一个sql的查询语句 id可能存在注入点 发现存在时间注入 使用web193脚本进行修改 python盲注脚本 import requests …

django后台进行加密手机号字段,加密存储,解密显示

需求: 1 :员工在填写用户的手机号时,直接填写,在django后台中输入 2:当员工在后台确认要存储到数据库时,后台将会把手机号进行加密存储,当数据库被黑之后,手机号字段为加密字符 3:员…

RT-Thread Studio学习(十七)虚拟串口

RT-Thread Studio学习(十七)虚拟串口 一、简介二、新建RT-Thread项目并使用外部时钟三、启用USB设备功能四、测试 一、简介 本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下实现USB虚拟串口。 硬件及开发环境如下: OS WI…

C++入门学习(一)写一个helloworld

1、头文件 #include <iostream> using namespace std; 任何程序都需要这两句的&#xff0c;写上就好。 2、主文件 int main() {cout<<"Hello World!"<<endl;return 0; } 由于是int型数据&#xff0c;所以要返回一个值&#xff0c;即return0。…

Leetcode 2788. 按分隔符拆分字符串

我们可以先自己模拟一下分隔字符串的过程。如果只是简单的&#xff0c;遇到分隔符&#xff0c;将分隔符前后的子串加入结果的List&#xff0c;那么很显然并没有考虑到一个String中有多个字符串的情况。一种比较容易想到的方法是&#xff1a; 先对List中每个字符串遍历&#xf…

华为原生 HarmonyOS NEXT 鸿蒙操作系统星河版 发布!不依赖 Linux 内核

华为原生 HarmonyOS NEXT 鸿蒙操作系统星河版 发布&#xff01;不依赖 Linux 内核 发布会上&#xff0c;余承东宣布&#xff0c;HarmonyOS NEXT鸿蒙星河版面向开发者开放申请。 申请链接 鸿蒙星河版将实现原生精致、原生易用、原生流畅、原生安全、原生智能、原生互联6大极致原…

Docker 部署考核

Docker安装 安装必要的系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 添加docker-ce安装源&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 配置阿里云Docker Yum源: yum-config-manager --ad…