作业5——分治法求最近点对问题

该博客探讨了如何运用分治策略求解笛卡尔平面上的最近点对问题。通过以5为分割线逐步缩小问题规模,最终通过矩阵稀疏性减少比较次数,确保算法效率。博主详细解释了算法设计思路,并使用反证法证明了矩阵稀疏性的有效性。文章还进行了复杂度分析,得出总的时间复杂度为nlogn,并提供了源码链接。
摘要由CSDN通过智能技术生成

1.问题

求笛卡尔平面中最近点对的欧几里得距离。

2.解析

1.先以5作分割线,得PL{5,6,7,8}和PR{1,2,3,4}
2.重复操作,直到PL或PR的点集大小<=3
3.例如PL{7,8}和PR{5,6},存在最小点距d1,d2,令d1<d2,则dmin=d1
4.易得dmin不一定是最小点距,所以以dmin为划分空间,分割线上的点为基准点,此处为7,筛选出|x-x1|<d的点集R,在R中寻找最近点对的欧几里得距离。由矩阵稀疏性可得,|R|<=6,所以比较次数不会太多(分析处再证,此处先引用)。
5.由此便可得知PL的最小点距,同理PR,并就PL和PR重复步骤4,可得最小点距。

在这里插入图片描述

3.设计

struct Point 
{
   
    double x, y;
}point[MAXN];//point为点集,x升序排列,x相同时,按y升序排列
double dis(int i, int j) //求欧几里得距离的平方
{
   
    return (point[i].x - point[j].x) * (point[i].x - point[j].x) - (point[i].y - point[j].y) * (point
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值