
有一组二维数组
如[[1,1], [2,3], [5,4],[7,4],[6,1],[7,6]] 没有重复的值
我现在有一个坐标为 [4,4] 我要找出该坐标在二维数组中最接近的值:
比如上面的计算出来最接近的值 是[5,4]. (假如有N个数值最接近,也就是说对比x,y的绝对值是一样的,只取其中随便一个就行了 列出多个也可以).
这个算法该怎么算呢? 第一次接触到这种问题,比较头疼。
1 sneezry 2015-05-22 04:11:36 +08:00 via iPhone 已知点的排列顺序是怎样的呢 |
2 Valyrian 2015-05-22 05:45:09 +08:00 via iPhone Voronoi diagram |
3 sumhat 2015-05-22 05:49:28 +08:00 有序可以二分,无序只能遍历了 |
4 Gonster 2015-05-22 08:43:14 +08:00 via iPhone 如果允许用其他数据结构 可以考虑使用QuadTree或者其他的一些树来替代数组 |
5 lancelot 2015-05-22 09:28:16 +08:00 不能简单点就用平面点距离公式都遍历一次吗? |
6 w88975 OP 我自己写了一个比对的算法 不知道还有没有优化的余地 var min = Math.abs((xy.x - points[1].x)) + Math.abs((xy.y - points[1].y)); for(var i = 1; i< points.length; i++) { if (Math.abs((xy.x - points[i].x)) >= 0.03 || Math.abs((xy.y - points[i].y)) >= 0.03) { } else { if ( Math.abs((xy.x - points[i].x)) + Math.abs((xy.y - points[i].y)) < min) { min = Math.abs((xy.x - points[i].x)) + Math.abs((xy.y - points[i].y)); pos = i; } } } |
8 rtyurtyu 2015-05-23 00:59:27 +08:00 O(1)的时间就能得出,那些遍历的就歇歇吧 |