给定平面上的n个点,求距离最近的两个点的距离 javascript版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//给定平面上的n个点,求距离最近的两个点的距离。
 
//比较y
var A=[{
    x:6,
    y:61
},{
    x:6,
    y:67
},{
    x:43,
    y:71
},{
    x:39,
    y:107
},{
    x:189,
    y:140
}]
//按照x排序 y排序
A.sort(function(a,b){
    if(a.x== b.x&&a.y== b.y){
        return 0
    }
    if(a.x== b.x){
        return a.y> b.y?1:-1
    }
    return a.x> b.x?1:-1
})
console.log(A)
 
//分治算法
function closest_pair(a,l,r){
    var n=r-l
    console.log(n)
    if(n<=1){
        return 100
    }
    var m=(l+r)>>1
    var x=a[m].x
    //分解
    var d=Math.min(closest_pair(a,l,m),closest_pair(a,m+1,r))
    //合并
    var b=[]
 
    for(var i=l;i<r;i++){
        if(Math.abs(a[i].x-x)>=d){
            continue
        }
        for(var j=0;j< b.length;j++){
            var dx=a[i].x-b[b.length-j-1].x
            var dy=a[i].y-b[b.length-j-1].y
            if(dy>=d){break}
            d=Math.min(d,Math.sqrt(dx*dx+dy*dy))
 
        }
        b.push(a[i])
    }
    return d
}
 
//按照x排序
var re=closest_pair(A,0, A.length)
console.log(re)

  

posted @   无工时代  阅读(1682)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示