最接近点对问题一维Java算法_分治求解一维最近点对问题

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

#include

#include

using namespace std;

int closestPointPair(int * arr, int p, int q)//分治计算最近距离

{

if(p==q)

{

return INT_MAX;

}

else if(p

{

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

Min = Min

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<

struct pointPair pp = closestPointpair(&arr[0], 0, 7);

cout<

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值