算法分析与设计:作业
算法分析与设计(线下作业二)

算法分析与设计(线下作业⼆)《算法分析与设计》学习中⼼:专业:学号:姓名:作业练习⼆⼀、名词解释1、MST性质2、⼦问题的重叠性质递归算法求解问题时,每次产⽣的⼦问题并不总是新问题,有些⼦问题被反复计算多次,这种性质称为⼦问题的重叠性质。
⼆、简答题1、简述动态规划算法求解的基本要素。
答:动态规划算法求解的基本要素包括:1)最优⼦结构是问题能⽤动态规划算法求解的前提;2)动态规划算法,对每⼀个⼦问题只解⼀次,⽽后将其解保存在⼀个表格中,当再次需要解此⼦问题时,只是简单地⽤常数时间查看⼀下结果,即重叠⼦问题。
2、备忘录⽅法和动态规划算法相⽐有何异同简述之。
答:备忘录⽅法是动态规划算法的变形。
与动态规划算法⼀样,备忘录⽅法⽤表格保存已解决的⼦问题的答案,在下次需要解此问题时,只要简单地查看该⼦问题的解答,⽽不必重新计算。
备忘录⽅法与动态规划算法不同的是,备忘录⽅法的递归⽅式是⾃顶向下的,⽽动态规划算法则是⾃底向上递归的。
因此,备忘录⽅法的控制结构与直接递归⽅法的控制结构相同,区别在于备忘录⽅法为每个解过的⼦问题建⽴了备忘录以备需要时查看,避免了相同的⼦问题的重复求解,⽽直接递归⽅法没有此功能。
3、贪⼼算法求解的问题主要具有哪些性质简述之。
答:贪⼼算法求解的问题⼀般具有⼆个重要的性质:⼀是贪⼼选择性质,这是贪⼼算法可⾏的第⼀个基本要素;另⼀个是最优⼦结构性质,问题的最优⼦结构性质是该问题可⽤贪⼼算法求解的关键特征。
三、算法编写及算法应⽤分析题1、设计求解如下最⼤⼦段和问题的动态规划算法。
只需给出其递推计算公式即可。
最⼤⼦段和问题:给定由n 个整数(可能为负整数)组成的序列a1a2 … an,求该序列形如Σi≤k≤j ak的⼦段和的最⼤值。
当所有整数均为负整数时定义其最⼤⼦段和为0。
依次定义,所求的最优值为max{0, max1≤i≤j≤n Σi≤k≤j ak }。
2、关于多段图问题。
设G =(V ,E)是⼀个赋权有向图,其顶点集V 被划分成k>2个不相交的⼦集V i :1i k ≤≤,其中,V 1和V k 分别只有⼀个顶点s (称为源)和⼀个顶点t (称为汇),图中所有的边(u,v ),i u V ∈,1i v V +∈。
算法分析与设计作业参考答案

