算法设计与分析——输油管道问题试验报告_第1页
算法设计与分析——输油管道问题试验报告_第2页
算法设计与分析——输油管道问题试验报告_第3页
算法设计与分析——输油管道问题试验报告_第4页
算法设计与分析——输油管道问题试验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目:输油管道问题学号00913130弓楠_,z一,学生姓名小专业(班级)09计本1班00913133朱玉婷设计题目输油管道问题设计技术参数系统平台:windows7开发工具:MicrosoftVisualC+6.0设计要求1 .掌握问题分析的方法与步骤,选择合适的方法解决问题。2 .选择合适的算法编写程序。工作计划1:熟悉题目并理解,及找寻相关资料。2:根据题目设计普分析算法。3:使用VisualC+实现。4:完成设计报告参考资料吕国英.算法设计与分析.北京:清华大学出版社,2009摘要本实验,我们通过综合应用算法解决了实际生活中的输油管道问题,通过比较各种算法的时间复杂度以及解决效率,采用

2、了算法中以分治法为基础的随机划分来解决问题,利用随机选择方法找到各个油井的中位数,通过讨论论证了中位数即最优管道位置。信息奥赛中一个问题有多个算法解决,通过比较不同算法解决问题的效率,选择最高效的一个。在输油管道问题这个实验中得到运用。关键词:算法设计,分治法,随机划分,随机选择,中位数1需求分析1.1实验内容目录错误!未定义书签。错误!未定义书签错误!未定义书签。1.2 系统的基本逻辑模型1.3 确定目标系统的功能.52总体设计错误!未定义书签2.1问题分析错误!未定义书签1 解题思路6.1 解题方法.71.2. 算法思想.71.2. 算法分析.73详细设计.9.具体描述9.程序分析11程序

3、代码.11程序结果.144总结16设计体会1.6反思总结16参考文献.错误!未定义书签。.需求分析实验内容某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?证明可在线性时间内确定主管道的最优位置。给定n口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和。系统的基本逻辑模型设给定的n口油井的位置坐标为:(x0,y0),(x1,y1),(x2,y2)

4、,(xn-1,yn-1)。由于平面上的距离满足三角不等式,故每个油井到主管道的最短距离就是该油井到主管道的垂直距离。由此可知,所述问题可表述为求平面上的一条直线到若干点的最短路径,通过总体设计中的解题思路我们论证得出只要该条直线处在所有点的中间位置就能保证最后的距离最短。根据题意,给定了n个油井的位置,因此首先从文件读取每个油井的坐标,再在这个基础上对各个油井的y坐标进行排序,通过随机选择算法找到它们的中位数,即可得到求出最短距离确定目标系统的功能通过本实验的设计,我们可以找到一个到各个油井之间的长度总和最小的输油管道,确定出输油管道的位置,并且计算出长度之和。在实际生活中,本实验的程序设计,

5、可以节省工程的耗资,并且也可以省去人工计算的繁琐。.总体设计系统设计一般分为总体设计和详细设计。经过需求分析阶段的工作,已经清楚系统必须完成的工作,下面的工作就应该是决定“如何做”的问题,总体设计的基本目的的就是“概要地说系统应该如何实现?”。问题分析实际上就是对输入的数据,找出与这些数据的差绝对值的和最小的数.基本的思路就是找出中位数.解题思路如何确定主管道的最优位置?由于主管道是由东向西,显然,主管道的铺设位置只和各油井位置的y坐标有关,设各个油井的y坐标为:yi,主管道的y坐标为:dy,各油井到主管道之间的输油管道长度总和应是:sum,要使这个值最小,主管道的位置y坐标应是各个油井y坐标

6、的中位数(一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数)。证明(反证法):油井数目为奇数:假设主管道的最优位置y坐标值为y_val,不是各个油井位置y坐标的中位数y_median,我们可以假设y_val>y_median(不失一般性),y坐标小于y_val的油井数目为m,y坐标大于y_val的油井数目为n,显然有m>n。当我们将主管道位置下移距离x时(假设此时仍满足y_val>=y_median),各油井到主管道之间的输油管道长度总和应增加nx-mx,显然nx-mx<0(m>n),即存在一个比y_val更优的位置使得各油井到主管

7、道之间的输油管道长度总和更小,这与假设矛盾。油井数目为偶数:证明情况同奇数情况。不同的是主管道的最优位置y坐标可以是各油井y坐标的两个中位数之间的任一整数。解题方法通过我们对数据结构和算法设计的学习,为了求得中位数,我们先通过划分算法对所有油井y坐标进行排序,然后通过随机选择方法RandomizedSelec竹导至U中位数。算法思想分治算法的基本思想是将一个规模个为N的问题分解为K规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。算法分析分治算法是很多高效算法的基础,如排序算法(快速排序、归并排序)、傅立叶变换(快速傅立叶变换)。快速排序是由东尼霍尔所

