【发布时间】:2017-08-30 07:30:02
【问题描述】:
我的问题和这个类似:Get largest Subset of Integers with certain minimum distance/difference
但是,在我的例子中,我有一组任意元素和一个距离矩阵,而不是整数之间的距离,它可以嵌入到一个维度中,它给出了每个元素到其他元素的距离。距离都是整数,它们满足distance metric 的要求。给定指定的最小距离(例如 3),目标是识别起始集的最大子集,使得子集中的每对元素的距离至少为指定阈值。
根据上面的链接,明显的贪心算法对于一维情况(整数之间的距离)是最优的。但是,我怀疑这是否适用于任意数量的维度。这似乎是一种可以简化为一些著名的计算机科学问题的问题,但如果是这样,我一直无法找到正确的关键字组合来识别它。我只找到了对一维案例的引用。
那么,这个问题是 NP 完全的吗?如果是这样,是否有一个好的启发式算法?如果没有,是否有一种快速算法可以优化求解?
(对于任何好奇的人来说,这个问题是在选择尽可能多的 DNA 测序条形码集的背景下产生的,这些条形码彼此之间的差异足够大,即使出现测序错误,它们仍然可以被区分。)
编辑:现在我想了想,我们可以通过将距离矩阵替换为 0 和 1 的矩阵来简化问题,其中 1 表示元素接近(距离小于阈值),0 表示元素接近不熟。然后我想目标是找到邻接矩阵全为0的元素的最大子集。
【问题讨论】:
-
我认为您可以使用分而治之的策略(请参阅 Corman,算法)来查找距离阈值内的所有元素。然后你可以取那个集合的逆来找到你想要的组。
-
我不明白分而治之的策略在这里如何发挥作用,除非阈值太低以至于很少有元素比指定的距离更近。在我的特定数据集中绝对不是这种情况。而且即使问题可以被分割成更小的问题,也绝对不会被无限分割,所以仍然需要解决一般问题。
-
根据违规的常见程度,寻找在不再出现违规之前必须删除的最少点可能是有意义的。使用距离矩阵,您可以非常轻松地计算每个点的违规次数,这些违规次数可用于获取候选删除。
-
这听起来确实可能会导致一个更简单的解决方案,它也让我意识到距离矩阵可以替换为相邻矩阵只有 1 表示相邻,0 表示不相邻。我已经编辑了我的问题。
-
@RyanThompson Idk 但从您编辑的部分来看,这与 NPC 的最大集团问题不一样吗?
标签: algorithm