算法 - 基于查找最大匹配数

时间:2015-05-15 21:17:55

标签: algorithm computer-science

我遇到了一个问题,我仍然无法弄清楚如何解决。我想出了如何以蛮力的方式做到这一点,但是当有成千上万的元素时它不起作用。

Problem: 
Say you are given the following input:
T F T F T F
T T F T T F
T F F T T T
F T F F T T
T F F T T T

You can inverse columns such as:
T         F
F         T
T   -->   F
F         T
T         F

并且您想要找到输入" 2D表"可以获得的最大匹配数,这样匹配意味着具有相同元素的行。您只能使用反向列,并且可以根据需要反转任意数量的列,但您只需找到可以获得的最多匹配数。例如:

T F T
F T F     has only one match "T T T", but if we invert column 1 and 3 it 
T T T     becomes

F F F
T T T     which has two matches "F F F" and "T T T", which is the most 
F T F     number of matches possible for that table.

此外,列数和行数可以是小于100,000的任何数。你会如何有效地做到这一点?

1 个答案:

答案 0 :(得分:1)

也许我错过了一些东西,但是快速排下这些行应该回答你的问题。

从顶行开始,根据需要翻转每一列,直到顶行全部为T.计算匹配数。对每隔一行重复一次,查找计数是否大于前一行。

您不需要反转整个矩阵,因此每一行都是F,计数将是相同的。