蛮力法凸包问题Java_算法——蛮力法之最近对问题和凸包问题

上次的博客写到一半宿舍停电了。。。。然而今天想起来补充完的时候发现博客园并没有自动保存哦,微笑。

首先来看最近对问题,最近对问题描述的就是在包含n个端的集合中找到距离最近的两个点,当然问题也可以定义在多维空间中,但是这里只是跟随书上的思路实现了二维情况下的最近对问题。假设所有讨论的点是以标准的笛卡尔坐标形式(x,y)给出的,那么在两个点Pi=(Xi,Yi)和Pj=(Xj,Yj)之间的距离是标准的欧几里得距离:

d(Pi,Pj)=sqrt( (X1-X2)2+(Y1-Y2)2 )

蛮力法的思路就是计算出所有的点之间的距离,然后找出距离最小的那一对,在这里增加效率的一种方式是只计算点下标  i

使用蛮力法求平面中距离最近的两点

BruteForceClosetPoints(P)

//输入:一个n(n≥2)的点的列表P,Pi=(Xi,Yi)

//输出:距离最近的两个点的下标index1和index2

dmin   

for  i  

for    j  

d  

if   d

dmin=d;  index1=i;  index2=j;

return   index1,index2

该算法的关键步骤是基本操作虽然是计算两个点之间的欧几里得距离,但是求平方根并不是像加法乘法那么简单。上面算法中,开平方函数导数恒大于0,它是严格递增的,因此我们可以直接只计算(Xi-Xi)2+(Yj-Yj)2,比较d2的大小关系,这样基本操作就变成了求平方。平方操作的执行次数是:<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值