给定一个1和0的矩阵,我想找到最少或没有0的行和列的组合,最大化1 1 0 1 0
0 1 1 1 0
1 1 0 1 1
0 0 1 0 0
选择。
例如,行(0,1,2)和列(0,1,3)在col#0行#1中只有一个零,其余8个值为1。
var one = [111, 222, 333, 444];
var two = [{
identifier: 111
},
{
identifier: 222
},
{
identifier: 444
}
];
var tempArray = []
two.forEach(function(item) {
tempArray.push(item.identifier)
})
one.forEach(function(item) {
if (tempArray.indexOf(item) === -1) {
console.log(item)
}
})
实际任务是搜索超过1000到1000000的行和列,在二分图中找到最大的两块 - 行和列可以被视为Verticle,值可以被视为连接。
据我所知,NP-complete中的问题。
请建议一种方法/算法,以加快任务并减少对CPU和内存的要求。
答案 0 :(得分:0)
不确定你能否最小化它 但是,简单的方法就是......
即原始矩阵...... 1 0 1 0 1 1 0 0 0
DO 1 0 1 x 1 = 2(行总数) o 1 1 1 2 0 0 0 1 0
DO 1 1 1 x 1 0 1 = 1(列总数) 0 1 1 2 0 0 0 0
nb max sum是2(在你解决时你会跟踪它。
答案 1 :(得分:0)
实际上给出了以下假设: 你不在乎每行或每列有多少0 你不需要跟踪他们的订单......
然后,您只需要存储值来计算每行/每列中的总数,同时读取值并且实际上不存储矩阵本身。
如果在读取矩阵之前给出行数和列数,则可以执行以下启发式操作以减少计算时间......
但是你仍然有一个最糟糕的情况,其中所有行和列的污点数为1和0 ......:)