假设我们有n个进程组成一个通用网络。我们不知道哪些连接在一起,但是我们知道进程的数量(n)。如果在每一轮中,进程向它所连接的所有进程发送消息,从它们中的每一个接收1条消息,并且程序执行循环,有没有办法找到程序执行过程中发送了多少条消息?在分布式系统中发送的消息
回答
正如您所指出的那样,如果没有确切的网络结构,就不可能对发送的消息数量设置特定的值。相反,我们可以看看它的Big-O价值。
现在只是要弄清楚我们所说的大O:
- 大O是指上限(即最坏的情况)的复杂性
- 这是可能的(和在实际系统中很有可能),实际值会少
- 没有描述平均情况下,一些功能(如每道工序都连接到平均
N/2
其他进程),我们必须假设最坏的情况下 - 通过“最坏的情况”对于这个问题,我们的意思是消息的最大数量发送
因此,让我们假设最坏的情况,其中每个进程连接到其他N - 1
过程。
我们还定义了一些变量:
S
:=的进程集N
:=的过程中S
我们可以表示一组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)
第元件的1
指的是从节点i
的边缘到节点j
。
因为在最初的问题的每个进程发送单个消息给所有连接的过程中,谁与单个消息进行响应,我们可以看到,对于每对(i, j)
和(j, i)
会有一个边缘(一个表示传出消息,一个回答)。这个例外是i = j
,即。我们一个进程不会发送消息。 因此,除了对角线之外,矩阵将完全填充为1
。
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
上图:对于N = 4邻接矩阵。
因此,我们首先要确定用于发送作为节点的数目的函数的消息的总数的公式。
通过矩形区域我们可以看到矩阵中的1
s的数量(忽略对角线)将为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
消息时对角被认为是。
现在,我们用同样的大O推理从上面到了相同的结论到达,邮件数量的增长在最坏的情况下为O(N^2)
。
所以,现在你只需要考虑发生的回合数,给你留下O(RN^2)。
当然,现在你必须考虑你是否真的有最坏的情况下...
- 1. 消息传递和在分布式系统中的信令
- 2. 分布式开发系统
- 3. MongoDB:私人消息系统...如何跟踪发送的消息
- 4. 分布式系统在哪里发送请求?
- 5. 分布式系统
- 6. 分析分布式系统
- 7. 如何发送消息到邻居jvm中的akka系统?
- 8. MongoDB的分布式系统
- 9. 消息系统:保存并发送 - 何时执行新消息的插入?
- 10. Java分布式系统
- 11. 分布式系统设计
- 12. 分布式日志系统
- 13. 分布式系统中的主题
- 14. PHP表单发布不发送消息
- 15. 分布式消息订购
- 16. 发送消息使用PHP与Voryx高速公路WAMP消息系统
- 17. CodeIgniter消息系统
- 18. CakePHP消息系统
- 19. 发送或发布消息到Windows窗体消息循环
- 20. “[CALayer发布]:发送到释放实例的消息”在UIViewController中
- 21. 如何从其他系统向SameTime用户发送消息?
- 22. 黑客Log4j发送自定义系统日志消息
- 23. Akka.NET:无法发送列表消息给其他演员系统
- 24. 异步发送消息给第三方系统 - 队列?
- 25. App Engine的消息系统,消息状态 - 设计模式
- 26. 发送消息
- 27. 目标C中的消息系统是否依赖于内核消息系统?
- 28. iOS:可以在Google Plus中发送或发布消息
- 29. 用户是否也可以在NServiceBus中发布/发送消息?
- 30. 我们可以在QuickBlox中向离线用户发送系统消息吗?
听起来像是功课... – miku 2012-01-16 21:15:18
这是功课?如果是这样,你卡在哪里? – 2012-01-16 21:17:10
从不否认这是homework..And我不明白comment.I的目的不只是寻求一个答案,我讨个说法。在这个问题,我的意思是它不可能找到发送的消息的确切数量,而是我们必须要找到它像数的顺序,如为O(n^2) – 2012-01-16 21:22:46