《计算机算法基础》课后答案

合集下载

《大学计算机基础与计算思维》课后习题参考答案.doc

《大学计算机基础与计算思维》课后习题参考答案.doc

《大学计算机基础与计算思维》课后习题参考答案第1章计算、计算机与计算思维............................. 第2章数据的计算基础计算机硬件系统第4章操作系统基础 (11)第5章算法与数据结构 (13)第6章程序设计及软件工程基础 (17)第7章数据库技术 (19)第8章计算机网络 (22)第9章信息安全与职业道德 (24)第10章计算软件第11章办公软件Office 2010算机科学与技术学院计算机基础教学部28 292015年9月第1章计算、计算机与计算思维1.1举例说明可计算性和计算复杂性的概念。

答:对于给定的一个输入,如果计算机器能在有限的步骤内给出答案,这个问题就是可计算的。

数值计算、能够转化为数值计算的非数值问题(如语咅、图形、图像等)都是可计算的。

汁算复杂性从数学上提出计算问题难度大小的模型,判断哪些问题的讣算是简单的,哪些是困难的,研究计算过程屮时间和空间等资源的耗费情况,从而寻求更为优越的求解复杂问题的有效规则,例如著名的汉诺塔问题。

1.2列举3种电子计算机岀现之前的计算工具,并简述其主要特点。

答:(1)算盘通过算法口诀化,加快了计算速度。

(2)帕斯卡加法器通过齿轮旋转解决了自动进位的问题。

(3)机电式计算机Z・l,全部采用继电器,第一次实现了浮点记数法、二进制运算、带存储地址的指令等设计思想。

1.3简述电子计算机的发展历程及各时代的主要特征。

答:第一代一一电子管计算机(1946—1954年)。

这个时期的计算机主要釆用电子管作为运算和逻辑元件。

主存储器采用汞延迟线、磁鼓、磁芯,外存储器采用磁带。

在软件方面,用机器语言和汇编语言编写程序。

程序的编写与修改都非常繁琐。

计算机主要用于科学和工程计算。

第二代一一晶体管计算机(1954—1964年)。

计算机逻辑元件逐步由电子管改为晶体管, 体积与功耗都有所降低。

主存储器采用铁脸氧磁芯器,外存储器釆用先进的磁盘,汁算机的速度和可靠性有所提高。

《计算机科学基础》(陆汉权)课后练习参考答案

《计算机科学基础》(陆汉权)课后练习参考答案
14.硬件,软件,数据/信息,过程/处理,通信
15.因特网,开放性
16. 3W,万维网,超文本标记
17.音频,动画,图片
18.资源
19.抽象,自动化
20.计算思维
二、选择题
1. C2. A3.A4.B5.A6.C7.D8.C9.D10.C
11.A12.C13.B14.C15.D16.C17.D18.A19.B20.C
14.逐句,整体
15.算法错误
16.运算对象,变量,常量
17.整型,实型,字符型
18.符号常量
19.构造数据类型,数组元素
20.赋值语句,复合语句,返回语句
21.算术运算
22.一个,变
23.函数
24. Switch
25. While,for,for
26.do…while
27.设计方案,编码,运行维护
1.交互,硬件
2.实时,单用户单任务,多用户多任务
3.多,多道
4. IOS,Windows Mobile,Symbian,PlamOS
5.内核,Shell
6.进程管理,存储器管理,设备管理,文件管理
7.程序,作业,进程
8.外存,内存
9.块,驱动
10.硬件,软件
11.注册表,注册,Regedit,注册表编辑器
5.运算器,与,或,非
6.数据总线,地址总线,控制总线
7.主频,字长,__?__
8.复杂指令集计算机,精简指令集计算机
9.存储单元,地址
10.存储单元,32K
11.随机存储器,只读存储器,DRAM,EPROM,EEPROM
12.电缆,扇形区域,SATA
13. CD-R,CD-RW,DVD
14.固态

(整理)《计算机算法-设计与分析导论》课后习题答案.

(整理)《计算机算法-设计与分析导论》课后习题答案.

4.1:在我们所了解的早期排序算法之中有一种叫做Maxsort 的算法。

它的工作流程如下:首先在未排序序列(初始时为整个序列)中选择其中最大的元素max ,然后将该元素同未排序序列中的最后一个元素交换。

这时,max 元素就包含在由每次的最大元素组成的已排序序列之中了,也就说这时的max 已经不在未排序序列之中了。

重复上述过程直到完成整个序列的排序。

(a) 写出Maxsort 算法。

其中待排序序列为E ,含有n 个元素,脚标为范围为0,,1n -。

void Maxsort(Element[] E) { int maxID = 0;for (int i=E.length; i>1; i--) { for (int j=0; j<i; j++) {if (E[j] > E[maxID]) maxID = k; }E[i] <--> E[maxID]; } }最坏情况同平均情况是相同的都是11(1)()2n i n n C n i -=-==∑。

