当前位置: 首页 > news >正文

做淘宝要用的网站百度推广账户登录

做淘宝要用的网站,百度推广账户登录,推广普通话的作文,辽宁省和城乡建设厅网站文章目录 平面最近点对(分治算法)Solution流程完整模板代码 平面最近点对(分治算法) 文章首发于我的个人博客:欢迎大佬们来逛逛 平面最近点对(加强版) - 洛谷 给你一些点,求两点之…

文章目录

  • 平面最近点对(分治算法)
  • Solution
  • 流程
  • 完整模板代码

平面最近点对(分治算法)

文章首发于我的个人博客:欢迎大佬们来逛逛

平面最近点对(加强版) - 洛谷

给你一些点,求两点之间距离最小的两个点之间的最短距离。

分治算法是解决这类问题的关键。

Solution

首先将所有的点按照 x x x 为第一关键字, y y y 为第二关键字进行排序。

排序后如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGAMATS2-1685532860870)(%E5%B9%B3%E9%9D%A2%E6%9C%80%E8%BF%91%E7%82%B9%E5%AF%B9%EF%BC%88%E5%88%86%E6%B2%BB%E7%AE%97%E6%B3%95%EF%BC%89%204c3ad0a0ba5c4743aed687f933a3e85a/Untitled.png)]

我们可以将所有的点分治:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vB6twgs-1685532860871)(%E5%B9%B3%E9%9D%A2%E6%9C%80%E8%BF%91%E7%82%B9%E5%AF%B9%EF%BC%88%E5%88%86%E6%B2%BB%E7%AE%97%E6%B3%95%EF%BC%89%204c3ad0a0ba5c4743aed687f933a3e85a/Untitled%201.png)]

在这些点中我们用一条分割线来隔开,如果我们一直分割,则到最后 l + 1 = r l+1=r l+1=r 的时候,就表明划分到了最后的两个点,因此直接计算两个点之间的**距离;**如果最后只有一个点,即 l = r l=r l=r ,则我们规定此距离为无穷大。

因此我们得到两个点之间距离之后再回溯,寻找相对于这两个点有没有更优的点对出现,则更新,继续回溯。最后结束的时候,我们一定可以得到所有点的距离最短的距离。

树型图表示如下:

  • 首先递归到 [ 1 , 2 ] [1,2] [1,2] 发现此时只有 p 1 和 p 2 p1 和p2 p1p2 两个点,因此我们计算他们的最短距离,假设为 3
  • 接着进入 [ 3 , 3 ] [3,3] [3,3] 此时只有一个点,因此规定距离为无穷大
  • 然后我们回溯到 [ 1 , 3 ] [1,3] [1,3] ,取两个孩子节点的最小值,为3;但是此时并没有结束,我们获得的 3 只是分割线两侧分别计算的最优解,我们此时还需要得到去除分割线之后的所有点的之间的最短距离,更新为 p 1 和 p 3 p1 和 p3 p1p3 之间的距离,为 2.
  • 然后递归到 [ 4 , 5 ] [4,5] [4,5] 区间,得到 p 4 和 p 5 p4 和 p5 p4p5 之间距离为 2.5。
  • 然后回溯到 根节点 [ 1 , 5 ] [1,5] [1,5] ,得到分割线两侧的点之间的最优解,为2;接着计算去除分割线之后的两点之间的最优解,得到 1.2 ,为 p 3 和 p 4 p3 和 p4 p3p4 之间的距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QEeXFBNB-1685532860871)(%E5%B9%B3%E9%9D%A2%E6%9C%80%E8%BF%91%E7%82%B9%E5%AF%B9%EF%BC%88%E5%88%86%E6%B2%BB%E7%AE%97%E6%B3%95%EF%BC%89%204c3ad0a0ba5c4743aed687f933a3e85a/Untitled%202.png)]

如何计算去除分割线之后的区间的两点的最短距离?

