码迷,mamicode.com
首页 > 编程语言 > 详细

关于算法--蛮力法--最近对和凸包问题

时间:2016-07-17 21:06:36      阅读:444      评论:0      收藏:0      [点我收藏+]

标签:

一、最近对问题:即从一个二维或多位的空间中找出距离最近的两个点

1、步骤

  a、分别计算每一对点之间的距离

  b、找出距离最近的那一对

  (为了避免重复计算,只考虑i<j的那些对)

2、JavaScript实现

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>最近对问题</title>
 6 </head>
 7 <body>
 8     
 9 </body>
10 <script type="text/javascript">
11     var point = function(x, y) {
12         var _arr = new Array();
13         _arr = [x, y];
14         _arr.x = x;
15         _arr.y = y;
16         return _arr;
17     }
18     
19     var caculate = function(p1, p2) {
20         return (p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y);
21     }
22 
23     function search(arr) {
24         var dis = Number.POSITIVE_INFINITY;
25         var indexX = null;
26         var indexY = null;
27         for(var i = 0; i < arr.length - 1; i++){
28             for(var j = i+1; j < arr.length; j++){
29                 var d = caculate(arr[i], arr[j]);
30                 if(d < dis){
31                     dis = d;
32                     indexX = i;
33                     indexY = j;
34                 }
35             }
36         }
37         return "第 "+indexX+" 个点和第 "+indexY+" 个点之间的距离最近";
38     }
39 
40     //实验阶段
41     //创建四个点坐标分别为(0,0),(2,0),(0,3),(2,1)
42     var p1 = new point(0,0);
43     var p2 = new point(2,0);
44     var p3 = new point(0,3);
45     var p4 = new point(2,1);
46     console.log(search([p1, p2, p3, p4]))
47 </script>
48 </html>

3、算法分析

可使用(Xi - Xj)2 +(Yi - Yj)2代替sqrt((Xi - Xj)2 +(Yi - Yj)2),尽量避免开方;所以本算法的基本操作是求平方,执行次数C(n) = Σ[i=1 to n-1]Σ[j=i+1 to n] 2 = n(n - 1),属于Θ(n2)


 

一、凸包问题

1、凸集合概念:对于平面上一个点集合,如果以集合中任意两点P和Q未断电的线段,均属于该集合,则集合是凸的

2、凸包:凸包是包含所有点的最小凸集合

3、一般判断方法:判断是否所有其他点都在连接P1和P2的直线同一侧

4、一般时间效率:它属于Θ(n3);对于不同的点的每一个n(n-1)/2,都要比较其它n-2个点的符号

 

关于算法--蛮力法--最近对和凸包问题

标签:

原文地址:http://www.cnblogs.com/likaopu/p/5679297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!