第6讲软件开发与软件工程.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文档。上传文档
查看更多
第6讲 软件开发 与软件工程 1 算法 (3.3) 2 程序设计 (3.3) 3 软件工程 (补充) 开发计算机软件的过程 (1) 确定并理解问题 (2) 寻找解决问题的方法与步骤,并将其表示成算法(algorithm) (3) 程序设计:使用某种程序设计语言描述该算法及其处理的对象, 并编译成目标程序 (4) 调试(debug)和运行(run)程序,获得问题的解答 (5) 进行评估, 改进算法和程序 1. 算法 什么是算法? ——算法是解决问题的方法与步骤 例:有三个硬币,其中一个是伪造的,另两个是真的,伪币与真币重量略有不同。现在提供一座天平,如何找出伪币呢? 分析: 按给定条件进行操作 明确而有序地进行 共享智能(任何人均可进行) 解决问题 必须找到算法! 例1:买鸡问题 公元5世纪末(南北朝),我国古代数学家张丘建在他所撰写的《算经》中,提出了这样的一个问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” 用“枚举法”解决买鸡问题 例2:货郎担问题 (TSP-Traveling Salesman Problem) 售货员从城市A出发,到B、C、D等若干城市销售货物。已知各城市之间的距离,要求选择一条旅行路线,使总路程最短。条件:每个城市只能经过一次,最后仍回到出发城市A。 用枚举法解决TSP问题 TSP问题与组合爆炸 4个城市,共有3!= 6种路径 5个城市,共有4!= 24种路径 10个城市,共有9!= 36万种路径 50个城市,有49!=1062路径 …… f(n) = (n-1) ! 2001年解决了15112个城市之间的TSP问题,使用110台计算机,共费时2.5月(组合爆炸) 例3:寻找最大数( 分治法 ) 分治法的基本思想 例:找最大/最小数;合并排序;矩阵乘法;二分法搜索等 例4:迷宫问题 (回溯法、试探法) 例5:Hanoi塔问题(递归法) 设A,B,C是3个塔座,塔座A上有一叠由小到大叠在一起的n个圆盘,现要求将塔座A上的这一叠圆盘移到塔座C上,并仍按同样顺序叠置。移动规则是: (1) 每次只能移动1个圆盘 (2) 不允许大盘压在小盘上 2个圆盘的情况 3个圆盘的情况 4个圆盘的情况 Hanoi塔问题分析 小结:算法设计是解决问题的关键 不同问题往往需要使用不同的算法,客观世界非常复杂,问题是无限的,所以算法也层出不穷! 借鉴已有问题的求解算法是设计新算法的“捷径”: 枚举法、回溯法、递归法、分治法、迭代法、贪心法、动态规划法,等等 设计算法是一项富有挑战性的工作,它既有严格的技术因素,必须进行缜密的思考,又需要丰富的想象力和创新思维,是惟一能使人既成为工程师又成为艺术家的一种工作 即使有了算法,也不一定能够解决问题 同一问题 往往有多种算法! 例:排序问题(sorting) 基本问题: 有一组数据 (例如整数或字符), 把它们按某种规则(例如数值大小或编码顺序)进行排列 例: 1 简单排序算法 (demo) 任给一组未排序的整数 重复下面的步骤3~5,直到未排序的数为空: 对未排序的数进行比较 选出未排序数中的最小数 把最小数移动至已排序数的末尾 2 插入排序算法 (demo) 1 任给一组未排序的整数 2 在第1个数的右面设置1个标记,标记左面为已排序的数,标记右面为未排序的数 3 重复下面的步骤4至6, 直到未排序的部分为空: 4 选择未排序部分的第1个数 5 将该数与已排序的数进行比较/交换,直到它到达正确的位置 6 将标志向右面移动1个位置 3 选择排序算法 (demo) 任给一组未排序的整数 在未排序数的左面设置1个标志,以区分已排序部分和未排序部分 重复步骤4~步骤7,直到未排序部分只剩下1个数为止: 对未排序部分的数进行比较 从中选择最小的1个数 将它与未排序部分的第1个数相互交换位置 将标志向右移动1个位置 算法分析: ——怎样选择合适的算法? 正确:给定有效输入后,经过有限时间的计算,产生正确的输出结果 直观、易理解:算法容易理解,容易验证其正确性,程序容易调试 快:运行该算法所需要的时间比较少——时间复杂性(Time Complexity)低 : 省:节省存储空间,额外占用的存储器少——空间复杂性(Space Complexity) 低: 是不是所有问题都有算法? 许多问题迄今还无有效算法! 哥德巴赫猜想 语音识别 股市预测 地震预报 长期大范围天气预报 ··· 小 结 小结1:计算机算法的4个特点 ① 明确性:算法中每一步操作的含义必须清楚明确,无二义性

文档评论(0)

allap + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档