美文网首页
分治求解一维最近点对问题

分治求解一维最近点对问题

作者: tmax | 来源:发表于2018-11-01 20:53 被阅读0次

为最近对问题的一维版本设计一个直接基于分治技术的算法,并确定它的时间复杂度。假设输入的点是以升序保存在数组A中。(最近点对问题定义:已知上m个点的集合,找出对接近的一对点。)
#include <iostream>
#include <limits.h>

using namespace std;

int closestPointPair(int * arr, int p, int q)//分治计算最近距离
{
    if(p==q)
    {
        return INT_MAX;
    }
    else if(p<q)
    {
        int m=(p+q)/2;
        int Ldis = closestPointPair(arr, p, m);
        int Rdis = closestPointPair(arr, m+1, q);
        int dis = arr[m+1]-arr[m];

        int Min = Ldis<Rdis?Ldis:Rdis;
        Min = Min<dis?Min:dis;
        return Min;
    }
}

struct pointPair
{
    int x;
    int y;
};

struct pointPair closestPointpair(int *arr, int p, int q)//分治计算最近距离的点对
{
    if(p==q)
    {
        struct pointPair pointpair = {INT_MIN,INT_MAX};
        return pointpair;
    }
    else if(q-p==1)
    {
        struct pointPair pointpair = {arr[p], arr[q]};
        return pointpair;
    }
    else
    {
        int m = (p+q)/2;
        struct pointPair Lpointpair = closestPointpair(arr, p, m);
        struct pointPair Rpointpair = closestPointpair(arr, m+1, q);
        struct pointPair Cpointpair = {arr[m], arr[m+1]};
        struct pointPair cpp = (Lpointpair.y-Lpointpair.x) < (Rpointpair.y-Rpointpair.x)?Lpointpair:Rpointpair;
        cpp = (cpp.y-cpp.x) < (Cpointpair.y-Cpointpair.x)?cpp:Cpointpair;
        return cpp;
    }
};

int main()
{
    int arr[8]={1,4,6,8,10,11,15,17};
    cout<<closestPointPair(&arr[0], 0, 7)<<endl;

    struct pointPair pp = closestPointpair(&arr[0], 0, 7);
    cout<<pp.x <<","<<pp.y<<endl;
    return 0;
}

相关文章

  • 分治求解一维最近点对问题

    为最近对问题的一维版本设计一个直接基于分治技术的算法,并确定它的时间复杂度。假设输入的点是以升序保存在数组A中。(...

  • 分治法求解最近点对问题(python实现)

    问题描述 在一个点集合中找到一对距离最近的点。(二维点) 解决办法 1. 枚举 比较p0, p1; p0, p2;...

  • 分治法-最近点对问题

    一.实验目的 (1)掌握分治法思想。 (2)学会最近点对问题求解方法。 二.实验步骤与结果 实验总体思路: 本实验...

  • 分治法学习笔记——最近点对问题

    Divide and Conquer 分而治之——分治算法学习笔记 分治法适用情景 该问题的规模缩小到一定的程度就...

  • 动态规划

    动态规划用于求解多阶段决策最优解的问题。 其基本思想与分治法类似,也是将求解问题分解为多个子问题,与分治法不同的是...

  • 分治策略

    求解递归式方法 最大子数组问题 分治策略 分治法流程 伪代码 C++实现 线性解 流程 代入法求解递归式 递归树法...

  • 「数据结构进阶」例题之离线分治算法

    0x40「数据结构进阶」例题 CDQ分治 CDQ分治,能够将动态问题转化为静态问题求解。它将操作的时间顺序作为分治...

  • 最近对问题求解代码

  • 分治算法

    分治算法思想 在编程过程中,经常遇到处理数据相当多、求解过程比较复杂、直接求解会比较耗时的问题。在求解这类问题时,...

  • 动态规划

    1、前言 动态规划和分治算法非常类似,都是通过组合子问题的解来求解原问题。分治算法将问题划分为互不相交的子问题,而...

网友评论

      本文标题:分治求解一维最近点对问题

      本文链接:https://www.haomeiwen.com/subject/mblfxqtx.html