实验5 分治法解决就近对问题

实验5 分治法解决就近对问题

问题描述

在二维平面的N个点中,用分治法找出距离最近的一对点
在这里插入图片描述

解析

可以采取蛮力法和分治法,虽然这篇博客要讲的是分治法,但是也要提一下蛮力法

蛮力法

这种方法要计算每一对点的距离,避免同一对点计算两次,只考虑点的下标符合i<j的情况,这样要计算n(n-1)次,复杂度为O(n^2)。

分治法

分治法解决该问题,就是把平面上点的集合P先按照x轴坐标升序排列,为了更加方便,还可以按照点的y轴坐标在另一个列表中升序排列,这个列表示为Q。
当2<=N<=3时,这个问题可以用蛮力法求解
当n>3

  • 可以利用点集在x轴方向上的中位数m,在该处做一条垂线,将点集分成大小分为左右两部分
  • 分别求得两边的最短距离d1,d2
  • 取两者中的最小者记为d,在中线两边分别取d的距离,记录该距离范围内点的个数,左边L个,右边R个
  • 分别将两边的点按照y坐标升序排列
  • 在左边集合中每个点,找右边集合的点,找与之距离小于d的点更新距离
  • 循环直到结束,即可求出最短距离

设计

伪代码

EfficentClosestPair(P,Q)
//使用分治法求解
//输入:数组P中存储了平面上n>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值