几遍浏览序列实现。

排序策略是顺序比较相邻元素,如果这两个元素未排序则交换这两个元素的位置。

也就说,首先比较第一个元素和第二个元素,如果第一个元素大于第二个元素,这交换这两个元素的位置;然后比较第二个元素与第三个元素,按照需要交换两个元素的位起泡排序的最坏情况为逆序输入,比较次数为11(1)()2n i n n C n i -=-==∑。

(b) 最好情况为已排序,需要(n-1)次比较。

4.3: (a)归纳法:当n=1时显然成立,当n=2时经过一次起泡后,也显然最大元素位于末尾;现假设当n=k-1是,命题也成立,则当n=k 时,对前k-1个元素经过一次起泡后,根据假设显然第k-1个元素是前k-1个元素中最大的,现在根据起泡定义它要同第k 个元素进行比较,当k元素大于k-1元素时,它为k个元素中最大的,命题成立;当k元素小于k-1元素时,它要同k-1交换,这时处于队列末尾的显然时队列中最大的元素。

大学计算机基础课后题答案

大学计算机基础课后题答案
第 4 章作业 参考解答
5.什么是变量?为什么要划分数据类型?不同的数据类型不同在什么地方? 答案要点(尽量举例说明): 变量是程序运行时可变值的标识符。一个变量往往归属于某种数据类型且有一个名字 (代表存储器中一个存放其值的区域)。 数据形式各种各样(数字、文字、图、声等),计算机中各有不同的存储和处理方式, 故需划分数据类型。 不同数据类型的存储方式、占用字节数多少以及能够执行的运算各不相同 在 Visual Basic 中执行应用程序期间,用变量临时存储数值。变量具有名字(用来引用变量 所包含的值的词)和数据类型(确定变量能够存储的数据的种类)。 8.什么是过程?什么是函数?引入的好处? 答案要点(尽量举例说明): 过程:过程名标识、可完成某种任务的语句或指令序列。 过程:函数名标识、可完成某种任务并得到一个计算结果的语句或指令序列。 好处:实现代码重用;便于复杂问题划分为多个较简模块并分头处理;增强程序通用性。 14.用伪代码描述计算欧拉常数的近似值的算法。其中欧拉常数 e 的计算公式为:
请依据汉明距离,解码下列信息: 1)100001 101010 110101 2)110010 110110 100100 3)010111 111011 101001 011110 参考答案:
符号 代码
A 111010
B 110101
1) C 101001
D 100110
E
011100
F
010011
⑸ 进程是一个独立的运行单位,也是系统进行资源分配和调度的一个独立单位。因此, 进程具有独立性,但有时进程间又具有相互制约性。
8.画出进程的状态图。
参考答案:
9. 常用输入输出方式有哪几种?各适用于什么设备? 参考答案: ⑴ 程序控制方式:完全由 CPU 控制输入输出,外围设备每发送或接收一个数据都要由 CPU 执行相应的指令来完成;与 CPU 异步工作;适合于少量、低速 I/O 设备(如键盘)的 数据输入输出。 ⑵ 中断方式:当出现来自系统外部、机器内部甚至处理机本身的例外事件,或虽为事 先安排但无法预知何时何地出现的事件时,CPU 暂停现行程序的执行,转去处理这些事件, 处理完毕后再继续执行原来的程序。适用于随机请求服务且必须及时响应的 I/O 设备(如打 印机)的数据输入输出。 ⑶ DMA(直接存储器存取)方式:I/O 设备与内存之间建立直接数据通路,数据传输 由专门的 DMA 控制器来完成而不需要 CPU 干预也不必执行专门的程序。主要用于高速 I/O 设备(如磁盘)的数据输入输出。

《计算机软件技术基础》习题及参考答案

《计算机软件技术基础》习题及参考答案
A. 存储结构 B. 物理结构 C. 逻辑结构 D. 物理和存储结构
4.以下数据结构中不属于线性数据结构的是______。
A. 队列 B. 线性表 C . 二叉树 D. 栈
5.在计算机中,算法是指______。
A. 查询方法 B. 加工方法 C. 解题方案的准确而完整的描述 D. 排序方法
6.在下列选项中,哪个不是一个算法一般应该具有的基本特征______。
B. 随机存取的存储结构、顺序存取的存储结构
C. 随机存取的存储结构、随机存取的存储结构
D. 任意存取的存储结构、任意存取的存储结构
14.下列关于栈的描述中错误的是。
A.栈是先进后出的线性表B.栈只能顺序存储
C.栈具有记忆作用D.对栈的插入和删除操作中,不需要改变栈底指针
15.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是______。
A. 程序的规模 B. 程序的易读性 C. 程序的执行效率 D. 程序的可移植性
30.对建立良好的程序设计风格,下面描述正确的是______。
A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法
C. 充分考虑程序的执行效率 D. 程序的注释可有可无
31.下面对对象概念描述错误的是______。
A. 任何对象都必须有继承性 B. 对象是属性和方法的封装体
C. 对象间的通讯靠消息传递 D. 操作是对象的动态性属性
32.在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送______。
A. 调用语句 B. 命令 C. 口令 D. 消息
33.面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。

