【发布时间】:2017-01-06 21:32:40
【问题描述】:
我有一个包含两种类型节点的图表:公司和人员。
公司节点具有代表股东的边列表。股东拥有一定比例的股份,可以是公司或个人。 Person 节点始终是叶子。
这是一个例子:
CompanyA has 50% of CompanyB's shares
UserA has 50% of CompanyA's shares
UserB has 50% of CompanyB's shares
CompanyB has 50% of CompanyA's shares
箭头可以颠倒,具体取决于它们代表股份还是所有者
谁实际上拥有 CompanyA 以及拥有多少百分比。在这个例子中,我们应该得到 UserA 拥有 CompanyA 66.66% 的股份,而 UserB 拥有 CompanyB 33.33% 的股份。
这可以使用转换矩阵计算,并将其与自身相乘多次,like this。
遗憾的是,这是一个估计值,需要进行大量迭代才能获得非常精确的估计值。我怀疑有办法得到准确的答案。我看过特征值,但我认为我的数学让我失望了。在矩阵方面,我想我正在寻找转移矩阵(或马尔可夫链)的稳定分布。
也许我过于复杂了?我觉得应该有一种方法可以在不解析矩阵和递归算法的情况下获得这个结果。特别是考虑到图表包含很多叶子,并且我只对单个公司的股东感兴趣(图表的“根”)。
我将在 Java 中实现最终解决方案。可以使用第三方库。
谢谢!
【问题讨论】:
-
特征值确实是要走的路。它们可以非常有效地计算,尤其是对于稀疏矩阵。
-
@WillemVanOnsem 知道为什么当我尝试获取此示例的左特征值时,我得到两个值为
1的特征值? I'm not sure how to interpret this -
@GuiSim 你试过在math stack exchange 上问这个问题吗?他们可能会让你比我们更进一步......另外......如果你找到答案,很想知道答案
-
@zelusp 事后看来,我应该在数学堆栈交换中发帖!我们决定采用一种不需要太多数学的不同方法。当我们遇到一个循环时,我们会回溯到循环的根源,并在此过程中按比例分散循环的份额。
标签: java matrix graph linear-algebra graph-algorithm