【发布时间】:2015-04-16 10:43:55
【问题描述】:
我有 N 个 10 维向量,其中每个元素的值可以是 0,1 或 2。
例如,vector v=(0,1,1,2,0,1,2,0,1,1) 是向量之一。
是否有一种算法(最好在 python 中)将这些向量压缩成最少数量的笛卡尔积。如果不是完美的解决方案,是否有至少可以提供良好压缩的算法。
示例:两个“笛卡尔向量”
([1,2], 0, 1, 0, 0, 0, 1, 1, [0,1], 0])(给出 4 个向量)和(0, 1, 0, 2, 0, 0, [0,2], 2, 0, 1)(给出 2 个向量)给出了 N=6 个向量的最优解:
1,0,1,0,0,0,1,1,0,0
2,0,1,0,0,0,1,1,0,0
1,0,1,0,0,0,1,1,1,0
2,0,1,0,0,0,1,1,1,0
0,1,0,2,0,0,0,2,0,1
0,1,0,2,0,0,2,2,0,1
【问题讨论】:
-
或许itertools.product可以帮到你。
-
itertools.product 似乎从规定的笛卡尔积创建向量,我想反过来。不过可能有助于在算法中使用。
-
你有多少个向量?
-
不时变化,但通常在 3000 左右
标签: python algorithm cartesian-product