8、发展的一种排序算法。在平均状况下,排序n个项目要O(nlgn)次比较。在最坏状况下则需要O(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlgn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实作出来,且在大部分真实世界的资料,可以决定设计的选择,减少所需时间的二次方项之可能性。在此题中,我们考虑到时间复杂度,对于中位数这类选择问题的解决,不一定要先排序然后遍历(事实上这是比较慢的做法,排序的时间复杂度决定了它不可能比O(nlgn)快。通常选择问题只是要求知道第i大/小的元素,所以我们可以将本实验的问题当成排序算法的简化。我们就以上述的

9、快速排序为例,我们以划分的区间判断,选择问题我们只追究可能出现问题解的一个区间,而快速排序要处理两个区间。由此,我们可以清晰的明白利用随机划分解决此问题可以缩短时间复杂度。利用数据结构教材中的随机选择算法RandomizedSelect计算出中位数median(y),然后计算n口油井到主管道的最小长度总和,则所需时间主要是随机选择算法RandomizedSelect用的时间,在平均情况下需要qn)计算时间。3,详细设计具体描述详细设计阶段的根本任务是确定应该怎样具体实现所要求的输油管道定位问题,也就是经过这个阶段的设计工作,应该得出对输油管道问题的精确描述,从而在输油管道定位的实现阶段可以把这

10、个描述直接翻译成用某种程序设计语言书写的程序。把经过总体设计得到的各个模块详细的加以描述。3-1.总体结构图float*a,floatp,r3-2.patition算法设计图如果基数在中间数的左边则重复进行以上操作3-3.RandomizedSelectM法设计图程序分析程序代码主函数的作用:首先初始化油井的坐标数组,由用户从键盘输入各个油井的总数,然后再输入各个油井的坐标,并且会显示出来。intmain()(intsize=0;char*inFileName="D:in.txt"char*outFileName="D:out.txt"ifstreami

11、nput(inFileName,ios:in);/从文件读取数据input>>size;int*a=newintsize;intreadcount=1,i=0;while(readcount<=(size*2)(inttemp=0;input>>temp;if(readcount%2=0)ai+=temp;readcount+;input.close();/获取数据中位数,即为通道丫坐标intlength=RandomizedSelect(a,0,size-1,(size+1)/2);printf("最佳位置y=%dn",length);pri

12、ntf("最短距离已保存在文件中!");/将总的管道长度写入out.txt文件中write(outFileName,lengthOfPipeline(a,size,length);system("pause");return0;Patition(划分)函数的作用:将一串数据由大到小进行排序,最后返回划分时所用基数的位置floatPartition(float*a,floatp,floatr)floati=p,j=r+1;floatx=ap;/将<x的元素交换到右边区域/将>*的元素交换到左边区域while(true)(while(a+i<

13、;x&&i<r);while(a-j>x);if(i>=j)break;swap(ai,aj);ap=aj;aj=x;returnj;/获取划分后基数的位置RandomizedPartition(随机划分优化算法)函数的作用:在所有坐标中随机选择一个,并以此作为基数进行划分,最后返回该基数的位置floatRandomizedPartition(float*a,floatp,floatr)(floati=Random(p,r);/产生随机数swap(ai,ap);/交换基数和第一个数returnPartition(a,p,r);/返回划分后基数的位置Random

14、izedSelect(随机选择)函数的作用:找到排序后数据的中位数floatRandomizedSelect(float*a,floatp,floatr,floatk)(if(p>=r)returnap;floati=RandomizedPartition(a,p,r);/将随机基数的为位置赋给ifloatj=i-p+1;/获取基数距第一个数的长度if(k=j)returnai;/如果基数在中间则返回基数的值if(k<j)returnRandomizedSelect(a,p,i-1,k);/如果基数在中间数的右边则重复进行以上操作ElsereturnRandomizedSelect

15、(a,i+1,r,k-j);/如果基数在中间数的左边则重复进行以上操作/此函数就是当基数处在油井的中间时返回该值3.2.2程序结果txt-记事本-alxi文件(E)编辑格式)查看9帮助4.总结设计体会通过该课程设计,全面系统的理解了算法设计与分析的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的算法知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与算法的认识是模糊的,现在通过自己动手做实验,从实践上应用了算法,了解了算法在一个程序中是如何起作用的,并且学会比较各种算法的优劣。通过对本实验的分析,对于输油管道实质上就是求解

16、中位数的问题,经过讨论和总结我们得到三种解法:(1)用教材中的快速排序算法quicksort将n油井的y坐标排序后,容易计算出中位数median(y),由此容易求得n口油井到主管道的最小长度之和;(2)用教材中最坏情况下的线性时间选择算法select计算出中位数median(y),然后计算n口油井到主管道的最小长度之和;(3)用教材中的随机选择算法randomizedselect计算出中位数median(y),然后计算n口油井到主管道的最小长度之和。下面我们比较一下它们算法计算复杂性。.时间需求(1)如果用教材中的快速排序算法QuickSort将n油井的y坐标排序后,再计算出中位数median(y),则所需时间主要是排序算法用的时间,在平均情况下需要O(nlog(n)计算时间。(2)如果用教材中的最坏情况下的线性时间选择算法Select计算出中位数median(y),然后计算n口油井到主管道的最小长度总和,则所需时间主要是选择算法Select用的时间,在最坏情况下需要O(n*n)计算时间。(3)如果用教材中的随机选择算法RandomizedSelect计算出中位数median(y),然后计算n口油井到主管道的最

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论