实际上问题更复杂:以下数据集有n列和p行。
C1 C2 C3 C4 C5... Cn
R1 2 8 5 2 7
R2 2 5 8 7 7
R3 2 5 8 7 7
...
Rp
我的问题是:如何选择列的组合来创建一个新表,其中每行包含初始行的每个不同值,至少一次具有最小数量的非唯一值?
示例1:如果我的表只有列C1到C3而行R1到R3选择C1,C2,C3就是解决方案:新表的每一行将包含2,5和8恰好一次。
示例2:现在如果表的范围从C1到C5,R1到R3,我将选择C1,C2,C3和C5(不是C4)。
我的第一个(天真的)尝试是Python中的递归算法:
第一个异议:这种方法显然不是最理想的,整个表有11行,大约有2500列
第二个异议:如果没有重复值的解决方案不存在,算法将不会给我第二个最好的解决方案。
我怀疑在这个问题背后隐藏着某种动态编程,但我更倾向于使用现有的包:)