Networking 如何计算分布式系统中发送的消息数?

Networking 如何计算分布式系统中发送的消息数?,networking,process,distributed,rounding,Networking,Process,Distributed,Rounding,假设我们有n个进程组成一个一般网络。我们不知道哪些进程连接在一起,但我们知道进程的数量(n)。如果在每一轮中,一个进程向其连接的所有进程发送一条消息,从每个进程接收一条消息,程序执行r轮,有没有办法确定在程序执行期间发送了多少条消息?正如您所指出的,如果没有确切的网络结构,就不可能对发送的消息数设置特定的值。相反,我们可以看看它的Big-O值 现在,我想清楚我们所说的“大O”是什么意思: Big-O指的是上限(即最坏情况)复杂性 有可能(在实际系统中也很可能)实际值会更小 如果没有描述平均情况

假设我们有n个进程组成一个一般网络。我们不知道哪些进程连接在一起,但我们知道进程的数量(n)。如果在每一轮中,一个进程向其连接的所有进程发送一条消息,从每个进程接收一条消息,程序执行r轮,有没有办法确定在程序执行期间发送了多少条消息?

正如您所指出的,如果没有确切的网络结构,就不可能对发送的消息数设置特定的值。相反,我们可以看看它的Big-O值

现在,我想清楚我们所说的“大O”是什么意思:

  • Big-O指的是上限(即最坏情况)复杂性
  • 有可能(在实际系统中也很可能)实际值会更小
  • 如果没有描述平均情况的函数(例如,每个进程都连接到其他进程,平均而言
    N/2
    其他进程),我们必须假设最坏的情况
  • 这个问题的“最坏情况”是指发送的最大消息数
因此,让我们假设最坏的情况,其中每个进程都连接到
N-1
其他进程

让我们也定义一些变量:

  • S
    :=进程集
  • N
    :=
    S
我们可以将集合
S
表示为一个完整的(每个节点连接到每个其他节点)无向图,其中图中的每个节点对应于一个进程,图中的每个边对应于发送的两条消息(一个传出传输和一个回复)

从中,我们可以看到完整图中的边数是
(N(N-1))/2

因此,在最坏的情况下,发送的消息数是
N(N-1)
,或者
N^2-N

现在,因为我们正在处理Big-O表示法,所以我们感兴趣的是这个值作为
N
的函数是如何增长的

通过三角不等式,我们可以看到
O(N^2-N)
O(N^2)
的一个元素

因此,在最坏的情况下,发送的消息数量会随着
N^2
的增加而增加


还可以使用邻接矩阵,即
nxn
矩阵,其中
(i,j)
th元素中的
1
表示从节点
i
到节点
j
的边

因为在最初的问题中,每个进程向所有连接的进程发送一条消息,这些进程用一条消息进行响应,我们可以看到,对于每一对
(i,j)
(j,i)
,都会有一条边(一条表示传出消息,一条表示应答)。例外情况是成对的
i=j
,即我们一个进程不向自己发送消息。 因此,矩阵将完全填充
1
s,对角线除外

0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
上图:N=4的邻接矩阵

因此,我们首先要确定发送的消息总数的公式,它是节点数的函数

通过矩形的面积,我们可以看到矩阵中
1
s的数量(忽略对角线)将是
nxn=N^2
。 现在我们必须考虑对角线。可以存在的对数
(x,x)
由函数
f(i)给出,其中Z(N)->Z(N)x Z(N):f(i)=(i,i)
——这意味着该函数将恰好有N个不同的解

因此,总体结果是,当考虑对角线时,我们有
N^2-N
消息

现在,我们使用上面相同的Big-O推理得出相同的结论,在最坏的情况下,消息的数量会随着
O(N^2)
而增加


因此,现在只需考虑已发生的轮数,剩下O(RN^2)


当然现在你必须考虑你是否真的有最坏的情况……< P>这是家庭作业吗?如果是这样的话,你被困在哪里了?永远不要否认这是家庭作业。我不明白评论的目的。我不只是寻求答案,我寻求解释。在这个问题中,我的意思是不可能找到发送消息的确切数量,相反,我们要找到它就像一个数字的顺序,例如O(n^2)有没有办法找到在程序执行期间发送了多少消息?对