Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最小化最小值与最小值之差;矩阵的最大列和_Algorithm_Matrix - Fatal编程技术网

Algorithm 最小化最小值与最小值之差;矩阵的最大列和

Algorithm 最小化最小值与最小值之差;矩阵的最大列和,algorithm,matrix,Algorithm,Matrix,给定一个正整数矩阵(非平方),其中同一行上的所有元素都是可置换的,问题是最小化列的最大和最小和之间的差异 比如说, 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 我尝试天真地对它进行排序(结合相邻行上的最小值和

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

比如说,

  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),什么能起作用呢?是否有一个通用的解决方案我不能应用?

不幸的是,这个问题通过从。在分区问题中,给你一个数字列表,你想确定是否有办法把这些数字分成两个不相交的组,这样这些数字的和就相等了

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

1 0
3 0
5 0
7 0
9 0
如果您仔细考虑一下,在这里排列行将返回两列,这两列可以被认为是您将数字划分成的两个集合。如果列之间的最小差值为0,则可以将集合划分为两个相等的子集。如果不是,则无法对集合进行分区。因此,最小化min和max列之间的差异将允许您作为特例解决分区问题

因为这个问题是NP难的,所以除非p=NP,否则你将无法找到任何简单的多项式时间算法来解决它。不过,您可能能够开发一些启发式方法来击败暴力解决方案

希望这有帮助