- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分治法解最接近问题
算法分析与设计实验报告
2014-2015第一学期
实验一:用分治法解最接近点对问题
指导教师:cccc
实验时间:2014年10月28日 实验地点:计算中心二楼
班级: 计ccc
学号: 124cc08
姓名: 杨cc
成绩:
实验一 用分治法解最接近点对问题的实验
一、实验内容:
实践名称: 时间安排:学时 一、实验目的
通过上机实验,要求掌握分治法的问题描述、算法设计思想、程序设计和算法复杂性分析等。
二、实验环境
装有Visual C++6.0的计算机。
本次实验共计3学时。
三、实验内容
1、熟悉分治算法思想
掌握如何创建应用程序。
掌握对最接近点对问题描述,及如何运用算法策略对问题解决和实现。
2、掌握如何编译程序
理解编译过程中的错误信息,并掌握如何排错。
3、掌握如何调试程序
掌握如何通过设置断点来单步调试程序,如何查看当前变量的值。
4、实验题:
完成用分治法解最接近点对问题的实验。
要求:
实现该实验结果。通过该实验题,解决最接近点对问题。 二、实验报告要求
1、报告内容包括实验目的、实验内容、实验步骤,实验结果和心得体会五部分;其中实验步骤包括算法分析、算法设计、算法实现主要步骤。
2、实验报告以电子文档形式发送到邮箱jsjalg@yeah.net
截止时间统一为下周二前。
算法分析
?问题描述:已知集合S中有n个点,分治法的思想就是将S进行拆分,分为2部分求最近点对。将S拆分左右两部分为SL和SR,一般取点集S中所有点的中间点的x坐标来划分,这样可以保证SL和SR中的点数目各为n/2,依次找出这两部分中的最小点对距离:δL和δR,记SL和SR中最小点对距离δ?= min(δL,δR)???
???? 以L为中心,δ为半径划分一个长带,最小点对还有可能存在于SL和SR的交界处,如下图2左图中的虚线带,p点和q点分别位于SL和SR的虚线范围内,在这个范围内,p点和q点之间的距离才会小于δ,最小点对计算才有意义。
????
figure 2
?
对于SL虚框范围内的p点,在SR虚框中与p点距离小于δ的顶多只有六个点,就是图二右图中的2个正方形的6的顶点。这个可以反推证明,如果右边这2个正方形内有7个点与p点距离小于δ,例如q点,则q点与下面正方形的四个顶点距离小于δ,则和δ为SL和SR中的最小点对距离相矛盾。因此对于SL虚框中的p点,不需求出p点和右边虚线框内所有点距离,只需计算SR中与p点y坐标距离最近的6个点,就可以求出最近点对,节省了比较次数。?
figure 3
如上图:把距离分割线中间2δ范围内的点装入temp数组中,按照x坐标从小打到排序。若要找出距离P点最近的点,只需要和其下面六个点比较即可(具有稀疏性质)。再找出距离S1点最近的距离,也是之和其下六个点比较即可。依次对S2,S3,s4,……..,sm 进行同样操作。?
而且对于下图情况同样适用
figure 4
?? 这样,先将带状区间的点按y坐标排序,然后线性扫描,这样合并的时间复杂度为O(nlogn),
#includeiostream
#includecstring
#includecstdio
#includecmath
#includealgorithm
using namespace std;
const double INF =1e20; // 用于初始化
const int N=100005; // 用于申请数组长度为 N
struct Point // 构造点
{
double x;
double y;
}point[N];
int n;
int tmpt[N]; // 用于保存距离 mid 为d的长度中的点
bool cmpx(const Point a,const Point b) // 按x坐标从小到大排序Point数组
{
return a.xb.x;
}
bool cmpy(const int a,const int b)// 按y坐标从小到大排序Point数组
{
return point[a].ypoint[b].y;
}
double min( double a,double b)
{
return ab?a:b;
}
double dis(int i,int j) // 求下标为 i和 j的两
您可能关注的文档
- 几何三大变换讲答案.doc
- 几何形体与形体正方体球圆柱.doc
- 几何画板 课件 三角函数图像的变换和应用.doc
- 几何画板教程:期(用工具画图).doc
- 几何画板 课件 函数图象的变换.doc
- 几何画板教程:章(用构造菜单作图).doc
- 几款国产CAD的比较.docx
- 几款高速数模转片的中文资料.doc
- 几种初等函数的和定义以及标准方程的推导证明.doc
- 几种常见酵母菌菌的形态结构观察.docx
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)