年计算机二级公共基础知识数据结构与算法归纳及课后习题

年计算机二级公共基础知识数据结构与算法归纳及课后习题

2012年计算机二级公共基础知识数据结构与算法归纳及课后习题第一章数据结构与算法算法---是一组严谨地定义运算顺序的规则算法的基本要素---一是对数据对象的运算和操作,二是算法的控制结构算法设计基本方法---列举法、归纳法、递推、递归、减半递推算法的复杂度---包括时间复杂度和空间复杂度时间复杂度---执行算法所需的计算工作量空间复杂度---执行算法所需的内存空间数据结构---相互有关联的数据元素的集合。

如春、夏、秋、冬;18、11、35、23、16。

;父亲、儿子、女儿等都是数据元素。

前件---数据元素之间的关系,如父亲是儿子和女儿的前件后件---如儿子是父亲的后件结构---指数据元素之间的前后件关系数据的逻辑结构—是指反映数据元素之间逻辑关系,而与它们在计算机中的存储位置无关数据的存储结构(物理结构)---数据的逻辑结构在计算机存储空间中的存放形式,数据元素在计算机存储空间的位置关系可能与逻辑关系不同。

根据数据结构中各数据元素之间前后件关系的复杂程度,可将数据结构分两类---线性结构与非线性结构线性结构(线性表)---满足下列两个条件(1)有且只有一个根结点(2)每一个结点最多有一个前件和后件。

则称该数据结构为线性结构,否则为非线性结构。

线性表是最简单、最常用的一种数据结构,其数据元素之间的相对位置是线性的,其存储方式为顺序存储的,如数组栈---是限定在一端进行插入与删除的线性表,一端封闭,另一端开口,其操作原则是“先进后出”,栈的运算有入栈、退栈、读栈顶元素队列---是指在一端进行插入(称为队尾)而在另一端进行删除(称为队头)的线性表,其操作规则是“先进先出”,其运算有入队和退队。

树---是一种简单的非线性结构,而且是层次结构,是倒立的大树,有根结点、父结点、子结点、叶子结点。

根结点在第一层,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度,树的最大层次称为树的深度。

二叉树---(1)非空二叉树只有一个根结点(2)每一个结点最多有两棵子树(左子树和右子树),其存储结构为链式。

计算机算法设计和分析习题及答案解析

计算机算法设计和分析习题及答案解析

