实验报告
课程名称 《算法分析与设计》 实验日期 2021年4月12日 至 2021年 4 月 18日
学生姓名 戴子博 所在班级 计算机194 学号 2019212212130
实验名称 最近对问题
实验地点 恕园16-302 同组人员
1.问题
最近对问题
2.解析
3.设计
double ClosePair(point p[],point q[],int n){
if(n==2)
return distance(p[0],p[1]);
if(n==3){
double d1,d2,d3;
d1=distance(p[0],p[1]);
d2=distance(p[1],p[2]);
d3=distance(p[0],p[2]);
return min(d1,min(d2,d3));
}
int mid=n/2;
point pl[mid],ql[mid],pr[n-mid],qr[n-mid],s[n];
for(int i=0;i<mid;i++){
pl[i]=p[i];
ql[i]=q[i];
}
for(int i=0;i<n-mid;i++){
pr[i]=p[mid+i];
qr[i]=q[mid+i];
}
double dl,dr,d,dminsq;
dl=ClosePair(pl,ql,mid);
dr=ClosePair(pr,qr,n-mid);
d=min(dl,dr);
double m=p[mid-1].x;
int num=0;
for(int i=0;i<n;i++){
if(abs(q[i].x-m)<d){
s[num]=q[i];
num++;
}
}
dminsq=d*d;
for(int i=0;i<num-2;i++){
for(int j=i+1;j<=num-1&&pow(s[j].y-s[i].y,2)<dminsq;j++){
dminsq=min(pow(s[j].x-s[i].x,2)+pow(s[j].y-s[i].y,2),dminsq);
}
}
return sqrt(dminsq);
}
4.分析
[算法复杂度推导]
5.源码
博客地址:https://blog.csdn.net/shaojinfu?spm=1000.2115.3001.5343
github源码地址:https://github.com/CNFierceman/Algorithm_homework.git