zoukankan      html  css  js  c++  java
  • 《算法分析》作业5

    1. 问题

    在二维平面中给出N个点的坐标,求其中最近点对的距离

    2. 解析

    方法一:暴力法,对每个点都和(n-1)个点判断,不断求最小距离。

    方法二:分治法,我们将平面上N个点的集合分成两个子集s1s2,每个子集约N/2个点,然后在每个子集中递归地求最接近的点对。

    3.核心伪代码

    蛮力法:
    double baoli(){
        double dmin=inf;
        rep(i,0,n-1){
            rep(j,i+1,n-1){
                dmin=min(dmin,dis(i,j));
            }
        }
        return  dmin;
    }
    分治法:
    double dfs(int l,int r){
        double dmin=inf;
        if(l==r) return dmin;
        if(l+1==r) return dis(l,r);
        int mid=(l+r)>>1;
        double d1=dfs(l,mid);
        double d2=dfs(mid+1,r);
        dmin=min(d1,d2);
        int cnt=0;
        rep(i,l,r){
            if(fabs(p[mid].x-p[i].x)<=dmin)  mp[cnt++]=i;
        }
        sort(mp,mp+cnt,cmpy);
        rep(i,0,cnt-1){
            rep(j,i+1,cnt-1){
                if(p[mp[j]].y-p[mp[i]].y>=dmin) break;
                double d3=dis(mp[i],mp[j]);
                dmin=min(dmin,d3);
            }
        }
        return dmin;
    }

    4.复杂度分析:

      蛮力法:复杂度(n*(n-1)/2)所以时间复杂度就是O(n^2)

      分治法:时间复杂度O(nlogn*logn)

    5.github源码地址:

    https://github.com/xiaojunjun601/sfHomework1/commit/923eb3fd7442b4b43bdcf7a594c49c3623bdcef7

     

  • 相关阅读:
    精彩分享
    Cocoa.Programming.for.Mac.OS.X 3rd 前8章小知识点
    ObjectiveC protocol 和 delegate
    Object copying
    KeyValue Observing
    实现KeyValue Coding 的5种方法
    关于 XIB 和 NIB
    ObjectiveC 中的 self 和 super
    使用KeyValue Coding
    PrepareStatement的两个executeQuery语句
  • 原文地址:https://www.cnblogs.com/zpj61/p/14648721.html
Copyright © 2011-2022 走看看