给定2D平面上的点列表,如何在平面上放置N个点,使得从点列表到最近放置点的所有距离的总和尽可能小?环境是谨慎的,列表将包含[(0,0);范围内的唯一点。 (〜200:〜100)]
优选地,算法的最坏情况性能应该是多项式的(并且因此具有实时计算的小范围)。任何近似值也是受欢迎的。
答案 0 :(得分:3)
这个声音真的像K-Means clustering algorithm那样。在您的情况下,点列表是输入,点数N是簇的数量。
可悲的是,它的作用是NP难。但是有很多研究正在进行,并且有很多方法可以让它变得更好(只需向下滚动你会发现的维基页面)。
另外,我怀疑会有更好的算法,因为k-means确实被学者大量使用。我想如果有一个更好的算法,他们会为那个运行:)
我再次向您介绍数据挖掘中最好的教程:Andrew Moore's slides。虽然我不知道你的目的,但这应该非常接近你的需要。
答案 1 :(得分:0)
您可以获得节点列表的Center of mass(权重= 1) 或者它与x ^ 2的距离变化。
您已将问题缩小到将N个节点放置在质心区域的位置,其中与其余区域的距离最小。
在一个完美的世界中,你只需要将一个点放在质量中心。但是因为我假设你不能在同一个地方放置2个点,你需要选择质心附近。
这样可以将问题简化为只选择质心附近8点的最佳点,然后重新计算质心,然后重新进行。