<分区>
举个例子: 假设我有一个仅包含 0 和 1 的二维数组:
0,1,0,0
0,0,0,1
1,0,1,0
我需要找到可以加到一个 vector 中的最少列数。例如,
column0 + column1 + column3 =0,0,1 + 1,0,0 + 0,1,0 = 1,1,1
因此,最小列数为 3。
<分区>
举个例子: 假设我有一个仅包含 0 和 1 的二维数组:
0,1,0,0
0,0,0,1
1,0,1,0
我需要找到可以加到一个 vector 中的最少列数。例如,
column0 + column1 + column3 =0,0,1 + 1,0,0 + 0,1,0 = 1,1,1
因此,最小列数为 3。
最佳答案
这基本上是一个 Set cover problem ,这是 NP 难的。它可以表述为整数线性规划问题并(最优地)求解。
您还可以将问题转化为具有非常好的求解器的同一类的另一个问题,例如 boolean SAT。
最后但同样重要的是,您可以使用贪婪和/或局部搜索算法以次优方式解决它,例如模拟退火。
关于java - 找到最少的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413212/