计算机算法设计与分析习题及答案一.选择题1、二分搜索算法是利用 A 实现的算法;A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是 A ;A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是A 的一搜索方式;A、分支界限法B、动态规划法C、贪心法D、回溯法4. 回溯法解旅行售货员问题时的解空间树是 A ;A、子集树B、排列树C、深度优先生成树D、广度优先生成树5.下列算法中通常以自底向上的方式求解最优解的是B ;A、备忘录法B、动态规划法C、贪心法D、回溯法6、衡量一个算法好坏的标准是 C ;A 运行速度快B 占用空间少C 时间复杂度低D 代码短7、以下不可以使用分治法求解的是 D ;A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题8. 实现循环赛日程表利用的算法是A ;A、分治策略B、动态规划法C、贪心法D、回溯法9.下面不是分支界限法搜索方式的是D ;A、广度优先B、最小耗费优先C、最大效益优先D、深度优先10.下列算法中通常以深度优先方式系统搜索问题解的是D ;A、备忘录法B、动态规划法C、贪心法D、回溯法11.备忘录方法是那种算法的变形; BA、分治法B、动态规划法C、贪心法D、回溯法12.哈夫曼编码的贪心算法所需的计算时间为B ;A、On2nB、OnlognC、O2nD、On13.分支限界法解最大团问题时,活结点表的组织形式是B ;A、最小堆B、最大堆C、栈D、数组14.最长公共子序列算法利用的算法是B;A、分支界限法B、动态规划法C、贪心法D、回溯法15.实现棋盘覆盖算法利用的算法是A ;A、分治法B、动态规划法C、贪心法D、回溯法16.下面是贪心算法的基本要素的是C ;A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解17.回溯法的效率不依赖于下列哪些因素 DA.满足显约束的值的个数B. 计算约束函数的时间C.计算限界函数的时间D. 确定解空间的时间18.下面哪种函数是回溯法中为避免无效搜索采取的策略BA.递归函数 B.剪枝函数 C;随机数函数 D.搜索函数19. D是贪心算法与动态规划算法的共同点;A、重叠子问题B、构造最优解C、贪心选择性质D、最优子结构性质20. 矩阵连乘问题的算法可由 B 设计实现;A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法21. 分支限界法解旅行售货员问题时,活结点表的组织形式是 A ;A、最小堆B、最大堆C、栈D、数组22、Strassen矩阵乘法是利用A 实现的算法;A、分治策略B、动态规划法C、贪心法D、回溯法23、使用分治法求解不需要满足的条件是 A ;A 子问题必须是一样的B 子问题不能够重复C 子问题的解可以合并D 原问题和子问题使用相同的方法解24、下面问题 B 不能使用贪心法解决;A 单源最短路径问题B N皇后问题C 最小生成树问题D 背包问题25、下列算法中不能解决0/1背包问题的是 AA 贪心法B 动态规划C 回溯法D 分支限界法26、回溯法搜索状态空间树是按照 C 的顺序;A 中序遍历B 广度优先遍历C 深度优先遍历D 层次优先遍历27.实现合并排序利用的算法是A ;A、分治策略B、动态规划法C、贪心法D、回溯法28.下列是动态规划算法基本要素的是D ;A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质29.下列算法中通常以自底向下的方式求解最优解的是 B ;A、分治法B、动态规划法C、贪心法D、回溯法30.采用广度优先策略搜索的算法是A ;A、分支界限法B、动态规划法C、贪心法D、回溯法31、合并排序算法是利用 A 实现的算法;A、分治策略B、动态规划法C、贪心法D、回溯法32、背包问题的贪心算法所需的计算时间为 BA、On2nB、OnlognC、O2nD、On33.实现大整数的乘法是利用的算法C ;A、贪心法B、动态规划法C、分治策略D、回溯法34.0-1背包问题的回溯算法所需的计算时间为AA、On2nB、OnlognC、O2nD、On35.采用最大效益优先搜索方式的算法是A;A、分支界限法B、动态规划法C、贪心法D、回溯法36.贪心算法与动态规划算法的主要区别是B;A、最优子结构B、贪心选择性质C、构造最优解D、定义最优解37. 实现最大子段和利用的算法是B ;A、分治策略B、动态规划法C、贪心法D、回溯法38.优先队列式分支限界法选取扩展结点的原则是 C ;A、先进先出B、后进先出C、结点的优先级D、随机39.背包问题的贪心算法所需的计算时间为 B ;A、On2nB、OnlognC、O2nD、On40、广度优先是A 的一搜索方式;A、分支界限法B、动态规划法C、贪心法D、回溯法41. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的 B ;A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解42.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 B ;A 、On2nB 、OnlognC 、O2nD 、On43. 以深度优先方式系统搜索问题解的算法称为 D ;A 、分支界限算法B 、概率算法C 、贪心算法D 、回溯算法44. 实现最长公共子序列利用的算法是B ;A 、分治策略B 、动态规划法C 、贪心法D 、回溯法45. Hanoi 塔问题如下图所示;现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置;移动圆盘时遵守Hanoi 塔问题的移动规则;由此设计出解Hanoi 塔问题的递归算法正确的为:B46. 动态规划算法的基本要素为 CA. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用 47. 能采用贪心算法求最优解的问题,一般具有的重要性质为: AA. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用48. 回溯法在问题的解空间树中,按 D 策略,从根结点出发搜索解空间树;A.广度优先B. 活结点优先C.扩展结点优先D. 深度优先49. 分支限界法在问题的解空间树中,按 A 策略,从根结点出发搜索解空间树;A.广度优先B. 活结点优先C.扩展结点优先D. 深度优先50. 程序块 A 是回溯法中遍历排列树的算法框架程序;A.B. C. D. 51. 常见的两种分支限界法为DA. 广度优先分支限界法与深度优先分支限界法;B. 队列式FIFO 分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式FIFO 分支限界法与优先队列式分支限界法;1.算法的复杂性有 时间 复杂性和 空间 ;2、程序是 算法用某种程序设计语言的具体实现;3、算法的“确定性”指的是组成算法的每条 指令 是清晰的,无歧义的;4. 矩阵连乘问题的算法可由 动态规划 设计实现;5、算法是指解决问题的 一种方法 或 一个过程 ;6、从分治法的一般设计模式可以看出,用它设计出的程序一般是 递归算法 ;7、问题的 最优子结构性质 是该问题可用动态规划算法或贪心算法求解的关键特征;8、以深度优先方式系统搜索问题解的算法称为 回溯法 ;9、计算一个算法时间复杂度通常可以计算 循环次数 、 基本操作的频率 或计算步; Hanoi 塔A. void hanoiint n, int A, int C, int B{ if n > 0{ hanoin-1,A,C, B;moven,a,b; hanoin-1, C, B, A; }} B. void hanoiint n, int A, int B, int C { if n > 0 { hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; } }C. void hanoiint n, int C, int B, int A { if n > 0 { hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; } }D. void hanoiint n, int C, int A, int B { if n > 0 { hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; } } void backtrack int t{ if t>n outputx; else for int i=t;i<=n;i++ { swapxt, xi; if legalt backtrackt+1; swapxt, xi; } } void backtrack int t { if t>n outputx;elsefor int i=0;i<=1;i++ { xt=i; if legalt backtrackt+1; } }void backtrack int t { if t>n outputx; else for int i=0;i<=1;i++ { xt=i; if legalt backtrackt-1; } }voidbacktrack int t{ if t>n outputx; else for int i=t;i<=n;i++ { swapxt, xi; if legalt backtrackt+1;}}10、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划 ,需要排序的是回溯法 ,分支限界法 ;11、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是 0/1背包问题 ,只使用约束条件进行裁剪的是 N皇后问题 ;12、贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别;13、矩阵连乘问题的算法可由动态规划设计实现;14.贪心算法的基本要素是贪心选择性质和最优子结构性质 ;15. 动态规划算法的基本思想是将待求解问题分解成若干子问题 ,先求解子问题 ,然后从这些子问题的解得到原问题的解;16.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质;17、大整数乘积算法是用分治法来设计的;18、以广度优先或以最小耗费方式搜索问题解的算法称为分支限界法 ;19、贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别;20.快速排序算法是基于分治策略的一种排序算法;21.动态规划算法的两个基本要素是. 最优子结构性质和重叠子问题性质 ;22.回溯法是一种既带有系统性又带有跳跃性的搜索算法;23.分支限界法主要有队列式FIFO 分支限界法和优先队列式分支限界法;24.分支限界法是一种既带有系统性又带有跳跃性的搜索算法;25.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数 ;26.任何可用计算机求解的问题所需的时间都与其规模有关;27.快速排序算法的性能取决于划分的对称性 ;28.所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到 ;29.所谓最优子结构性质是指问题的最优解包含了其子问题的最优解 ;30.回溯法是指具有限界函数的深度优先生成法 ;31.用回溯法解题的一个显着特征是在搜索过程中动态产生问题的解空间;在任何时刻,算法只保存从根结点到当前扩展结点的路径;如果解空间树中从根结点到叶结点的最长路径的长度为hn,则回溯法所需的计算空间通常为 Ohn ;32.回溯法的算法框架按照问题的解空间一般分为子集树算法框架与排列树算法框架;33.用回溯法解0/1背包问题时,该问题的解空间结构为子集树结构;34.用回溯法解批处理作业调度问题时,该问题的解空间结构为排列树结构;35.旅行售货员问题的解空间树是排列树 ;三、算法填空1.背包问题的贪心算法void Knapsackint n,float M,float v,float w,float x{//重量为w1..n,价值为v1..n的 n个物品,装入容量为M的背包//用贪心算法求最优解向量x1..nint i; Sortn,v,w;for i=1;i<=n;i++ xi=0;float c=M;for i=1;i<=n;i++{if wi>c break;xi=1;c-=wi;}if i<=n xi=c/wi;}2.最大子段和: 动态规划算法int MaxSumint n, int a{int sum=0, b=0; //sum存储当前最大的bj, b存储bjfor int j=1; j<=n; j++{ if b>0 b+= aj ;else b=ai; ; //一旦某个区段和为负,则从下一个位置累和 ifb>sum sum=b;}return sum;}3.贪心算法求活动安排问题template<class Type>void GreedySelector int n, Type s, Type f, bool A{A1=true;int j=1;for int i=2;i<=n;i++if si>=fj{ Ai=true;j=i;}else Ai=false;}4.快速排序template<class Type>void QuickSort Type a, int p, int r{if p<r{int q=Partitiona,p,r;QuickSort a,p,q-1; //对左半段排序QuickSort a,q+1,r; //对右半段排序}}5. 回溯法解迷宫问题迷宫用二维数组存储,用'H'表示墙,'O'表示通道int x1,y1,success=0; //出口点void MazePathint x,int y{//递归求解:求迷宫maze从入口x,y到出口x1,y1的一条路径mazexy=''; //路径置为if x==x1&&y==y1 success=1; //到出口则成功else{if mazexy+1=='O' MazePathx,++y;//东邻方格是通路,向东尝试if success&&mazex+1y=='O' MazePath++x,y;//不成功且南邻方格是通路,向南尝试if success&&mazexy-1=='O' MazePathx,--y;//不成功且西邻方格是通路,向西尝试if success&&mazex-1y=='O' MazePath--x,y;//不成功且北邻方格是通路,向北尝试}if success mazexy=''; //死胡同置为}四、算法设计题1. 给定已按升序排好序的n个元素a0:n-1,现要在这n个元素中找出一特定元素x,返回其在数组中的位置,如果未找到返回-1;写出二分搜索的算法,并分析其时间复杂度;template<class Type>int BinarySearchType a, const Type& x, int n{//在a0:n中搜索x,找到x时返回其在数组中的位置,否则返回-1Int left=0; int right=n-1;While left<=right{int middle=left+right/2;if x==amiddle return middle;if x>amiddle left=middle+1;else right=middle-1;}Return -1;}时间复杂性为Ologn2. 利用分治算法写出合并排序的算法,并分析其时间复杂度void MergeSortType a, int left, int right{if left<right {//至少有2个元素int i=left+right/2; //取中点mergeSorta, left, i;mergeSorta, i+1, right;mergea, b, left, i, right; //合并到数组bcopya, b, left, right; //复制回数组a}}算法在最坏情况下的时间复杂度为Onlogn;3.N皇后回溯法bool Queen::Placeint k{ //检查xk位置是否合法for int j=1;j<k;j++if absk-j==absxj-xk||xj==xk return false;return true;}void Queen::Backtrackint t{if t>n sum++;else for int i=1;i<=n;i++{xt=i;if 约束函数 Backtrackt+1;}}4.最大团问题void Clique::Backtrackint i // 计算最大团{ if i > n { // 到达叶结点for int j = 1; j <= n; j++ bestxj = xj;bestn = cn; return;}// 检查顶点 i 与当前团的连接int OK = 1;for int j = 1; j < i; j++if xj && aij == 0 // i与j不相连{OK = 0; break;}if OK { // 进入左子树xi = 1; cn++;Backtracki+1;xi = 0; cn--; }if cn+n-i>bestn { // 进入右子树xi = 0;Backtracki+1; }}5. 顺序表存储表示如下:typedef struct{RedType rMAXSIZE+1; //顺序表int length; //顺序表长度}SqList;编写对顺序表L进行快速排序的算法;int PartitionSqList &L,int low,int high //算法10.6b{//交换顺序表L中子表L.rlow..high的记录,枢轴记录到位,并返回其所在位置, //此时在它之前后的记录均不大小于它.int pivotkey;L.r0=L.rlow; //用子表的第一个记录作枢轴记录pivotkey=L.rlow.key; //枢轴记录关键字while low<high //从表的两端交替地向中间扫描{while low<high&&L.rhigh.key>=pivotkey --high;L.rlow=L.rhigh; //将比枢轴记录小的记录移到低端while low<high&&L.rlow.key<=pivotkey ++low;L.rhigh=L.rlow; //将比枢轴记录大的记录移到高端}L.rlow=L.r0; //枢轴记录到位return low; //返回枢轴位置}void QSortSqList &L,int low,int high{//对顺序表L中的子序列L.rlow..high作快速排序int pivotloc;if low<high //长度>1{pivotloc=PartitionL,low,high; //将L.rlow..high一分为二QSortL,low,pivotloc-1; //对低子表递归排序,pivotloc是枢轴位置 QSortL,pivotloc+1,high; //对高子表递归排序}}void QuickSortSqList &L{//对顺序表L作快速排序QSortL,1,L.length; }。

《计算机数学基础》(第二版)习题参考答案

《计算机数学基础》(第二版)习题参考答案

《计算机数学基础》(第二版)习题参考答案习题1.11.42,23,42---x x ,1722++x x ,4682-+x x ,h x 234++。

2. (1)]14,6[,]3,2[-=-=R D 。

(2)]1,0[,]1,1[=-=R D 。

(3)),0[,),(∞+=∞+-∞=R D 。

(4)),0[,),(∞+=∞+-∞=R D 。

(5)]1,1[,),(-=∞+-∞=R D 。

3.(1)不同,因为定义域不同。

(2)不同,因为对应规则不同。

(3)相同,因为定义域和对应规则均相同。

4.(1)]2,2[-=D 。

(2)}1|{≠=x x D 。

(3)),(D ∞+-∞=。

(4)),(D ∞+-∞=。

图略5.(1)2010h T +-=。

(2)10k =。

(3)C 5︒-。

6.(1)有界;(2)有界;(3)无界;(4)有界。

7.(1)非奇非偶函数;(2)奇函数;(3)偶函数;(4)偶函数。

8.(1)周期函数,周期是π2;(2)非周期函数;(3)周期函数,周期是π。

习题1.21.(1)),(,)13(2))((223∞+-∞=-±+=±±g f D x x x x g f ; ),(,263))((2345∞+-∞=--+=∙fg D x x x x x g f ;}33|{,132))(/(/223±≠=-+=x x D x x x x g f g f 。

(2)]1,1[,11))((-=-±+=±±g f D x x x g f ;]1,1[,1))((2-=-=∙fg D x x g f ;)1,1[,11))(/(/-=-+=g f D xx x g f 。

2.(1)),(,62118))((2∞+-∞=++=g f D x x x g f , ),(,236))((2∞+-∞=+-=f g D x x x f g , ),(,88))((34∞+-∞=+-=f f D x x x x f f ,),(,89))((∞+-∞=+=g g D x x g g 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机算法分析—习题课第四章:2 、3、5、6、10、11、23P99-2在下列情况下求解4.1节的递归关系式T(n)= ()2(/2) () gnnTnfn⎧⎨⎩足够小+否则当①g(n)=O(1)和f(n)=O(n);②g(n)=O(1)和f(n)=O(1)。

P99-2递推表达式设n=2k则:T(n)=T(2k)=2T(2k-1)+f(2k)=2(2 T(2k-2)+f(2k-1)) +f(2k)=22T(2k-2)+21f(2k-1)+ f(2k)=…………=2kT(1)+2k-1f(2)+2k-2f(22)+…+20f(2k)=2kg(n)+ 2k-1f(2)+2k-2f(22)+…+20f(2k)g(n)=O(1)和f(n)=O(n)当g(n)=O(1)和f(n)=O(n)时不妨设g(n)=a,f(n)=bn,则:T(n)=T(2k)= 2ka+ 2k-1*2b+2k-2*22b+…+20*2kb=2ka+kb2k=an+bnlog2n=O(nlog2n)g(n)=O(1)和f(n)=O(1)当g(n)=O(1)和f(n)=O(1)时,不妨设g(n)=c,f(n)=d,则:T(n)=T(2k)=c2k+2k-1d+2k-2d+ (20)=c2k+d(2k-1)=(c+d) n-d=O(n)P99-3根据2.2节开始所给出的二分检索策略,写一个二分检索的递归过程。

Procedure BINSRCH(A, low, high, x, j)integer midif low≤highthenmid←⎣(low+high)/2 ⎦if x=A(mid) thenj←mid;endifif x>A(mid) thenBINSRCH(A, mid+1, high, x, j);endifif x<A(mid) thenBINSRCH(A, low, mid-1, x, j);endifelsej←0;endifend BINSRCHP99-5作一个“三分”检索算法,它首先检查n/3处的元素是否等于某个x的值,然后检查2n/3处的元素。

这样,或者找到x,或者把集合缩小到原来的1/3。

分析此算法在各种情况下的计算复杂度。

Procedure ThriSearch(A, x, n, j)integer low, high, p1, p2low←1; high←nwhile low≤highdop1←⎣(high+2low)/3 ⎦p2←⎣(2high+low)/3 ⎦case:x=A(p1): j←p1; return:x=A(p2): j←p2; return:x<A(p1): high←p1-1:x>A(p2): low ←p2+1:else: low←p1+1; high←p2-1end caserepeatj←0end ThriSearch实例运行{ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } 361时间复杂度成功:O(1),O(log3(n)),O(log3(n))最好,平均,最坏失败:O(log3(n)),O(log3(n)),O(log3(n))最好,平均,最坏P99-6对于含有n个内部结点的二元树,证明E=I+2n其中,E,I分别为外部和内部路径长度。

证明:数学归纳法当n=1时,易知E=2,I=0,所以E=I+2n成立;假设n≤k(k>0)时,E=I+2n成立;此时新树内部结点为k个,则满足:Ek=Ik+2k(1)考察原树的外部路径长度和内部路径长度:Ek+1= Ek-h+2(h+1) (2)Ik+1=Ik+h(3)综合(1)(2)(3)式:Ek+1= Ik+2k+h+2= Ik+1-h+2k+h+2= Ik+1+2(k+1)故命题成立。

P99-10过程MERGESORT的最坏情况时间是O(nlogn),它的最好情况时间是什么?能说归并分类的时间是Θ(nlogn)吗?最好情况:对有序文件进行排序分析归并的次数不会发生变化----log(n)次归并中比较的次数会发生变化(两个长n/2序列归并)最坏情况两个序列交错大小需要比较n-1次最好情况一个序列完全大于/小于另一个序列比较n/2次差异都是线性的,不改变复杂性的阶最好情况也是nlog(n), 平均复杂度nlog(n)。

P99-11写一个“由底向上”的归并分类算法,从而取消对栈空间的利用。

见《数据结构》---第九章P238算法MPass(R,n,1ength.X)MP1 [初始化]i←1 .MP2 [合并相邻的两个长度为length的子文件]WHILE i ≤n –2*length + 1 DO(Merge(R,i,i+length–l,i+2*length–1.X).i←i+2*length ).MP3 [处理余留的长度小于2*length的子文件]IF i+length–1 < n THENMerge(R,i,i+length–1,n. X)ELSEFOR j = i TO n DO Xj←Rj▌P99-23通过手算证明(4.9)和(4.10)式确实能得到C11,C12,C21和C22的正确值。

C11=P+S-T+V=(A11+A22)(B11+B22) +A22(B21-B11) -(A11+A12)B22+(A12-A22)(B21+B22)=A11B11+A22B11+A11B22+A22B22 +A22B21-A22B11-A11B22-A12B22 +A12B21+ A12B22-A22B21-A22B22=A11B11 +A12B21P=(A11+A22)(B11+B22)T=(A11+A12)B22Q=(A21+A22)B11U=(A21-A11)(B11+B12)R=A11(B12-B22)V=(A12-A22)(B21+B22)S=A22(B21-B11)P=(A11+A22)(B11+B22)T=(A11+A12)B22Q=(A21+A22)B11U=(A21-A11)(B11+B12)R=A11(B12-B22)V=(A12-A22)(B21+B22)S=A22(B21-B11)C12=R+T= A11B12-A11B22 +A11B22+A12B22= A11B12 +A12B22C21=Q+S= A21B11+A22B11 +A22B21-A22B11= A21B11 +A22B21C22=P+R-Q+U=(A11+A22)(B11+B22)+A11(B12+B22)-(A21+A22)B11+(A21-A11)(B11+B12)=A11B11+A22B11+A11B22+A22B22+A11B12-A11B22-A21B11-A2 2B11 +A21B11 +A21B12-A11B11-A11B12=A22B22+A21B12P=(A11+A22)(B11+B22)T=(A11+A12)B22Q=(A21+A22)B11U=(A21-A11)(B11+B12)R=A11(B12-B22)V=(A12-A22)(B21+B22)S=A22(B21-B11)计算机算法分析—习题课第五章:2、3 、6、8 、9 、10、11 、12 P121-2.求以下情况背包问题的最优解,n=7,m=15,(p1 ,…, p7)=(10,5,15,7,6,18,3)和(w1,…,w7)=(2,3,5,7,1,4,1)。

将以上数据情况的背包问题记为I。

设FG(I)是物品按pi的非增次序输入时由GREEDY-KNAPSACK所生成的解,FO(I)是一个最优解。

问FO(I)/ FG(I)是多少?当物品按wi的非降次序输入时,重复②的讨论。

①按照pi/mi的非增序可得(p5/w5, p1/w1,p6/w6, p3/w3,p7/w7,p2/w2, p4/w4)=(6,5,9/2,3,3,5/3,1)所以最优解为:(1,2/3,1,0,1,1,1),并且FO(I)=166/3②按照pi的非增次序输入时,得到(p6, p3, p1, p4, p5, p2, p7)= (18,15,10,7,6,5,3),对应的(w6, w3, w1, w4, w5, w2, w7)= (4,5,2,7,1,3,1),则FG(I)的解为(1,0,1,4/7,0,1,0),并且FG(I)=47,所以FO(I)/FG(I)=166/141.③按照wi的非降次序输入时,得(w5,w7,w1,w2,w6,w3,w4)=(1,1,2,3,4,5,7),相应的(p5, p7, p1, p2, p6, p3, p4)=(6,3,10,5,18,15,7),则FW(I)的解为(1,1,4/5,0,1,1,1),并且FW(I)=54,所以FO(I)/ FW(I)=83/81.P122-33.(0/1背包问题)如果将5.3节讨论的背包问题修改成 极大化 约束条件 xi=0或1 1≤i≤n 这种背包问题称为0/1背包问题。

它要求物品或者整件装入背包或者整件不装入。

求解此问题的一种贪心策略是:按pi/wi的非增次序考虑这些物品,只要正被考虑的物品能装的进就将其装入背包。

证明这种策略不一定能得到最优解。

1niipxΣ1niiwxM≤Σ证明:当按照pi/wi的非增次序考虑物品存放背包时,如果所装入的物品恰能装满背包时,显然为最优解,否则未必是最优解.可举例如下:设n=3,M=6,(p1,p2,p3)=(3,4,8),(w1,w2,w3)=(1,2,5)按照pi/wi的非增序得到(p1/w1,p2/w2,p3/w3)=(3,2,1.6),则其解为(1,1,0),而事实上最优解是(1,0,1) 。

问题得证。

P122-6.假定要将长为l1,l2,…,l n的n个程序存入一盘磁带,程序i被检索的频率是f i。

如果程序按i1,i2,…,i n的次序存放,则期望检索时间(ERT)是:①证明按l i的非降次序存放程序不一定得到最小的ERT。

②证明按f i的非增次序存放程序不一定得到最小的ERT。

③证明按f i/l i的非增次序来存放程序时ERT取最小值。

①l:(4,1,2) f:(0.8,0.1,0.1)按li的非降序存放程序ERT=0.1*1+0.1*3+0.8*7=6而最优解为0.8*4+0.1*5+0.1*7=4.4②l:(16,1,2) f:(0.8,0.1,0.1)按fi的非增序存放程序ERT=0.8*16+0.1*17+0.1*19=16.4而最优解为0.1*1+0.8*17+0.1*19=15.6证明结论③是正确的,证明如下:假设li1,li2,…,lin按照fi/li的非增次序存放,即fi1/li1≥fi2/li2≥…≥fin/lin,则得到ERT=[fi1li1+fi2(li1+li2)+…+fik(li1+li2+…+lik)+…+fin(li1+li2+…+lin )]/ 假设该问题的一个最优解是按照j1,j2,…,jn的顺序存放,并且其期望检索式是ERT’,我们只需证明ERT≤ERT’,即可证明按照fi/li的非增次序存放得到的是最优解。

相关文档
最新文档