【发布时间】:2016-08-12 02:28:19
【问题描述】:
我有一个相当大的 n d 维向量集合,其中包含整数坐标(d 约为 50),但在某些情况下,坐标是一个特殊的“无关”值,我将用它来表示*。我正在尝试找到一种有效的算法来将所有比较相等的向量合并在一起,其中“相等”表示“向量中的每一对坐标都匹配,假设 * 条目可以匹配任何内容。”例如,给定这些行向量:
[* 1 2 * *]
[1 1 * 2 *]
[2 1 3 * 1]
[2 * 3 * *]
[1 * 3 4 *]
我们会将它们分成这些集群:
[* 1 2 * *], [1 1 * 2 *]
[2 1 3 * *], [2 * 3 * *]
[1 * 3 4 *]
要求是所有簇都需要其中的所有向量成对等效。有可能有很多方法可以将符合这些标准的事物聚集在一起,因此对于“不太多”的一些松散定义,应该有“不太多”的集群。
当然可以通过成对比较所有向量并将匹配的向量配对,然后重复此操作,直到所有向量都聚集在一起。另一种选择(我们当前使用的)是从其自己的集群中的第一个向量开始,然后为每个向量检查它是否与任何现有集群匹配,或者是否需要进入自己的集群。这些方法要么是二次方的,要么运行时间与向量数量乘以集群数量的乘积成正比,这对于我们的应用程序来说还不够快。
有没有解决这个特定问题的有效算法?
【问题讨论】:
-
你有关于整数坐标范围的一些信息吗?还有关于什么是“相当大”?
-
向量的数量在几十万,整数坐标的范围大致在几万到几十万。
-
有一点我不清楚:V1 可以匹配 V2,V2 可以匹配 V3,但 V1 可能不匹配 V3。那么,这里是否有一些选择可以做,例如最小化向量组(并且每个向量只属于一个组)?或者你想在这个例子中有 2 个组 (V1, V2) 和 (V2, V3) 吗?
-
好问题!每个向量都必须属于一个组。
-
所以我们的目标是尽量减少组的数量,或者只是“顺其自然”?
标签: algorithm vector time-complexity cluster-analysis