MIT6.024学习笔记(三)——图论(2)

news/2025/2/13 2:27:39/

科学是使人变得勇敢的最好途径。——布鲁诺

文章目录

  • 通信网络问题
    • 二叉树型
      • 直径
      • 路由器规模
      • 路由器数量
      • 拥挤程度
    • 二维数组型
      • 直径
      • 路由器规模
      • 路由器数量
      • 拥挤程度
    • 蝴蝶型
      • 直径
      • 路由器规模
      • 路由器数量
      • 拥挤程度
    • benes型
      • 直径
      • 路由器规模
      • 路由器数量
      • 拥挤

通信网络问题

在通信网络中,分为主机和路由器两部分,我们将主机分为输入端和输出端,则构成的图中有三部分:路由器、输入端、输出端,构成了一个有向图。那么,一个N*N规模的通信网络,应该怎么构成才能达到性能最佳呢(假设N总是2的整数次幂)?

二叉树型

二叉树是最容易想到的构建方法,示意图如下:
在这里插入图片描述
其中,圆形表示路由器,I矩形表示输入端,O矩形表示输出端,从左到右分别是主机0~n的输入、输出端。箭头方向表示数据流向,没有箭头表示数据可以双向流动。
二叉树型网络的性能数据如下:
在这里插入图片描述
logN即以2为底,N的对数。接下来我们对这些数据进行证明。

直径

定义:一个网络的直径是从任一个输入端到任一个输出端的最远路径。
不难从图中看出,只要是经过最上面的路由器的路径都是最远路径。一个完全二叉树,最远路径长为2(1+logN)。

路由器规模

定义:最多同时有几个IO流流经一个路由器的数量,就是路由器规模。
求一个网络的路由器规模,实际上就是看最多有多少链路经过了同一个路由器,不难看出,在上图中,第二层路由器经过的链路最多,经过了3条输入链路和3条输出链路,继续扩展输入端和输出端的数量,该规模也不会增大,因此规模为3*3.

路由器数量

定义:在一个网络中使用的路由器的数量。
在网络中的路由器数量就是20+21+22+…+2logN,化简后得2N-1.

拥挤程度

在说明这个概念之前,我们先明确一个观点:输入端和输入端是双射关系。然后我们给出拥挤程度的定义。
定义:在任意双射关系中,路径经过同一个路由器的数量上限称作这个网络的拥挤程度。
设输入端i所映射的输出端fi=n-1-i,那么每一个输入端的数据都会经过最顶端的路由器,此时拥挤程度最大,达到N,因为最多也就是N个主机。

二维数组型

二维数组的示意图如下:
在这里插入图片描述

输入端从上到下分别对应主机0-3,输出端从左到右对应主机0-3。
二维数组型网络性能如下:
在这里插入图片描述

直径

不难看出,最远路径是从I0到O3,长为2N。

路由器规模

在网络上中间的路由器规模最大,有两条输入链路和两条输出链路穿过,因此是2*2,当网络再扩展时,该规模不变。

路由器数量

路由器数量就是N2,没什么好解释的。

拥挤程度

列举任意输入端与输出端的映射,可以发现最多只有两条路径在同一个路由器上交汇。图中用蓝线画出的两条路径在第三行第三列的路由器交汇。所以拥挤程度为2;从另一个角度讲,一行只能有一个路径,而一列也只能用一个,一行一列定位一个路由器,所以当占据该路由器所在行和列的路径不同时,这个路由器的拥挤程度最高,为2.

蝴蝶型

蝴蝶型将二叉树和二维数组结合起来,实现了一定的性能提高。示意图如下:
在这里插入图片描述
注意,在这个网络中,分别给行和列进行编号,其中列用二进制进行编号。这样,就可以方便的从看起来复杂的图中抽象出信息:

如果一个路由器的坐标是(b0,…,bl,…,blogN,l),那么这个路由器可以连接(b0,…,¬bl,…,blogN,l+1)和(b0,…,bl,…,blogN,l+1)。其中b0到blogN是列的各个二进制位。例如(1,0,0,0)可以连接到(0,0,0,1)和(1,0,0,1)。

蝴蝶型网络的性能数据如下:
在这里插入图片描述

直径

该网络的所有路径长度都相同,都是2+logN。

路由器规模

对于图中1,2列的节点,有两条输入链路和两条输出链路,因此规模为2*2.

路由器数量

行列相乘即可,数量为N(1+logN)。

拥挤程度

该网络的拥挤程度证明较复杂,但可以证明当logN为偶数时,拥挤程度为N^1/2;当logN为奇数时,拥挤程度为(N/2) ^1/2。

benes型

