zoukankan      html  css  js  c++  java
  • 作业5 最近点对问题

    1.     问题

    给定一个二维平面上的n个点p1(x1,y1),p2(x2,y2)…pn(xn,yn).求出其中最短的两点之间的距离

    2.     解析

    主要采用分治的思想来解决问题。首先将所有点根据x坐标进行排序。大问题的是求出n的点其中最短两点的距离,可以将n个点平分为两个集合,中间的点为mid,分别求两个集合中的点最短两点的距离dist1,dist2,并得到dist = min(dist1,dist2)。但是还可能存在一种情况,最短距离的两个点分别在两个集合中。因此在解决完两个小问题后还要进行判断。在得到前两个距离后,就可以对这个问题进行化简。判断所有满足pa(xa,ya),pb(xb,yb),使得xa属于[mid-dist,mid],xb[mid,mid+dist]属于条件的两点的距离是否小于dist,并对dist进行更新。最后就可以得到dist。

    3.     设计

    findClosestPoint(tar,start,end)

    {

           Amount = end-start+1;

           Mid = (start+end)/2;

           Midvalue = (a[start].x+a[end].x)/2.0;

           If(amount == 2)

                  Return start与end之间的距离;

           Else if(amount == 1)

                  Return inf

           Else

           {

                  Dist1 = findClosestPoint(a,start,mid);

                  Dist2 = findClosestPoint(a,mid+1,end);

                  Dist = min(dist1,dist2);

                  Double thisdist = inf;

                  For(int I = start;I <= end;i++)

                         For(int j = start;j <= end;j++)

                         {

                                If(i.x属于[midvalue-dist,midvalue] && j.x属于[midvalue,midvalue+dist])

                                       Dsi = I,j之间的距离

                                       If(dis < thisdist)

                                              Thisdist = dis;

                         }    

           }

           Dist = mini(dist,thisdist);

           Return dist;

    }

    4.     分析

    5.     源码

    https://github.com/fanchile/Algorithm

  • 相关阅读:
    ReentrantLock类详解
    Linux中 docker安装
    canvas画图练习教程
    Axure 9 使用笔记
    设计模式9—工厂模式【创建型】
    Docker 快速部署 MySQL
    Laravel Sanctum SPA cookie&session 验证实践
    地图地区生成随机点
    Laravel Class 'DoctrineDBALDriverPDOMySqlDriver' not found
    LightHouse 自定义参数指令 (Argument Directives)
  • 原文地址:https://www.cnblogs.com/Fanchile/p/12565528.html
Copyright © 2011-2022 走看看