第二章、算法设计技术.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章、算法设计技术 最基本的算法设计技术: 蛮力法 分治法 减治法 变治法 时空权衡 动态规划法 贪心法 回溯法 2.1 蛮力法 蛮力法是一种简单直接地解决问题的方法,常常直接基于问题的描述和所涉及的概念定义。 “力”是指计算机的计算能“力”。 蛮力法的重要性:1)是一种通用方法; 2)可以作为准绳,衡量其它算法的优劣; 3)对于小规模的问题(如n100)是有效的; 4)对于一些问题,它可以产生一些合理算法; 2.1.1 选择排序和冒泡排序 选择排序 扫描整列表,找到它的最小元素后与本趟的首元素交换。 冒泡排序 比较相邻元素,如果后面元素比前面元素小,就交换。 2.1.2 顺序查找和蛮力字符串匹配 1. 顺序查找 一般性查找问题的蛮力算法: 将给定列表中的元素和给定的查找键作比较,直接遇到一个匹配的元素(成功查找),或者在遇到匹配元素前就查找了整个列表(失败查找)。 实现顺序查找的一个技巧: 把查找键添加到列表的末尾,则查找就一定会成功,因此不必在算法的每次循环时都检查是否到达了表的末尾。 2. 蛮力字符串匹配 给定一个n个字符组成的串称为文本,一个m个字符的串称为模式。 一个字符串匹配问题的蛮力算法: 将模式对准文本的前m个字符,然后从左到右匹配每一对相应的字符,直到m对字符全部匹配(然后算法就可以停止了)或者遇到一对不匹配的字符。在后一种情况下,模式向右移一位,然后从模式的第一个字符开始,继续把模式和文本中的对应字符进行比较。 2.1.3 最近对和凸包问题 1. 最近对问题 要求找出一个包含n个点的集合中距离最 近的两个点的问题。 两个点的距离: 我们假设这些点是以坐标形式(x,y) 给出,那p1(x1,y1)和p2(x2,y2)的距离为: 最近对算法 算法:分别计算每一对点之间的距离,然后找出距离最短的那一对。 具体实现(用c语言): typedef struct{ int x;int y;} point; //定义点结构 void closed_point(point p[n]) { int y,j,d,dmin,index1,index2; dmin=((p[0].x-p[1].x)*(p[0].x-p[1].x))-((p[0].y-p[1].y)*(p[0].y-p[1].y)); for(i=0;in-1;i++) for(j=i+1;jn;j++) { d==((p[0].x-p[1].x)*(p[0].x-p[1].x))-((p[0].y-p[1].y)*(p[0].y-p[1].y)); if (ddmin) {dmin=d;index1=i;index2=j;} //找最小点 } print(最近对为%d和%d,index1,index2); } 2. 凸包问题 凸集合定义:对于平面上的一个点集合(有限或无限的),如果以集合中任意两点p和q为端点的线段都属于该集合,称这个集合是凸集合。 凸包的定义:凸包就是包含点集合s的最小凸集合。 凸包定理:任意包含n2个点(不共线的点)的集合的凸包是以s中的某些点为顶点的凸多边形.这些顶点称为极点。 凸包问题解决方案1:因为极点有凸集合中其他点所不具备的特性,故找出极点并求出极点的连接顺序就可解决凸包问题。 凸包问题解决方案2:从凸包的边所具有的特点入手。因为对一个n个点集合中的两个点p1和p2,当且仅当该集合中的其他点都位于这两连线的同一侧时(包括在这条直线上),它们的连线是凸包的一个边。 方案2的算法:(1).利用点集合中的两点P1,P2建立方程:ax+by-c=0, 其中 a=y2-y1, b=x1-x2, c

文档评论(0)

企业资源 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档