您的位置:首页 > 房产 > 家装 > 深圳推广公司哪家好_大连金州疫情最新消息_丁的老头seo博客_线上推广费用

深圳推广公司哪家好_大连金州疫情最新消息_丁的老头seo博客_线上推广费用

2024/10/7 2:29:10 来源:https://blog.csdn.net/watqw/article/details/142356306  浏览:    关键词:深圳推广公司哪家好_大连金州疫情最新消息_丁的老头seo博客_线上推广费用
深圳推广公司哪家好_大连金州疫情最新消息_丁的老头seo博客_线上推广费用

摘要

本文主要讨论如何使用Benes网络完成排列的置换操作,介绍Benes网络的构造,以及具体的路由方式。

置换排列

这里的排列指一个n个不同元素的序列,不同的顺序代表不同的排列。比如 [ 1 , 2 , 3 , 4 ] [1,2,3,4] [1,2,3,4] [ 2 , 1 , 4 , 3 ] [2,1,4,3] [2,1,4,3]是两个不同的排列。

这里我们考虑如何利用Benes网络,从一个排列变为另一个排列。

矩阵乘法的角度看置换排列

从数学的角度来看,这是一个矩阵的乘法问题,也就是将排列当作一个向量,然后乘以一个置换矩阵,就可以得到另外一个排列。

比如,我们需要将 a = [ 1 , 2 , 3 , 4 ] a=[1,2,3,4] a=[1,2,3,4]置换为 b = [ 2 , 1 , 4 , 3 ] b=[2,1,4,3] b=[2,1,4,3]. 这时,我们需要一个置换矩阵 P P P.使得 b = a × P . b=a\times P. b=a×P.

我们观察到 b b b中的第一个元素是 a a a中的第二个元素,而 b b b中的第一个元素是 P P P的第一列和 a a a的内积,因此,置换矩阵 P P P的第一列第二行的元素为1,第一列中的其他元素为0. 如此类推,可以得到置换矩阵
P = [ 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 ] . P=\begin{bmatrix} 0 & 1 & 0& 0\\ 1 & 0 & 0& 0\\ 0 & 0 & 0&1\\ 0& 0 & 1&0 \end{bmatrix}. P= 0100100000010010 .

假设排列的长度为 n n n,那么显然,需要 n × n n\times n n×n的置换矩阵,而乘法的复杂度是 O ( n 2 ) O(n^2) O(n2).

从交换原理的角度看置换排列

从交换原理来看,置换排列其实是一个路由问题。输入为 a a a,经过交换网络后,变为 b b b. 在 a [ i ] = b [ j ] a[i]=b[j] a[i]=b[j]时,就是 a [ i ] a[i] a[i]的目的地址为 b [ j ] b[j] b[j].

由于我们希望可以完全并行的穿过整个交换机,那么交换机的拥塞应该为1.也就是在任意一步,不会存在两个元素跑到同一个节点。我们知道Benes网络具有这个特点。一个层数为 2 log ⁡ n − 1 2 \log n-1 2logn1的Benes可以完成 n n n维向量的重新排列。

Benes网络的构造

Benes网络的构造是通过递归构造的。Benes网络的输入节点和输出节点一样多,一般为2的幂次。我们用 B 2 B_2 B2表示输入节点为2的Benes网络。则 B 2 B_2 B2
网络的结构

然后 B 4 B_4 B4的基本构造是由两个 B 2 B_2 B2,然后再加上 4 4 4个输入节点和 4 4 4个输出节点。然后上面的两个输入节点连接到下面 B 2 B_2 B2的节点。下面的两个输出节点连到上面的一个 B 2 B_2 B2.对称构造输出节点。如图所示:
网络的结构

B 8 B_8 B8是使用两个 B 4 B_4 B4,加上8个输入节点和8个输出节点构造:
网络的结构

Benes路由方法

Benes的路由和构造的过程相反,首先从两边填充路由信息,然后逐步向中间填充。

下面是填充路由信息的具体算法步骤:

0:将输入和输出分别填充到输入节点和输出节点;

1:对于输入节点来说,由于不能存在拥塞,所以,具有相同目的地的节点不能在下一步的同一个子网中出现。而对于输出节点来说,可以由同一个节点到达的输出节点的不能来自于同一个子网络。而我们注意到,去掉输入和输出后的Benes网络是两个完全分开的Benes网络,中间不存在连接。因此,可以将不可以在同一个子网中的节点连接起来,构造一个图;

2:对第1步形成的图2着色,每一个颜色走一个子Benes网络,从而可以填充下一步的输入节点;

3:根据填好的下一步输入节点,和当前的输出节点,填充子Benes网络的输出节点。

4:重复1-3步,直到填充完所有的节点路由信息。

下面,我们给出一个 B 8 B_8 B8网络路由的例子,输入为 [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] [1,2,3,4,5,6,7,8] [1,2,3,4,5,6,7,8],输出为 [ 2 , 6 , 5 , 8 , 4 , 7 , 1 , 3 ] [2, 6, 5, 8, 4, 7, 1, 3] [2,6,5,8,4,7,1,3].

首先,填充第一列和最后一列:
1

根据输入节点,我们知道,1-5,2-6,3-7,4-8 不能输入到同一个子Benes网络中;

根据输出节点,我们知道,2-4,6-7,5-1,8-3 不能来自同一个子Benes网络。

因此,我们得到一个顶点为 { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } \{1,2,3,4,5,6,7,8\} {1,2,3,4,5,6,7,8},边为 { 1 − 5 , 2 − 6 , 3 − 7 , 4 − 8 , 2 − 4 , 6 − 7 , 5 − 1 , 8 − 3 } \{1-5, 2-6, 3-7, 4-8, 2-4, 6-7, 5-1, 8-3\} {15,26,37,48,24,67,51,83}的图。

我们对图进行2着色:

2着色

然后,我们根据着色结果填充下一步的输入,蓝色的根据网络输入到上面的 B 4 B_4 B4网络,橙色的输入到下面的 B 4 B_4 B4网络:

填充下一步输入

然后根据下一步的输入,我们知道需要填充的下一步输出中,2,5,7,8 一定来自上面的 B 4 B_4 B4网络,1,6,3,4 一定来自下面的 B 4 B_4 B4网络。

我们根据当前的输出,填充 B 4 B_4 B4网络的输出:
填充下一步的输出
下面,我们继续填充上面一个 B 4 B_4 B4网络,下面的 B 4 B_4 B4填充的方法是相同的。

上面一个 B 4 B_4 B4网络的输入为 [ 5 , 2 , 7 , 8 ] [5,2,7,8] [5,2,7,8],输出为 [ 2 , 7 , 5 , 8 ] [2,7,5,8] [2,7,5,8]

得到边为 { 5 − 7 , 2 − 8 , 2 − 5 , 7 − 8 } \{5-7,2-8,2-5,7-8\} {57,28,25,78}的图,然后进行2着色:

的2着色

填充 B 2 B_2 B2网络的输入:
b2网络的输入
因此,2,7一定来自下面的 B 2 B_2 B2网络,5,8 一定来自上面的 B 2 B_2 B2网络:

b2网络的输出填充
下面是完整的路由图:

完整路由图
使用Benes网络,每一层我们只需要两种旋转,再加上选择,就可以完成路由,从而实现置换重排。

参考文献

[1] https://blog.csdn.net/qq_19830591/article/details/127789767

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com