我们称之为 跨中线处理

  1. 首先由目标区间 [ l , r ] [l,r] [l,r] 得到所有 x x x 的差值小于 d d d 的点集合。
  2. 将这些点按照 y y y 值排序
  3. 最后直接两两之间暴力枚举 y y y 值的差值小于 d d d 的点对距离

流程

因此我们很轻松的得到分治求平面最近点对的流程:

  • 首先将所有的点按照 x x x y y y 为第一第二关键字排序。
  • 然后递归分治所有的点,递归到终点时计算点的距离,回溯返回局部最优解。
  • 然后计算全局最优解,即跨中线处理。

时间复杂度: O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)

使用归并排序会降低为 O ( n l o g n ) O(nlogn) O(nlogn)


完整模板代码

#include<bits/stdc++.h>
#if 0#define int long long
#endifconst int N=200010;
int n;
struct point{double x,y;
}A[N],B[N],T[N];
double get_dis(const point& a,const point& b){return std::sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double solve(int l,int r){//分治if (l==r){   //只有一个点return 1e9;}if (l+1==r){ //有两个点则算距离return get_dis(A[l],A[r]);}int mid=l+r>>1;double d=std::min(solve(l,mid),solve(mid+1,r)); //跨中线处理int k=0;for (int i=l;i<=r;i++){if (fabs(A[i].x-A[mid].x)<d){B[++k]=A[i];}}//按照y值排序std::sort(B+1,B+1+k,[&](const point& a,const point& b){return a.y<b.y;});for (int i=1;i<k;i++){//枚举两个点进行距离的更新for (int j=i+1;j<=k && B[j].y-B[i].y<d;j++){d=std::min(d,get_dis(B[i],B[j]));}}return d;
}
signed main(){std::cin>>n;for (int i=1;i<=n;i++){std::cin>>A[i].x>>A[i].y;}//1. 按照x为第一关键字,y为第二关键字排序std::sort(A+1,A+1+n,[&](const point& a,const point& b){if (a.x==b.x) return a.y<b.y;return a.x<b.x;});printf("%.4lf\n",solve(1,n));return 0;
}
http://www.ds6.com.cn/news/42054.html

相关文章:

  • 上网站乱码公司网络推广该怎么做
  • 招聘网站如何做薪酬报告谷歌推广代理商
  • 手机免费建立网站吗今天的国际新闻
  • 平面设计都学什么排名优化关键词
  • 视频投票网站怎么做社群营销策略有哪些
  • 自己做网站卖产品怎么样海外短视频软件
  • 织梦做淘宝客网站优化营商环境
  • 网站建站安全需求seo的英文全称是什么
  • 小型b2c网站建设费用成人短期电脑培训班学费
  • 男女做羞羞事漫画网站免费seo的工作原理
  • 做网站比较好的企业360推广登录
  • 福建省住房城乡和城乡建设厅网站东莞百度seo关键词优化
  • 政府网站制作凤凰军事新闻最新消息
  • 自己怎么做商城网站世界足球排名前100
  • 自备服务器做网站百度手机助手app下载官网
  • 网站建设工程师的职位要求网站建设流程图
  • 下载类网站怎么做会计培训班一般多少钱
  • 订阅号 微网站百度导航和百度地图
  • 新校区建设网站管理规定优秀营销软文100篇
  • html做的网站排版错误同城推广平台
  • 同服务器网站查询工具产品运营推广方案
  • 开发公司工程项目管理总结经验教训seo教程seo入门讲解
  • 万网没备案怎么做网站北京seo排名外包
  • cpa单页网站怎么做网站设计制作
  • 厦门大型网站设计公司企业网站源码
  • 公司软件管理软件seo如何优化网站步骤
  • seo优化的主要任务百度怎么优化关键词排名
  • 个人微博网站设计中国数据统计网站
  • 网站开发及设计网页一键生成app软件
  • 机械设备公司网站制作上海专业网络推广公司