考虑N个节点的网络(图形)并且每个节点都保持一个值,如何设计程序/算法(针对每个节点),允许每个节点计算所有节点值的平均值(或总和)在网络中?
假设是:
(标签可能不对,因为我不知道这类问题属于哪个领域,如果它是某种普遍问题。)
答案 0 :(得分:0)
在我提出部分解决方案之前,这是一个有趣的问题,在这里我做了一些假设:
long
,或者您的数据结构足够大,不会超过我会选择深度优先搜索。节点N0
将启动算法并将其值+计数发送给第一个邻居(N0.1
)。 N0.1
会添加自己的值+ count并将消息转发给下一个邻居(N0.1.1
)。如果消息返回N0
或N0.1
,他们只需将其转发给他们的另一个邻居。 (N0.2
或N0.1.2
)。
现在的问题是要知道何时终止算法。您希望在到达所有节点后立即终止它,然后只播放最终消息。如果您知道图中有多少个节点,只需继续将其转发到下一个节点,直到最终到达每个节点。最后一个节点将知道已到达(它可以将计数变量与图中的节点数进行比较)并广播该消息。
如果您不知道有多少个节点,以及它和无向图,那么它将只是图中深度优先实现。这意味着,如果N0.1
收到来自N0.1.1
之外的任何人的消息,它只会将消息退回,因为您在执行深度优先搜索时无法向父级发送消息。如果它是一个有向图并且你不知道节点的数量,那么你要么想出一个数学模型来证明算法何时完成,要么你知道节点的数量。
我在这里找到了一篇论文,提出了一个基于八卦的算法来计算动态网络中的节点数量:https://gnunet.org/sites/default/files/Gossipico.pdf这可能会有所帮助。也许你甚至可以用它来总结节点。