正如您所指出的,如果没有确切的网络结构,就不可能为发送的消息数量设定一个特定值。相反,我们可以查看它的 Big-O 值。
现在要清楚我们所说的 Big-O 是什么意思:
- Big-O 指的是上限(即最坏的可能情况)复杂度
- 实际值可能(并且在实际系统中很可能)会更小
- 如果没有一些描述平均情况的函数(例如,每个进程平均连接到
N / 2 其他进程),我们必须假设最坏的情况
- 此问题的“最坏情况”是指发送的最大消息数
所以让我们假设最坏的情况,每个进程都连接到N - 1 其他进程。
让我们也定义一些变量:
我们可以将集合S 表示为一个完整的无向图(每个节点都连接到每个其他节点),其中图中的每个节点对应一个进程,图中的每条边对应发送的 2 条消息(1外传和一个回复)。
从here,我们看到一个完整图中的边数是(N(N-1))/2
所以在最坏的情况下,发送的消息数量是N(N-1),或者N^2 - N。
现在因为我们正在处理 Big-O 表示法,所以我们对这个值如何作为 N 的函数增长感兴趣。
通过三角不等式,我们可以看出O(N^2 - N)是O(N^2)的一个元素。
因此,在最坏的情况下,发送的消息数量会增长为N^2。
也可以使用邻接矩阵得出此结果,即N x N 矩阵,其中(i, j)th 元素中的1 指的是从节点i 到节点j 的边.
因为在原始问题中,每个进程都向所有连接的进程发送一条消息,这些进程用一条消息进行响应,我们可以看到对于每一对 (i, j) 和 (j, i) 都会有一条边(一个代表传出消息,一个回复)。例外情况是i = j 的对,即。我们一个进程不会向自己发送消息。
所以除了对角线之外,矩阵将完全被1s 填充。
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
上图:N = 4 的邻接矩阵。
所以我们首先要确定一个公式,将发送的消息总数作为节点数的函数。
通过矩形的面积,我们可以看到矩阵中1s 的数量(忽略对角线)将是N x N = N^2。
现在我们必须考虑对角线。可以存在的对 (x, x) 的数量由函数 f(i) where Z(N) -> Z(N) x Z(N) : f(i) = (i, i) 给出——这意味着该函数将有恰好 N 个不同的解。
所以总体结果是当考虑对角线时我们有N^2 - N 消息。
现在,我们使用与上面相同的 Big-O 推理得出相同的结论,消息数量在最坏的情况下增长为 O(N^2)。
所以,现在您只需要考虑已经发生的轮数,剩下 O(RN^2)。
当然现在你必须考虑你是否真的有最坏的情况......