如何将向量最佳地分组为易于描述的组?

时间:2018-12-07 09:00:02

标签: algorithm optimization computational-geometry combinatorics

我有一组长度为4的向量(表示为Nx4矩阵),其中向量中的每个元素可以取值-1、0或1。我想将向量分组为最少的组(以及最大的组),以使每个组都满足以下约束条件: 对于组中向量的每一列中表示的唯一元素的每种组合,组中必须有一个向量。 例如,仅包含向量[-1,1,0,1][-1,1,1,1]的组将满足约束条件,因为该组的每一列中只有一个唯一值,第3个除外,第3个有2,因此有2种可能的组合每列中唯一值的多少,两者均在组中表示。但是,对[1,0,-1,0][1,0,0,1]进行分组不能满足约束条件,因为在第三列和第四列中的每个列中都有2个唯一值,从而创建了4种可能的组合,其中只有2种在组合中表示。将[1,0,0,0][1,0,-1,1]添加到该组将满足约束。 (请注意,任何单个向量作为一个组都将始终满足约束条件。)

这些组是“容易描述的”,因为您可以列出每列的唯一值,并且可以完全描述该组,而排除所有其他向量。

我的第一个方法是将集合作为一个整体,并首先检查它是否已经满足约束。如果不是,请尝试一次忽略一个向量,并检查其余向量是否满足约束。如果这些方法都不起作用,则尝试忽略2个向量的所有组合,然后是3个,依此类推。每当特定子集满足约束条件时,将这些向量放在一边,然后对其余向量重复该过程,直到没有剩余的向量为止。虽然这保证了最佳分组(据我所知),但是对于任何包含超过25至30个向量的集合,运行时间太长,因为您必须潜在地检查N选择k种可能的方法来忽略掉k从1到N-1的所有值的向量。

我最近意识到,如果您将可能的矢量空间想象为3×3×3×3超立方体,其中每个单位超立方体代表一个矢量,那么您可以将其更多地视为几何问题。满足约束的组是此空间中的超矩形(包括从-1到1的换行),与约束的原始措词相比,它可能更容易考虑。在这个问题的框架中,我正在寻找最小数量的超矩形,以使所有矢量都包含在超矩形中,并且在任何超矩形中都没有空白。这种方法有望不会组合地扩展运行时间,但是我一直无法提出一种搜索可能的超矩形的好方法。

有人想出一种更快的算法来解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:0)

首先,让我们谈谈您的第一种方法,即全局贪婪算法。您选择可以迭代找到的最大集合。这是一种很好的启发式方法,但不能保证最佳分组。这是维度3中的6个矢量示例(例如,第4个整数为0):

(0,0,-1); (0,0,0); (0,0,1); (0,-1,-1); (0,1,1); (1、0、0)

这是绿色节点超出计划(第6个)的某种表示形式。

representation

您的算法将首先采用唯一可用的3组: (0,0,-1); (0,0,0); (0,0,1); (红线)

留下3个分离的向量,意味着总共4个集合。您显然可以制作3套2个向量(1-4、2-6、3-5)。 (黑线)

解决此问题的一个重要问题是,知道一个向量是否可以在2个不同的集合中使用。

如果没有,我认为这显然是一个NP问题。贪婪算法是最合理的处理方法。您可以通过建立一个以所有向量为节点并且其边沿表示“在同一组中兼容”的图来节省时间,也就是说,没有孔会使这种关联成为不可能。然后您寻找最大的集团。

如果是,我相信您可以使用最小成本流算法来最佳解决。您必须列出所有可接受的集合,所有集合由一个以1成本链接到源的节点表示,并最多注入81个向量节点,将其自身倒入接收器。 大约有V = 10000个可接受的集合,其中包含81个向量。还有一些算法可以让您在O(VElogVlogV)中解决此问题,仍然比!81更好。幸运的是,一些“漏洞”使V下降得很快。