我遇到了一个问题,我仍然无法弄清楚如何解决。我想出了如何以蛮力的方式做到这一点,但是当有成千上万的元素时它不起作用。
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的任何数。你会如何有效地做到这一点?
答案 0 :(得分:1)
也许我错过了一些东西,但是快速排下这些行应该回答你的问题。
从顶行开始,根据需要翻转每一列,直到顶行全部为T.计算匹配数。对每隔一行重复一次,查找计数是否大于前一行。
您不需要反转整个矩阵,因此每一行都是F,计数将是相同的。