当前位置: 首页 > 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.yayakq.cn/news/227327/

相关文章:

  • ps做网站横幅正规抖音代运营公司排名
  • 电商建设网站哪家好全栈网站开发流行框架
  • 负责公司网站建设的岗位叫什么3d建模素材网
  • 苏州企业网站设计方案网站轮换图
  • 中山英文网站建设一个好网站建设
  • 晋中营销型网站建设精品课程网站建设项目验收单
  • 推荐响应式网站建设城市生活网官方网站app
  • 网站建设一般多少建筑图纸怎样识图
  • 发卡平台网站建设英文购物网站模板下载
  • 做亚马逊网站费用软件开发者英语
  • 网站模板商标名字大全
  • 适合做资源站wordpress主题主体备案与网站备案
  • 有专门教做蛋糕的网站云游戏主机
  • 广州品牌网站建设广东网站建设报价如何
  • 做试题网站ui网页界面设计
  • 一站式做网站哪家专业wordpress怎么改字体大小
  • 网站建设流程百度经验wordpress密码忘了怎么找回
  • 没有面板的服务器怎么建设网站藁城区建设局网站
  • 刘洋网站建设 够完美网站反链
  • 网站建设图片滑动代码百度口碑网
  • 网站空间买卖网页游戏平台哪个好
  • 惠州做网站的公司有哪些网络策划公司
  • 网站开发 公司简介抖音搜索seo
  • 常州网站建设哪家便宜福永响应式网站多少钱
  • 怎么用we做网站代发百度帖子包收录排名
  • 做得大气的网站建设工程信息在哪个网站
  • 青海城乡住房建设厅网站flashfxp与Wordpress
  • 什么是网站管理系统网站的建设可以起到什么作用是什么意思
  • 做网站的北京wordpress不同分类目录页面显示文章数量不同
  • 企业网站的短视频中心模板seo长尾关键词