算法:使用最大流量计算正确的矩阵值

时间:2016-03-31 10:14:34

标签: algorithm networking optimization matrix graph-theory

我得到一个大小为N x M且N,M <= 100的矩阵A.矩阵A由整数值A(i,j)组成,其中i和j是0 < i < M0 < j < N。我也得到矩阵的“正确”列和和行和。给定值A(i,j)是“不正确”(它们与“正确”总和不匹配)因此我们提供相应的“不正确”值B(i,j),其中B(i,j)范围从0到A(i,j)。

目标是计算矩阵中的“正确”值C(i,j),其中A(i,j) - C(i,j) =< B(i,j),C(i,j)值也必须与给定的行和列总和相匹配。我想我必须使用最大流量,但我的尝试没有奏效。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我在这里举个例子。

matrix A:
 10 10 10
 10 10 10
 10 10 10

matrix B:
  2  3  4
  5  6  4
  3  2  1

matrix A-B:
  8  7  6
  5  4  6
  7  8  9

所以你有公式A [i,j] - C [i,j]&lt; = B [i,j]。你可以把它变换成A [i,j] - B [i,j]&lt; = C [i,j],这意味着B [i,j]是你需要从A [i减去的最小的东西] j]得到小于或等于C [i,j]的东西。从这里你知道你需要在矩阵A-B中的条目中添加一些内容。

现在让我们找到添加的内容和位置。

假设您获得以下行和列大小:

c1 = 20/20
c2 = 19/21
c3 = 21/24

r1 = 21/21
r2 = 15/17
r3 = 24/27

上面我以下列形式写道:

(current flow through column or row) / (goal flow through column or row).

现在让我们建立一个网络:

network

现在请注意,行的总和=列的总和。因此,您尝试推送“给定的条目总和”。 - &#39;当前的条目总数&#39;来自&#39;到了&#39;。

现在,让我们假设节点是由自然数从左到右枚举的。现在,当您将某个东西从第二级节点推送到第三级节点时,例如,您将某些东西从节点i推送到节点j,您还可以将您推送的任何内容添加到NewMatrix [i,j],其中NewMatrix是矩阵AB你得到了你想要的矩阵。

另请注意,在开始时,在矩阵AB中,您有最小的C [i,j],您必须从A [i,j]中减去得到小于或等于B [i,j]的东西,现在你向C [i,j]添加了一些不等式A [i,j] -C [i,j]&lt; = B [i,j]仍然存在。