w88975
V2EX  ›  编程

计算二维数组中最接近的值

  •  
  •   w88975 · May 22, 2015 · 3194 views
    This topic created in 4192 days ago, the information mentioned may be changed or developed.

    有一组二维数组
    如[[1,1], [2,3], [5,4],[7,4],[6,1],[7,6]] 没有重复的值

    我现在有一个坐标为 [4,4] 我要找出该坐标在二维数组中最接近的值:
    比如上面的计算出来最接近的值 是[5,4]. (假如有N个数值最接近,也就是说对比x,y的绝对值是一样的,只取其中随便一个就行了 列出多个也可以).

    这个算法该怎么算呢? 第一次接触到这种问题,比较头疼。

    8 replies  •  2015-05-23 00:59:27 +08:00
    sneezry
    sneezry
    May 22, 2015 via iPhone
    1
    已知点的排列顺序是怎样的呢
    Valyrian
    Valyrian
    May 22, 2015 via iPhone❤️1
    2
    Voronoi diagram
    sumhat
    sumhat
    May 22, 2015
    3
    有序可以二分,无序只能遍历了
    Gonster
    Gonster
    May 22, 2015 via iPhone
    4
    如果允许用其他数据结构 可以考虑使用QuadTree或者其他的一些树来替代数组
    lancelot
    lancelot
    May 22, 2015
    5
    不能简单点就用平面点距离公式都遍历一次吗?
    w88975
    w88975
    OP
    May 22, 2015
    6
    我自己写了一个比对的算法 不知道还有没有优化的余地

    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;
    }
    }
    }
    w88975
    w88975
    OP
    May 22, 2015
    7
    @sneezry 排列是无序的
    rtyurtyu
    rtyurtyu
    May 23, 2015
    8
    O(1)的时间就能得出,那些遍历的就歇歇吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1811 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:04 · PVG 00:04 · LAX 08:04 · JFK 11:04
    ♥ Do have faith in what you're doing.