【发布时间】:2011-10-26 22:24:18
【问题描述】:
给定n个点,在给定列表中选择一个点,使得到该点的距离总和与其他所有点相比最小。
距离的测量方式如下。
对于一个点 (x,y),所有 8 个相邻点的距离均为 1。
(x+1,y)(x+1,y+1),(x+1,y-1),(x,y+1),(x,y-1),(x-1,y)(x-1,y+1),(x-1,y-1)
编辑
更清晰的解释。
函数 foo 定义为
foo(point_a,point_b) = max(abs(point_a.x - point_b.x),abs(point_a.y - point_b.y))
找到一个点 x 使得 sum([foo(x,y) for y in list_of_points]) 最小。
例子
输入:
12 -14
-3 3
-14 7
-14 -3
2 -12
-1 -6
输出
-1 -6
例如: (4,5) 和 6,7) 之间的距离为 2。
这可以通过检查每对的总和在 O(n^2) 时间内完成。 有更好的算法吗?
【问题讨论】:
-
仅供参考:此问题的克隆发布在Programming puzzles and Code golf。
-
看起来像 smalles circle problem 的变体,即 O(n)
-
这是 interviewstreet.com 上一个问题的副本——我不确定运行它的人是否会喜欢这个。
-
顺便说一句,这不叫'median',它叫'Fermat point'。我们想在最接近它的列表中找到那个点。