【发布时间】:2016-01-21 02:27:13
【问题描述】:
向所有图论专家致敬 :)
我目前面临一个我自己无法解决的算法问题。
我必须在已经包含直接股份的有向图中找到每家公司彼此之间的所有间接股份(参见图片中的一个非常简单的示例)。
我必须从一个有向图开始,其中节点是公司,边是这些公司之间的直接股份。该算法现在必须将所有节点之间的间接份额附加到边上(这包括在算法期间向图中添加新边)。
间接份额定义为所有中间直接份额的乘积。如果图中只有节点 A、B 和 C,则只有一个间接份额,即从 A 到 C 的份额。
间接(A,C)= 100% * 80% = 1 * 0.8 = 0.8 = 80%
现在我需要一个算法来计算整个图表的这些份额。图中没有特定的起点,它可能包含各种大小的圆(在示例中,C 和 D 之间只有一个“直接”圆)和一对节点之间的多条路径(如路径从 C 到 E)。
如果有人可以帮助我提供一些伪代码或可能算法的描述,那将非常有帮助。我已经在图论书籍和互联网上搜索过算法,但我能找到的都是用于查找最短路径、所有路径或访问图的所有节点的标准算法。但是我找不到一种机制来计算这种图边权重的数学组合。
【问题讨论】:
-
我的理解是C直接拥有E的50%,通过D拥有E的25%,合计75%。
-
"算法现在必须将所有节点之间的间接份额附加到边上" 如果将间接份额添加到代表直接份额的边上,您将遇到问题。
-
我不明白当有一个周期时会发生什么——两家公司怎么可能各自拥有另一家公司?
-
@j_random_hacker 这也是我想到的另一个问题。一种可能性是继续遍历循环。然后,您可以继续添加最终会收敛到某个数字的间接份额。示例:C 直接拥有 D 的 50%。但由于间接地,C 也有 50% * 20% * 50% 的 D,即 5%。我们可以不断重复相同的过程并添加 0.5%、0.05% 等等。为了避免无限循环,我们可以在数字不再重要时停止。
-
我认为现在要做的事情已经很清楚了,并且是一种递归算法来生成每个公司和另一个公司之间的所有可能路径,将沿边的份额相乘并将每个不同路径的结果相加.为了提高效率,可以记住部分结果。
标签: java algorithm graph-theory economics