算法-作业5-最近对问题

1.问题

最近点对问题,即平面上有n个点P1,P2,…,Pn,n>1,Pi的直角坐标为(Xi,Yi),i=1,2,…,n.求距离最近的两个点及他们之间的距离。

2.解析

分治法总体来说分为三个步骤:划分、求解子问题、合并
这题的思路是,将集合S分为左右两个子集S1和S2,两个子集分别含有n/2个点,先在每个子集中递归地求其最接近的点对,再求最近的两点分别在两个集合中的点对,最后比较得出对短距离。
在这里插入图片描述

3.设计

算法 Efficientclosestpair(P,Q)∥使用分治算法来求解最近点对问题
输入:数组P中存储了平面上的n≥2个点,并且按照这些点的x轴坐标升序排列
数组Q存储了与P相同的点,只是它是按照这点的y轴坐标升序排列
输出:最近点对之间的欧几里得距离
If(n≤3)
   返回由蛮力算法求出的最小距离
else
   将P的前「n/2˥ 个点复制到P1
   将Ω的前「n/2˥ 个点复制到Q1
   将P中余下的⎣Ln/2」个点复制到Pr
   将中余下的⎣n/2」个点复制到Qr,
   dl←Efficientclosestpair(P1, Q1)
   dr ←Efficientclosestpair(Pr, Qr)
   d←min{dl, dr}
   m ←P[「n/2˥ -1 ].x
   将Q中所有|x-m|<d的点复制到数组S[0..num-l]
   dminsq ←d^2
   for i←0 to (num-2) do
      k←i+1
      while k<= num-1 and (S[k].y-S[i].y)^2 <  dminsq
         dminsq ← min(S[k].x-S[i].x)^2+( S[k].y-S[i].y)^2, dminsq)
         k←k+1
return sqrt(dminsg)

4.分析

利用分治法求最近点对与归并排序的结构上的相同,故时间复杂度为O(nlogn)

5.算法

github源码

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值