算法分析与设计作业参考答案《算法分析与设计》作业参考答案作业⼀⼀、名词解释:1.递归算法:直接或间接地调⽤⾃⾝的算法称为递归算法。
2.程序:程序是算法⽤某种程序设计语⾔的具体实现。
⼆、简答题:1.算法需要满⾜哪些性质?简述之。
答:算法是若⼲指令的有穷序列,满⾜性质:(1)输⼊:有零个或多个外部量作为算法的输⼊。
(2)输出:算法产⽣⾄少⼀个量作为输出。
(3)确定性:组成算法的每条指令清晰、⽆歧义。
(4)有限性:算法中每条指令的执⾏次数有限,执⾏每条指令的时间也有限。
2.简要分析分治法能解决的问题具有的特征。
答:分析分治法能解决的问题主要具有如下特征:(1)该问题的规模缩⼩到⼀定的程度就可以容易地解决;(2)该问题可以分解为若⼲个规模较⼩的相同问题,即该问题具有最优⼦结构性质;(3)利⽤该问题分解出的⼦问题的解可以合并为该问题的解;(4)该问题所分解出的各个⼦问题是相互独⽴的,即⼦问题之间不包含公共的⼦问题。
3.简要分析在递归算法中消除递归调⽤,将递归算法转化为⾮递归算法的⽅法。
答:将递归算法转化为⾮递归算法的⽅法主要有:(1)采⽤⼀个⽤户定义的栈来模拟系统的递归调⽤⼯作栈。
该⽅法通⽤性强,但本质上还是递归,只不过⼈⼯做了本来由编译器做的事情,优化效果不明显。
(2)⽤递推来实现递归函数。
(3)通过Cooper 变换、反演变换能将⼀些递归转化为尾递归,从⽽迭代求出结果。
后两种⽅法在时空复杂度上均有较⼤改善,但其适⽤范围有限。
三、算法编写及算法应⽤分析题: 1.冒泡排序算法的基本运算如下: for i ←1 to n-1 dofor j ←1 to n-i do if a[j]交换a[j]、a[j+1];分析该算法的时间复杂性。
答:排序算法的基本运算步为元素⽐较,冒泡排序算法的时间复杂性就是求⽐较次数与n 的关系。
(1)设⽐较⼀次花时间1;(2)内循环次数为:n-i 次,(i=1,…n ),花时间为:∑-=-=in j i n 1)(1(3)外循环次数为:n-1,花时间为:2.设计⼀个分治算法计算⼀棵⼆叉树的⾼度。
2014年12月中南大学网络教育课程考试:算法分析与设计作业参考答案

《算法分析与设计》作业参考答案作业一一、名词解释:1.递归算法:直接或间接地调用自身的算法称为递归算法。
2.程序:程序是算法用某种程序设计语言的具体实现。
二、简答题:1.算法需要满足哪些性质?简述之。
答:算法是若干指令的有穷序列,满足性质:(1)输入:有零个或多个外部量作为算法的输入。
(2)输出:算法产生至少一个量作为输出。
(3)确定性:组成算法的每条指令清晰、无歧义。
(4)有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。
2.简要分析分治法能解决的问题具有的特征。
答:分析分治法能解决的问题主要具有如下特征:(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; (3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
3.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。
答:将递归算法转化为非递归算法的方法主要有:(1)采用一个用户定义的栈来模拟系统的递归调用工作栈。
该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。
(2)用递推来实现递归函数。
(3)通过Cooper 变换、反演变换能将一些递归转化为尾递归,从而迭代求出结果。
后两种方法在时空复杂度上均有较大改善,但其适用范围有限。
三、算法编写及算法应用分析题: 1.冒泡排序算法的基本运算如下:for i ←1 to n-1 do for j ←1 to n-i do if a[j]<a[j+1] then 交换a[j]、a[j+1]; 分析该算法的时间复杂性。
答:排序算法的基本运算步为元素比较,冒泡排序算法的时间复杂性就是求比较次数与n 的关系。
(1)设比较一次花时间1;(2)内循环次数为:n-i 次,(i=1,…n ),花时间为:∑-=-=in j i n 1)(1(3)外循环次数为:n-1,花时间为:2.设计一个分治算法计算一棵二叉树的高度。
东师21秋学期《算法分析与设计》在线作业1(答案)

东师21秋学期《算法分析与设计》在线作业1(答案)一、单选题1. 字符串”China Beijing”的长度是()A.12B. 13C. 14D. 15正确答案. B2. 一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树的总结点数为()。
A.219B. 221C. 229D. 231正确答案. A3. 栈和队列的共同点是()A.都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点正确答案. C4. 使用简单选择排序法对n个数进行排序要进行()趟比较。
A. NB. n-1C. n+1D. 不一定正确答案. B5. 下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是()。
A. 选择排序法B. 插入排序法C. 快速排序法D. 堆积排序法正确答案. A6. 图中有关路径的定义是()。
A. 由顶点和相邻顶点序偶构成的边所形成的序列B. 由不同顶点所形成的序列C. 由不同边所形成的序列D. 上述定义都不是正确答案. A7. 执行memset(s,'a',4)后,s的值为()。
A. "aaaa"B. "a4"C. "4a"D. "eeee"正确答案. A8. 一个算法的评价主要从空间复杂度和()来考虑。
A. 时间复杂度B. 算法有效性C. 算法有穷性D. 算法可读性正确答案. A9. 下面的时间复杂度按数量级递增的顺序排列,正确的是注释从功能上可以分为()。
A. 平方阶O(n2),对数阶O(log2n),指数阶O(2n)B. 线性对数阶O(nlog2n),指数阶O(2n),立方阶O(n3)C. 常数阶O(1),线性阶O(n),指数阶O(2n)D. k次方阶O(nk),指数阶O(2n),对数阶O(log2n)正确答案. C10. ()嵌在源程序体中,用于描述其后的语句或程序段做什么工作,也就是解释下面要做什么,或是执行了下面的语句会怎么样。
北师大2018年春算法分析与设计作业(三)答案

《算法分析与设计》作业(三)本课程作业由两部分组成。
第一部分为“客观题部分”,由15个选择题组成,每题1分,共15分。
第二部分为“主观题部分”,由简答题和论述题组成,共15分。
作业总分30分,将作为平时成绩记入课程总成绩。
客观题部分:一、选择题(每题1分,共15题)1、贪心算法解各个子问题的方法是:( B )A、自底向上B、自顶向下C、随机选择D、自底向上或自顶向下2、用回溯法解旅行售货员问题时生成的树是:( B )A、子集树B、排列树C、二叉树D、多叉树3、在n后问题中任意两个皇后能放在:( D )A、同一行B、同一列C、同一斜线D、以上都不行4、用回溯法解0-1背包问题时生成的解空间树是:( A )A、子集树B、排列树C、二叉树D、多叉树5、用贪心算法解单源最短路径问题时采用的算法是:( A )A、Dijkstra算法B、Prime算法C、Kruskal算法D、蒙特卡罗算法6、在用动态规划解流水作业调度时的最优调度法则是:( C )A、最优子结构B、重叠子问题C、Johnson法则D、最长处理时间作业优先7、算法与程序的区别在于:( C )A、输入B、输出C、指令的确定性D、指令的有限性8、从分治法的一般设计模式可以看出,用它设计的程序一般是:( D )A、顺序B、选择C、循环D、递归9、回溯法的解空间是在搜索过程中:( A )A、动态产生B、静态产生C、无解空间D、动态或者静态产生10、在用贪心法解多机调度时的贪心选择策略是:( D )A、最优子结构B、重叠子问题C、Johnson法则D、最长处理时间作业优先11、合并排序和快速排序采用的共同策略是:( A )A、分治法B、蒙特卡罗法C、拉斯维加斯法D、单纯形法12、用回溯法解最大团问题时生成的解空间树是:( D )A、子集树B、排列树C、二叉树D、多叉树13、用分支限界法解装载问题的解空间是:( B )A、子集树B、排列树C、单向链表D、多向链表14、计算定积分的算法:( A )A、随机投点法B、舍伍德法C、分治法D、回溯法15、用随机化算法解同一实例两次得到:( C )A、结果和时间都相同B、结果相同时间不相同C、结果和时间都不相同D、以上都不对主观题部分:二、改错题(每题2.5分,共2题)下面有两个二分搜索算法,请判断它们的正确性。
算法分析与设计作业及参考答案样本

《算法分析与设计》作业( 一)本课程作业由两部分组成。
第一部分为”客观题部分”, 由15个选择题组成, 每题1分, 共15分。
第二部分为”主观题部分”,由简答题和论述题组成, 共15分。
作业总分30分, 将作为平时成绩记入课程总成绩。
客观题部分:一、选择题( 每题1分, 共15题)1、递归算法: ( C )A、直接调用自身B、间接调用自身C、直接或间接调用自身 D、不调用自身2、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的字问题, 这些子问题: ( D )A、相互独立B、与原问题相同C、相互依赖D、相互独立且与原问题相同3、备忘录方法的递归方式是:( C )A、自顶向下B、自底向上C、和动态规划算法相同D、非递归的4、回溯法的求解目标是找出解空间中满足约束条件的:( A )A、所有解B、一些解C、极大解D、极小解5、贪心算法和动态规划算法共有特点是: ( A )A、最优子结构B、重叠子问题C、贪心选择D、形函数6、哈夫曼编码是: ( B)A、定长编码B、变长编码C、随机编码D、定长或变长编码7、多机调度的贪心策略是: ( A)A、最长处理时间作业优先B、最短处理时间作业优先C、随机调度D、最优调度8、程序能够不满足如下性质: ( D )A、零个或多个外部输入B、至少一个输出C、指令的确定性D、指令的有限性9、用分治法设计出的程序一般是: ( A )A、递归算法B、动态规划算法C、贪心算法D、回溯法10、采用动态规划算法分解得到的子问题:( C )A、相互独立B、与原问题相同C、相互依赖D、相互独立且与原问题相同11、回溯法搜索解空间的方法是: ( A )A、深度优先B、广度优先C、最小耗费优先D、随机搜索12、拉斯维加斯算法的一个显著特征是它所做的随机选性决策有可能导致算法: ( C )A、所需时间变化B、一定找到解C、找不到所需的解D、性能变差13、贪心算法能得到: ( C )A、全局最优解B、 0-1背包问题的解C、背包问题的解 D、无解14、能求解单源最短路径问题的算法是: ( A )A、分支限界法B、动态规划C、线形规划D、蒙特卡罗算法15、快速排序算法和线性时间选择算法的随机化版本是:( A )A、舍伍德算法B、蒙特卡罗算法C、拉斯维加斯算法D、数值随机化算法主观题部分:二、写出下列程序的答案( 每题2.5分, 共2题)1、请写出批处理作业调度的回溯算法。
《算法分析与设计》课后作业
《算法分析与设计》各章课后作业第一章 课后作业1. 设某算法在输入规模为n 时的计算时间为T(n)=10*2n。
若在甲台计算机上实现并完成该算法的时间为t 秒,现有一台运行速度是甲的64倍的另一台计算机乙,问在乙计算机上用同一算法在t 秒内能解决的问题的规模是多大?2.按照渐近阶从低到高的顺序排列以下表达式:4n 2,logn ,3n,20n ,2,n 2/3。
又n!应该排在哪一位?第二章 课后作业1. 用展开法求解下列递推关系:T(n)=⎩⎨⎧>+=1n )()2/(20n )1(n O n T O,写出T(n)的大O 记号表示。
2. 下面是实现在a[0]<=a[1]<=…<=a[n-1]中搜索x 的二分搜索算法,请根据二分 搜索技术在下划线处填充语句。
算法描述如下: template<class Type>public static int BinarySearch(int []a, int x, int n) { //在a[0]<=a[1]<=…<=a[n-1]中搜索 x // 找到x 时返回其在数组中的位置,否则返回-1 int left = 0; int right = n - 1; while ( ) {int middle = ;if(x == a[middle]) return ; if(x > a[middle]) left = middle + 1; else right= ; }return -1; // 未找到x}第三章课后作业1、选择题。
(1)下列算法中通常以自底向上的方式求解最优解的是()。
A、备忘录法B、动态规划法C、贪心法D、回溯法(2)备忘录方法是那种算法的变形。
()A、分治法B、动态规划法C、贪心法D、回溯法(3)矩阵连乘问题的算法可由()设计实现。
A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法2.计算题。
【图文】算法分析与设计大作业
算法理论、教改类题目学习大量相关算法(程序),总结出对应方法的一些特点,将其写成论文形式,并以足够的例子作为佐证。
24.论分治法、动态规划、贪心法的区别 25.论递归程序向非递归程序的转换 26.论应用型本科院校算法课程的教学目标和教学方法 27.论二叉树在计算机科学与技术中的应用 28.数据库索引的算法解释 29.论贪心法的适用范围 30.解空间搜索方法的选择依据 31.分治法算法分析综述
算法应用、算法研究类题目查阅大量相关资料,对相关内容给出初步的结果。
31.基于UCCI的中国象棋对弈引擎开发技术研究 32.五子棋对弈关键技术研究33.黑白棋对弈关键技术研究 34.数独初始局面生成算法研究 35.支持按文件名搜索的索引构造技术研究 36.通用回溯算法演示系统设计 37.通用分支限界算法演示系统设计 38.通用排序算法演示系统设计 39.通用动态规划算法演示系统设计
40.论文阅读和翻译类题目• 给出一个英文文献,用准确的语言将其翻译为中文,不需要逐字逐句翻译,但主要观点、算法思想和算法过程表述清楚、准确、充分。
格式要求• 论文正文中不得出现大段代码(超过10行)• 标题样式需规范• 参考文献不低于10篇,参考文献格式和标注位置须规范。
算法设计与分析作业
算法设计与分析作业作业一:给一个数组,用冒泡排序、选择排序、合并排序与快速排序四种方法实现过程且比较,并把排序时间显示出来。
冒泡排序:原理:将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。
在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。
所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。
如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。
代码:package maopao;public class maopao{public void paixu(){int array[] = {1,3,-2,0,8,7,-1,13,63,-20,120};long start = System.nanoTime();//开始时间for(int i = 0;i<array.length;i++){for(int j = i+1;j<array.length;j++){if(array[i] < array[j]){int tempt = array[i];array[i] = array[j];array[j] = tempt;}}}for(int i = 0 ; i< array.length; i++){System.out.println(" "+array[i]+" ");}long end = System.nanoTime();//结束时间System.out.println("所花费的时间为: "+(end-start)+"纳秒" );//运行时间}public static void main(String[] args){maopao m = new maopao();m.paixu();}}运行结果:选择排序:原理:对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。
算法设计与分析课程大作业
算法设计与分析课程大作业-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN题目作业调度问题及算法分析学院名称:计算机与信息工程学院专业名称:计算机科学与技术目录《算法设计与分析》课程大作业.................................................................... 错误!未定义书签。
一.动态规划算法解决流水作业调度. (4)1、问题描述 (4)2、算法分析 (4)3. 算法的描述 (5)4、部分算法实现 (6)5. 运行结果 (7)6、时空效率分析 (7)二.贪心算法解多机调度问题 (7)1、问题描述 (7)2、算法分析 (7)3.部分算法实现 (7)4.计算复杂性分析 (8)5. 运行结果 (8)三.回溯法解决批作业调度问题 (8)1.问题描述 (8)2.算法思想 (9)3. 部分算法实现 (10)4.运行结果 (10)5.时间复杂性分析 (11)四.作业调度算法比较 (11)五.课程学习总结 (12)摘要:在现代企业中,作业调度已成为提高资源利用率、从而提高企业运行效益的关键环节之一。
把各个作业分配到车间现有的设备上,并确定它们的先后次序,这是一项复杂的工作本文就作业调度排序问题进行了研究,通过对几个经典作业调度算法的分析讨论,总结了各个算法对作业调度的求解过程,并给出了每个算法的复杂度及性能分析。
关键词:作业调度;动态规划;贪心算法;回溯法;一.动态规划算法解决流水作业调度1、问题描述给定n 个作业,每个作业有两道工序,分别在两台机器上处理。
一台机器一次只能处理一道工序,并且一道工序一旦开始就必须进行下去直到完成。
一个作业只有在机器1上的处理完成以后才能由机器2处理。
假设已知作业i 在机器j 上需要的处理时间为t[i,j]。
流水作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n 个作业。
2、算法分析直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 解:设cM是一次乘法运行的时间,则 T(n) ≈ cMn3/3,T(2n) ≈ cM(2n)3/3,所以 T(2n)/T(n) ≈ 8
• b. 新机器比旧机器运算速度快1000倍,假 设两台机器的运行时间相同,问新旧机器 的运算规模有什么变化
– 解:Told ≈ cMn3/3,Tnew ≈ 10-3cMN3/3 因为Told = Tnew,所以有 cMn3/3 ≈ 10-3cMN3/3 从而有 N/n ≈ 10
习题7.2-3,P201
• 3. 文本T为1000个0,模式P分别为 a. 00001 b. 10000 c. 01010 用Horspool算法进行匹配,求总比较次数
– 解:由题意知,三种情况匹配都不成功,因此有 a. ShiftTable={0→4-3=1; 1→5},每次循环比较1次, 0的滑动距离=1,所以总次数=1000-5+1=996 b. ShiftTable={1→4-0=4; 0→1},每次循环比较5次, 0的滑动距离=1,总次数=(1000-5+1)×5=4980 c. ShiftTable={0→4-2=2; 1→1},每次循环比较2次, 0的滑动距离=2 ,所以总次数=(1000-5+1)/2×2=996
• 5. 相同的文本和模式,Horspool算法的比较次数 是否有可能多于蛮力算法?举例说明 – 解:有可能。例如令T为长度为n个0的字符串, P的第1个字符为1,后m-1个字符为0, – Horspool算法比较m(n-m+1)次 – 蛮力法比较n-m+1次
习题6.5-8,P180
• 8. 改进从右到左二进制幂算法计算an,但 不明确使用n的二进制表现形式 • 解:product ← 1 term ← a while n≠0 do b ← n mod 2 n ← [n/2] if b=1 product ← product*term term ← term*term return product
习题1.2—5,P13
• 5. 写出十进制正整数转换为二进制整数的 算法
– 解:算法 Binary(n) //输入:十进制正整数n //输出:bkbk-1· · · b 1b 0 k←0 while n ≠ 0 bk ← n mod 2 n ← [n/2] k ← k+1
习题2.1—7,P39
• 7. Gaussian消去法用于求解n个n元线性方 程联立的方程组. 乘法是其基本操作,且大 约需要n3/3乘法运算. 问 a. 解一个1000个方程联立的方程组比解一 个500个方程联立的方程组要多运行多少时 间?
习题3.2-6,P82
• 6. 设文本T长度为n,模式P长度为m,给 出一个蛮力字符串匹配最差的实例,并指 出精确的比较次数
– 解:令T为长度为n个0的字符串,P的前m-1个 字符为0,第m个字符为1,此时总的比较次数 最多,结果为 C(n)=m(n-m+1),当m<<n时,有 C(n)∈Θ(nm)
• 4.应用Horspool算法在一个长度为n的文本 中查找长度为m的模式。给出最差和最优 输入的例子
• 解:最差输入:令T为长度为n个0的字符串,P的第1 个字符为1,后m-1个字符为0, 则ShiftTable={0→1; 1→m-1},此时总的比较次数最多,结果为 C(n)=m(n-m+1),当m<<n时,有 C(n)∈Θ(n2) • 最优输入: T为长度为n个0的字符串,P为长度为m的 0串,比较次数为m
习题3.2-5,P82
• 5. 用蛮力字符串匹配算法在1000个0组成 的文本中查找下列模式需做多少次比较? a. 00001 b. 10000 c. 01010
– 解:文本T长度n=1000,模式P长度m=5,对 于三种情况匹配都失败,所以外层循环执行次 数为n-m+1=996,从而有 a. 每次循环,比较5次,总次数=5×996=4980 b. 每次循环,比较1次,总次数=1×996=996 c. 每次循环,比较2次,总次数=2×996=1992
习题1.1-9,P6
• 9. 用减法实现Euclidean算法
– 解:算法 Euclid(m, n) //求两个不全为0的非负整数的GCD if m=0 return n if n=0 return m while m≠n do if m>n m <- m-n if m<n n = n-m return m
习题2.5—6,P65
• 6. 改进迭代算法Fib,使它仅需要Θ(1)的额 外空间
– 算法 Fib(n) a ← 0, b ← 0 for i ← 2 to n do b ← b+a a ← b-a if n=0 return 0 else return b
习题3.1—9.b,P79
• 9.b. 改进冒泡排序,使之在对列表比较一遍后没 有交换元素的情况下停止
算法分析与设计:作业
计算机学院 刘在德
习题1.1—6,P6
• 6. 证明等式gcd(m, n)=gcd(n, m mod n)对 每一对正整数都成立
– 证明:m可以表示成m = kn+r,则r = m mod n 假设d是m, n的一个公约数,则有 d|m, d|n,而r = m-kn,因此d|r 因此d是(n, m mod n)的公约数 假设d是(n, m mod n)的公约数,则 d|n,d|r,但是m = kn+r 因此d也是(m, n)的公约数 因此(m, n)和(n, m mod n)的公约数是一样的, 其最大公约数也必然相等,得证
Байду номын сангаас
习题2.5—4,P64
• 4. 爬梯子. 假设每一步可以爬一格或者两格 梯子,爬一部n格梯子一共有几种爬法?
– 解:令C(n)表示总的爬法,则C(n-1)表示第一 步爬一格梯子的爬法,C(n-2)表示第一步爬二 格梯子的爬法,所以有 C(n) = C(n-1)+C(n-2), n>2 C(1) = 1, C(2) = 2 解之得 C(n) = F(n+1),这里F(n)表示Fibonacci数列