计算机算法设计与分析.doc
《计算机算法设计与分析.doc》由会员分享,可在线阅读,更多相关《计算机算法设计与分析.doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机算法设计与分析(书要整体看看再结合老师画的重点)第一章1.算法:是在有限步骤内求解某一问题所使用的一组定义明确的规则。 程序:是算法用某种程序设计语言的具体实现。1. 算法评定标准:时空的观点标准1 算法在计算机上的执行的时间最短。标准2 算法所需要的存储空间最小。发展的观点 标准3 算法的适应性强。设计的观点 标准4 算法的设计时间少。交流的观点 标准5 算法容易理解。2. 时间复杂性论:原因: 所有关于时间复杂性增长的阶的定义和渐近界的讨论都可移植到空间复杂性的讨论中。 算法的空间复杂性相对简单,它不可能超过运行时间的复杂性,因为写入每一个内存单元都至少需要一定的时间。对于一个相同的
2、输入I,S(N)=O(T(N)。 空间复杂性降低到一定程度时会大幅度增加时间复杂性,而时间复杂性的降低一般对空间复杂性不会有太大影响。例: 求两个n阶矩阵的乘积C=AB的算法及其时间复杂性。定义矩阵A n,B n,C nfor i 0 to n 频度:n+1for j 0 to n 频度:n(n+1) Cij = 0; 频度:n2for k 0 to n 频度:n2(n+1) Cij = Cij + Aik * Bkj; 频度:n3 end for end forEnd for时间复杂性T(n) = n+1+n (n+1) + n2 + n2(n+1) + n3 = 2n3+3n2+2n+1上
3、界的阶越低则评估越有价值。 下界的阶越高,则评估精度越高,也就越有价值。 T(n)大概有三种计算方法:计算迭代次数(循环结构的执行次数)计算基本运算的频度使用递归方程(多用于递归算法)第二章1.并非所有递归函数都能找到其非递归的定义。2.分治法的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。原理:递归地解这些子问题,然后将各子问题的解合并得到原问题的解。分治法的适用条件:该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题;利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即
4、子问题之间不包含公共的子问题。(而动态规划法适合各子问题不独立时,在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计算 )3. 棋盘覆盖法:算法描述:chessBoard(tr, tc, dr, dc, size)/tr:棋盘左上角方格的行号;tc:棋盘左上角方格的列号;dr:特殊方格所在行号;dc:特殊方格所在列号;size:棋盘规格;tile是全局变量,初值为0。过程 chessBoard(tr, tc, dr, dc, size)if (size = 1) return;t tile+ ; / L型骨牌号s size/2; /
5、分割棋盘/ 覆盖左上角子棋盘if (dr tr + s & dc tc + s) / 特殊方格在此棋盘中 chessBoard(tr, tc, dr, dc, s);else / 此棋盘中无特殊方格 boardtr + s - 1tc + s - 1 = t; / 用 t 号L型骨牌覆盖右下角 chessBoard(tr, tc, tr+s-1, tc+s-1, s); / 覆盖其余方格 end if if (dr = tc + s) / 特殊方格在此棋盘中 chessBoard(tr, tc+s, dr, dc, s); else / 此棋盘中无特殊方格 boardtr + s - 1tc
6、+ s = t; / 用 t 号L型骨牌覆盖左下角 chessBoard(tr, tc+s, tr+s-1, tc+s, s); / 覆盖其余方格 end if (接下页)/ 覆盖左下角子棋盘 if (dr = tr + s & dc = tr + s & dc = tc + s) / 特殊方格在此棋盘中 chessBoard(tr+s, tc+s, dr, dc, s) else boardtr + stc + s = t / 用 t 号L型骨牌覆盖左上角 chessBoard(tr+s, tc+s, tr+s, tc+s, s) / 覆盖其余方格end if复杂度分析:T(n)=O(4k)
7、 渐进意义下的最优算法了解下合并排序和快速排序:合并排序:基本思想:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。 复杂度分析T(n)=O(nlogn) 渐进意义下的最优算法快速排序:过程Split(Aleft: right,w)1. i left; x Aleft2. for j left+1 to right3. if Ajx then4. i i+15. if ij then 互换Ai和Aj6. end if7. end for 8.互换Aleft和Ai9.w i10.return A和w注意:1. 扩展汉诺塔问题:
8、如果塔的个数变为a,b,c,d四个,现要将n个圆盘从a全部移动到d,移动规则不变,求移动步数最小的方案。2. 熟悉采用分治法求解大整数乘法基本过程。3. 通过棋盘覆盖问题理解算法的递归调用过程。4. 编写程序实现合并排序算法MergeSort和快速排序算法qSort。第三章动态规划基本思想是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。基本步骤找出最优解的性质,并刻划其结构特征。递归地定义最优值。以自底向上的方式计算出最优值。根据计算最优值时得到的信息,构造最优解。1. 动态规划算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 设计 分析
限制150内