【问题标题】:Minimizing difference of min & max column sums of a matrix最小化矩阵的最小和最大列和的差异
【发布时间】:2015-05-04 14:26:36
【问题描述】:

给定一个正整数矩阵(非方形),其中同一行上的所有元素都是可置换的,问题是最小化列的最大和最小和之间的差异。

例如,

  9  5  7        5  7  9      
  9  3  4   ~>   9  4  3
 10  5  9        5 10  9
----------      ----------
 28 13 20       19 21 21

 28-13= 15      21-19= 2

答案是 2。

我尝试天真地对其进行排序(结合相邻行的最小值和最大值),这对于像 3x3 这样的小矩阵给出了正确的结果,但是对于更大的数据(高达 ~30x30),什么可以工作?是否有我无法应用的通用解决方案?

【问题讨论】:

    标签: algorithm matrix


    【解决方案1】:

    不幸的是,通过 partition problem 的减少,这个问题是 NP-hard。在分区问题中,您得到一个数字列表,并想确定是否有办法将这些数字分成两个不相交的组,以便这些数字的总和相等。

    您可以将分区问题的一个实例编码为您的问题的一个实例,如下所示:创建一个 n × 2 矩阵,其中每一行包含集合中的一个数字和一个 0。例如,给定集合 {1 , 3, 5, 7, 9},你会做矩阵

    1 0
    3 0
    5 0
    7 0
    9 0
    

    如果您考虑一下,在此处排列行将返回两列,可以将它们视为您已将数字划分为的两组。如果列之间的最小差异为 0,则该集合可以划分为两个相等的子集。如果不是,则不能对集合进行分区。因此,最小化 min 和 max 列之间的差异可以让您将分区问题作为一种特殊情况来解决。

    由于这个问题是 NP 难题,除非 P = NP,否则您将无法找到任何简单的多项式时间算法来解决它。不过,您也许可以开发一些启发式方法来击败蛮力解决方案。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2015-06-30
      相关资源
      最近更新 更多