计算公司的股东所有权百分比

时间:2017-01-06 21:32:41

标签: java matrix graph linear-algebra graph-algorithm

我的图表包含两种类型的节点:公司和人员。

公司节点有一个代表股东的边缘列表。股东拥有一定比例的股份,是公司或个人。 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

箭头可以反转,具体取决于它们是代表股票还是所有者

Company shareholders

实际上谁拥有CompanyA以及百分比。在这个例子中,我们应该得到UserA拥有CompanyA的66.66%而UserB拥有CompanyB的33.33%。

这可以使用转换矩阵计算,并将其自身乘以多次like this

可悲的是,这是一个估计,需要相当多的迭代来获得非常精确的迭代。我怀疑有办法得到一个确切的答案。我看过特征值,但我认为我的数学失败了。就矩阵而言,我认为我正在寻找转移矩阵(或马尔可夫链)的稳定分布。

也许我过于复杂了?我觉得应该有一种方法来获得这个结果而不用解析矩阵和递归算法。特别是考虑到图表包含大量的叶子,我只对单个公司的股东感兴趣(图表的“根”)。

我将用Java实现最终解决方案。可以使用第三方库。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为矩阵的标签或多或少是这样的

   cA  cB  uA  uB
cA 0    0.5 0.5 0
cB 0.5  0   0   0.5
uA 0    0   1   0
uB 0    0   0   1

其中cA / B表示公司A / B,而uA / B表示用户A / B.

我们将此矩阵表示为A。然后表达式(1, 0, 0, 0).A为我们提供了即时的资源分配"在"投资" 1"单位"在这种情况下,结果确实是(0, 0.5, 0.5, 0),即公司B得到50%而用户A得到50%。然而,归属于公司B"的资源传播"进一步,所以为了找到平衡"分配,我们需要计算

(1, 0, 0, 0).A^n

n无限的范围内。就左特征向量而言,原始矩阵A可以被重写(假设它是可对角化的)为A=Inverse[P].w.P,其中w是包含特征值的对角矩阵。那个人有

A^n = (Inverse[P].w.P)^n = Inverse[P].w^n.P

在这种特殊情况下,特征值为1, 1, 0.5, -0.5,因此当n变为无穷大时,只有特征值1存活(s)。因此w^n的限制为DiagonalMatrix[{1,1,0,0}]。因此,最终结果可以写成

Inverse[P].DiagonalMatrix[{1,1,0,0}].P

产生

0.  0.  0.666667    0.333333
0.  0.  0.333333    0.666667
0.  0.  1.  0.
0.  0.  0.  1.

最后,对应于特征值1的特征向量是(0, 0, 1, 0)(0, 0, 0, 1)。这意味着如果一个人投资" 1个单位的资源进入用户A / B,相应的用户"保留所有内容"并且没有任何进一步传播,即已经达到平衡。然后特征值是双重退化,因为有两个用户(叶子)。

相关问题