设一个对象数组 [a, b, c, d, ...] 和一个函数 distance(x, y),它给出一个数值,显示对象 x 和 y 的“不同”程度。
我正在寻找一种算法来找到长度为 n 的数组的子集,以最大化该子集元素之间的最小差异。
当然,我不能简单地按照与其他元素的最小差异对数组进行排序并取 n 最高的条目,因为删除一个元素可以很好地改变距离。例如,如果 a=b,则删除 a 意味着 b 与另一个元素的最小距离将发生巨大变化。
到目前为止,我能找到的唯一解决方案是迭代地删除最小距离最小的元素,并在每次迭代时重新计算距离,直到只剩下 n 个元素,或者反之亦然,迭代地挑选新元素,重新计算距离,添加新的选择或根据距离最小值替换现有的选择。
有谁知道没有这些迭代我怎么能得到相同的结果?
PS:这是一个例子,矩阵显示了每个元素之间的“距离”......
A B C D 一 - 1 3 2 b 1 - 4 2 c 3 4 - 5 d 2 2 5 -
如果我们只保留 2 个元素,那就是 c 和 d;如果我们保留 3,那将是 a 或 b、c 和 d。