将蝴蝶型稍加改进,即得到benes型网络:
在这里插入图片描述
benes型网络的性能如下:
在这里插入图片描述

直径

benes型网络的直径与蝴蝶型类似,为1+2logN。

路由器规模

和蝴蝶型网络相同,为2*2.

路由器数量

直接将行列相乘即可,为2NlogN。

拥挤

我们用归纳法证明benes型网络中任意一个路由器的拥挤程度为1,假设P(n):网络中包含n台主机时命题成立。

基础步骤:证明P(21)。n=2时,网络如下:
在这里插入图片描述
不论怎样将输入端映射到输出端,四个路由器的拥挤程度都为1,因此P(2)=T。
归纳步骤:假设P(2i)=T。首先我们要弄清2i的网络如何扩展到2i+1的网络。注意我们的示例图:
请添加图片描述
图中用蓝色框和黄色框框住的部分就是当主机数量为4时的路由器网络,因此从2i到2i+1就是将2个2i网络拼在一起,再将首尾各加一列路由器。由于我们假设P(2i)成立,因此绿色框中的路由器拥挤程度一定为1,而首尾两列路由器拥挤程度也为1,因此只需考虑第1列和第4列路由器。
为了让第1列拥挤程度为1,某些特定对的输入端不能将数据发送到同一个颜色的框中。例如,如果000输入端和100输入端都将数据送入蓝色框,那么他们一定会送到同一台路由器;同理,对于第4列来说,某些特定对的输出端的数据也不能来自同一个颜色的框,例如000号输出端和100号输出端不能都来自蓝框。有了这些特定数字主机之间的关系,我们可以构造一个图:
假设输入端与输出端之间的映射关系为:f0=1,f1=5,f2=4,f3=7,f4=3,f5=6,f6=0,f7=2,那么该图可以构造成:
请添加图片描述
如果两个节点相邻,那么他们不能将数据发送到同一个框中;蓝色线说明他们的输入端可能链接同一个路由器,红色线说明他们的输出端可能链接同一个路由器。于是,这个问题演变成一个涂色问题。下面是一种解法:0,2,3,5涂蓝色,即他们将数据送入蓝色框内;1,4,6,7涂黄色,即他们将数据送入黄色框内。通过这种方式,可以发现第1列和第4列的所有路由器都只有一条路径经过,拥挤程度为1.□

请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!


http://www.ppmy.cn/news/384685.html

相关文章

vue可复用性

mixin混入 合并规则 data在内部会进行递归合并,并在发生冲突时以组件数据优先。值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时以组件数据优先。同名生命周期函数将合并为一个数组&…

应用 Python PyAutoGUI 打造专属按键精灵脚本工具!

很久没有水文章了,很多老哥估计已经忘记本渣渣了吧,挤时间抽空水一篇,当然是以前写的,同时也有在用的工具脚本,大佬哥们可以跳过了! 按键精灵,这样一款工具相信不少人有了解过,乃至用…

matlab句柄函数使用

概述 在MATLAB平台中,对函数的调用方法分为直接调用法和间接调用法。 直接调用函数,被调用的函数通常被称为子函数。但是子函数只能被与其M文件同名的主函数或在M文件中的其他函数所调用,一个文件中只能有一个主函数。 >> str hello…

按键精灵——基本

定义变量 Dim a1 定义常量 Const MyName123456 “按键精灵” 在脚本信息区输出 TracePrint 1∥结果为1 连接运算符& 1 & 1∥结果为11 “按键精灵” & 9∥结果为按键精灵9 转换 CInt 短整型 CLng 长整型 格式:bCInt(a) CDbI 双…

按键精灵的简单入门

1 问题 按键精灵是一款模拟鼠标键盘动作的软件。通过制作脚本,可以让按键精灵代替双手,自动执行一系列鼠标键盘动作。按键精灵简单易用,不需要任何编程知识就可以作出功能强大的脚本。只要在电脑前用双手可以完成的动作,按键精灵都…

按键精灵-自动化脚本

该专栏包含的脚本都需要先安装 按键精灵。 实现对指定区域进行自动截图 Dim i For i1 To 109MoveTo 1886,584 //将鼠标移动到指定区域 长,宽LeftClick 1KeyDown "Ctrl",1KeyDown "alt",1KeyDown "a",1KeyUp "Ctrl",1KeyUp "…

按键精灵---后台按键及鼠标操作

后台按键实例,记事本输入“a” Call RunApp("Notepad.exe") Delay 2000 Hwnd Plugin.window.find("Notepad", 0) HwndEx Plugin.window.FindEx(Hwnd, 0, "Edit", 0) Call plugin.window.sendkeypress(HwndEx,65)//现基本已经被Bkg…