新听到一个超难算法题,大家来集思广益

2017-09-04 18:57:05 +08:00
 jlsk
给定 N 个基础点坐标(x,y),求离指定点(px,py)最近的基础点
基础点可以预处理
要求时间复杂度<N
4836 次点击
所在节点    问与答
29 条回复
aheadlead
2017-09-04 19:30:19 +08:00
什么叫“基础点”
xiang578
2017-09-04 19:31:41 +08:00
不知道是不是 kd tree
GreatHumorist
2017-09-04 19:32:24 +08:00
向量计算公式?
Valyrian
2017-09-04 19:39:24 +08:00
jlsk
2017-09-04 20:26:15 +08:00
@Valyrian 这个强,但是这个没法快速查找出来

@xiang578 应该就是它了,这能确实的<N 的时间查找出来,貌似还有更快的?
blahgeek
2017-09-04 21:12:21 +08:00
lsmgeb89
2017-09-04 22:40:47 +08:00
这种算计算几何领域的算法?
yangff
2017-09-04 22:58:25 +08:00
@jlsk 这不都告诉你了用 voronoi 图了啊,O(NlogN)初始化,O(1)查询,还不是美滋滋
yangff
2017-09-04 22:59:06 +08:00
具体你可以看 voronoi 图的扫描线构造方法,反正你是一次性的。
ryd994
2017-09-04 23:31:11 +08:00
这也叫难?你想想手机基站的工作范围就可以想通了
剩下的是怎么把想法转化为算法
jedihy
2017-09-05 02:49:23 +08:00
google onsite 题,转换为极座标之后二分搜索
jedihy
2017-09-05 02:57:02 +08:00
@yangff 预处理不能给你这样预处理的,你这样我直接算距离初始化的时候 O(N)就全部做完了。
原题是说可以你可以选择给出的坐标的形式,然后让你找出距离最近的点。提示也很明显<O(N),那就是 O(nlogn)了。
Xs0ul
2017-09-05 03:53:35 +08:00
@jedihy #11 能进一步解释一下极坐标的做法不?
Valyrian
2017-09-05 04:02:34 +08:00
@jedihy 预处理的时候没有 px, py 啊
jedihy
2017-09-05 04:48:38 +08:00
@Xs0ul 给我一点时间,去年准备 google onsite 的时候和同学讨论过,现在忘了,但思路我记得很清楚是极座标然后二分。
jedihy
2017-09-05 04:49:07 +08:00
@Valyrian 那这种方法是可行的,不过太高端了。
jlsk
2017-09-05 06:43:49 +08:00
@yangff
@Valyrian
@jedihy
怎么 O(1)时间查找出来啊? voronoi 图虽然能画出来但是给定任意一个(px,py)你仍然不能确定它在哪个点的范围内,有立即求出的方法?
linux40
2017-09-05 07:34:23 +08:00
极坐标二分要用到极坐标下的距离公式吧。
messyidea
2017-09-05 08:17:45 +08:00
想来想去总感觉极坐标二分不了(
能想到一些杂七杂八预处理优化的办法, 但都能构造出在极端情况下退化到 O(N)的情况.
坐等正解
Valyrian
2017-09-05 08:17:51 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX