java下标和相等的矩阵_具有相等行和列的矩阵

让我们考虑一维情况:你有一个数字数组,你可以进行单个操作:从数组的一个元素的值中取1并将其添加到其他元素 . 目标是使所有元素与最小的操作相等 . 这里的解决方案很简单:你选择随机的“太大的数字”,然后在随机的“太小”数字中加一个 . 现在让我描述一下这与手头的问题有什么关系 .

您可以轻松计算每列和每行所需的总和 . 这是矩阵中所有元素的总和除以列数或行数 . 从那时起,您可以计算出哪些行和列需要减少以及哪些 - 增加 . 看这里:

1 1 2 2 -2

1 0 1 1 +1

0 0 1 1 +2

1 1 1 2 -1

+1+2-1-2

Expected sum of a row: 4

Expected sum of a column: 4

所以现在我们生成两个数组:行中的位移数组: -2,+1,+2,-1 和列中的位移数: +1,+2,-1,-2 . 对于这两个数组,我们解决了上述简单的任务 . 很明显,我们无法以比简单任务所需的步骤更少的步骤解决初始问题(否则列或行中的余额不会为0) .

但是,我将证明初始任务可以完成与解决列和行任务所需的最大步骤完全相同的步骤来解决:

更简单的任务中的每一步都会生成两个索引 i 和 j :要从中减去的索引和要添加的索引 . 让我们假设在列任务的一个步骤中我们有索引 ci 和 cj ,在行任务中我们有索引 ri 和 rj . 然后我们在初始任务中分配一个对应关系:从 (ci, ri) 取1并将一个添加到 (cj, rj) . 在某些时候,我们将达到这样一种情况,其中可能还有更多的步骤,比如列任务,而不再是行任务 . 所以我们得到 ci 和 cj ,但我们如何为 ri 和 rj 做什么?我们只选择 ri = rj ,这样我们就不会搞砸行计算 .

在这个解决方案中,我正在利用我允许的事实来获得矩阵中的负数 .

现在让我们演示:

Solution for columns:

4->1;3->2;4->2

Solution for rows:

1->3;1->3;2->4

Total solution:

(4,1)->(1,3);(3,1)->(2,3);(4,2)->(2,4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值