实现几何中位数

时间:2012-04-02 12:41:46

标签: c grid distance minimum median

当我谷歌几何中位数时,我得到了这个链接Geometric median 但我不知道如何在C中实现它。我不太了解这个数学解释。让我说我有11对坐标,我将如何计算相同的几何中位数。

我正在尝试解决此问题Grid CIty。我得到了一个提示,几何中位数将帮助我实现它。我不是在寻找最终解决方案。如果有人可以引导我走上正确的道路,那将会有所帮助。

感谢提前

下面是坐标列表a(测试用例)。结果:3 4

1 2
1 7
2 2
2 3
2 5
3 4
4 2
4 5
4 6
5 3
6 5

5 个答案:

答案 0 :(得分:1)

如果没有迭代算法,我认为这是不可解决的。

这是一种类似于登山版的伪代码解决方案,不同之处在于它可以在任意精度和高维度下工作。

CurrentPoint = Mean(Points)
While (CurrentPoint - PreviousPoint) Length > 0.01 Do
    For Each Point in Points Do
        Vector = CurrentPoint - Point
        Vector Length = Vector Length - 1.0
        Point2 = Point + Vector
        Add Point2 To Points2
    Loop
    PreviousPoint = CurrentPoint
    CurrentPoint = Mean(Points2)
Loop

注意:

常数0.01不保证结果在真值的0.01之内。使用较小的值可获得更好的精度。

常数1.0应调整为(我猜)大约最远点之间距离的1/5。太小的值会降低算法的速度,但是太大的值会导致不准确,从而导致无限循环。

答案 1 :(得分:0)

要解决此问题,您只需计算每个坐标的均值并对结果进行舍入。 它应该可以解决你的问题。

答案 2 :(得分:0)

您没有义务使用几何中位数的概念;所以看到计算起来并不容易,你最好在不计算的情况下解决问题!

这是算法/实现的想法。

  1. 从任何一点开始(例如给定数据中的第一个点)。
  2. 计算当前点和8个相邻点的距离之和(每个方向+/- 1,x和y)
  3. 如果其中一个邻居优于当前点,则更新当前点并从1
  4. 开始
  5. (找到最佳距离;现在选择距离相等的最佳点)
  6. 计算当前点和3个相邻点的距离之和(每个方向的-1,x和y)
  7. 如果其中一个邻居与当前点相同,请更新当前点并从5
  8. 继续

答案 3 :(得分:0)

答案是(x i ,y j )其中x i 是所有x的中位数,y j 是所有y的中位数。

答案 4 :(得分:-1)

正如我评论你的问题的解决方案不是几何平均值,而是算术平均值。

如果必须计算算术平均值,则需要对列的所有值求和,并将答案除以元素数。