嗨,所有图论专家:)
我目前正面临算法问题,我无法解决这个问题。
我必须在已经包含直接份额的有向图中找到每个公司的所有间接份额(参见图片中的一个非常简单的例子)。
我必须从一个有向图开始,其中节点是公司,而这些公司之间的直接共享边缘。该算法现在必须将所有节点之间的间接共享附加到边缘(这包括在算法期间向图形添加新边缘)。
间接股份定义为所有中间直接股份的乘积。如果图中只有节点A,B和C,则只有一个间接共享,即从A到C的那个。
间接(A,C)= 100%* 80%= 1 * 0.8 = 0.8 = 80%
现在我需要一个算法来计算整个图形的那些共享。图中没有特定的起点,它可能包含各种大小的各种圆(在示例中,C和D之间只有一个“直接”圆)和一对节点之间的多条路径(如路径)从C到E)。
如果有人可以帮我解决一些伪代码或可能算法的描述,那将会非常有帮助。我已经在图论书和互联网上搜索算法,但我能找到的一切都是用于查找最短路径,所有路径或访问图形的所有节点的标准算法。但我找不到一种机制来计算图边缘权重的这种数学组合。
答案 0 :(得分:1)
让我们通过查看如果给定公司收到1美元会发生什么来实现所有权,并且所有收到的钱都根据其所有权转移给股东。然后我们会认为所有权比例是所有资金流失后所收到的最后一笔钱。
最简单的方法是首先考虑每家公司收到的总金额,这将为我们提供一组线性方程式,其解决方案将告诉我们每个公司在收到1美元时收到的总金额。 A公司的第一个实例。
假设作为一个例子,A和B拥有彼此的1/2。然后a = 1 + b / 2和b = a / 2,其中a是A收到的总金额,b是B收到的总金额 - 因为A将得到$ 1和1/2的任何金额B看到了,B将获得A所见的1/2。这解决为a = 1 + a / 4或a = 4/3且b = 2/3。如果我们按照分布的每一步,那么A接收1并发送1/2给B,B发送1/4到A,发送1/8到B发送1/16到A ...所以A获得1 + 1/4 + 1/16 + ... = 4/3。
所以A看到总共4/3而B看到总共2/3 - 但A和B必须传递他们收到的所有的1/2,所以A最终得到2/3而B结束1/3,这是有道理的 - 收入的1美元是完全占了。
如果我们将货币分配作为所有权的指示,那么A拥有自己的2/3,而B拥有另外1/3。
答案 1 :(得分:0)
查找算法,该算法计算从当前节点到所有其他节点的最短路径的长度。为每个节点迭代这个。存储结果并使用它们以防止必须对同一路径重复相同的计算。
将'计算路径'替换为前一段中的'计算间接份额',您自己就算了算法。