如何解决搜索/排序多维数组
| 我基于圆的周长的x / y坐标创建了一个多维数组。可以沿弧形拖动对象(使用javascript),然后在其上的任何位置“拖放”。问题是,我需要找到最接近对象“放置”的x和y坐标。 我当前的解决方案包括遍历一个数组并找到最接近x的值,然后再次遍历以找到y坐标,但是它看起来不是很干净,并且存在问题。 有没有人有什么建议? 谢谢!解决方法
所以,让我们看看。我们假设一组预定义的(x,y)坐标。您将获得另一个点,并且必须找到与该给定点最接近的数组元素。我将假设“最近”是指从给定点到其他每个点的最小毕达哥拉斯或欧几里得距离。
最简单的算法可能是最好的算法(如果您想查看Wikipedia中的其他算法,请尝试一下)。由于您没有为我们提供该结构的任何代码,因此我将假定一个对象数组,每个对象均具有
x
和y
属性,与给定点相同。
var findNearestPoint = function (p,points) {
var minDist = Number.POSITIVE_INFINITY,minPoint = -1,i,l,curDist,sqr = function(x) { return x * x; };
for (i = 0,l = points.length; i < l; i++) {
curDist = sqr(p.x - points[i].x) + sqr(p.y - points[i].y);
if (curDist < minDist) {
minDist = curDist;
minPoint = i;
}
}
return points[i];
};
(未经测试,但您知道了。)
, 如果按顺序(从最小到最大或从最大到最小)创建数组,则可以使用引入二进制搜索算法。
获取x数组的中间元素。
如果x等于您的值,则停止并寻找y,否则。
如果x较低,则在数组的下半部分搜索(从步骤1开始)。
如果x更高,则在数组的上半部分搜索(从步骤1开始)。
然后在y上使用相同的公式。您可能需要稍微改变一下算法才能使其与最接近的匹配元素一起使用。没有看到您的数组,我无法提供代码来解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。