算法设计与分析习题答案1-6章.docx
算法分析与设计 第1章习题答案 1-1,1-2,1-3,1-6
第一章习题(1-1,1-2,1-3,1-6)
1-1 求下列函数的渐进表达式
3n2+10n = O(n2)
n2/10+2n = O(2n)
21+1/n = O(1)
logn3 = O(logn)
10log3n = O(n)
知识点:
如果存在正的常数C和自然数N0,使得:
当N>=N0时有f(N)<=Cg(N),则称f(N)当N充分大时上有界,且g(N)是它的一个上界,记为f(N)=O(g(N)).
这时,可以说f(N)的阶不高于g(N)的阶。
1-2 论O(1)和O(2)的区别
O(1)和O(2)差别仅在于其中的常数因子,根据渐进上界记号O的定义可知,O(1)=O(2)。
1-3 从低到高排列以下表达式(按渐进阶排列以下表达式)
结果:2 logn n2/320n 4n23n n! 分析:
当n>=1时,有logn< n2/3
当n>=7时,有3n < n!
补充:
当n>=4时,有logn> n1/3
1-6 对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=Θ(g(n))。
知识点:
f(n)的阶不高于g(n)的阶:f(n)=O(g(n));f(n)的阶不低于g(n)的阶:f(n)=Ω(g(n));f(n)与g(n) 同阶:f(n)=Θ(g(n)) (1)f(n)= logn2 ; g(n)= logn+5
f(n)与g(n)同阶,故f(n)=Θ(g(n)) (2) f(n)= logn2 ; g(n)= n1/2
算法设计与分析习题解答
第一章作业
1.证明下列Ο、Ω和Θ的性质
1)f=Ο(g)当且仅当g=Ω(f)
证明:充分性。若f=Ο(g),则必然存在常数c1>0和n0,使得∀n≥n0,有f≤c1*g(n)。由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。同理,若g=Ω(f),则必然存在c2>0和n0,使得∀n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)
证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得∀n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得∀n≥n1,有
F(n) ≤ c1 (f(n)+g(n))
= c1 f(n) + c1g(n)
≤ c1*max{f,g}+ c1*max{f,g}
=2 c1*max{f,g}
所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))
对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)
证明:
∙由于log(n!)=∑=n i i 1log ≤∑=n
算法设计和分析习题答案解析1_6章
习题1
1. 图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)
提出并解决了该问题。七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次,
图1.7是这条河以及河上的两个岛和七座桥的
草图。请将该问题的数据模型抽象出来,并判
断此问题是否有解。
七桥问题属于一笔画问题。
输入:一个起点
输出:相同的点
1, 一次步行
2, 经过七座桥,且每次只经历过一次
3, 回到起点
该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。
2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法
1.r=m-n
2.循环直到r=0
2.1 m=n
2.2 n=r
2.3 r=m-n
3 输出m
3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码和C++描述。
//采用分治法
//对数组先进行快速排序
//在依次比较相邻的差
#include <iostream>
using namespace std;
int partions(int b[],int low,int high) {
图1.7 七桥问题
int prvotkey=b[low];
b[0]=b[low];
while (low<high)
{
while (low<high&&b[high]>=prvotkey)
算法设计与分析-习题参考答案
算法设计与分析基础
习题1.1
5..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立.
Hint:
根据除法的定义不难证明:
●如果d整除u和v, 那么d一定能整除u±v;
●如果d整除u,那么d也能够整除u的任何整数倍ku.
对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。
数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。
故gcd(m,n)=gcd(n,r)
6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?
Hint:
对于任何形如0<=m<n的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcd(m,n)=gcd(n,m)
并且这种交换处理只发生一次.
7.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?(1次)
b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?(5次)
gcd(5,8)
习题1.2
1.(农夫过河)
P—农夫W—狼G—山羊C—白菜
2.(过桥问题)
1,2,5,10---分别代表4个人, f—手电筒
4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平方根的函数)
算法Quadratic(a,b,c)
//求方程ax^2+bx+c=0的实根的算法
《算法设计与分析》考试题目及答案(DOC)
else
for (int i=0;i<=1;i++) {
x[t]=i;
if (legal(t)) backtrack(t-1);
}
}
D. void backtrack (int t) { if (t>n) output(x); else for (int i=t;i<=n;i++) { swap(x[t], x[i]); if (legal(t)) backtrack(t+1); } }
}
Hanoi 塔
D. void hanoi(int n, int C, int A, int B) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }
3. 动态规} 划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质 C.最优子结构性质与重叠子问题性质 D. 预排序与递归调用
C.最优子结构性质与重叠子问题性质 D. 预排序与递归调用
7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。 A. 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先
8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间 树。
(陈慧南 第3版)算法设计与分析——第1章课后习题答案
第一章课后习题
姓名:赵文浩 学号:16111204082 班级:2016 级计算机科学与技术
1-4 证明等式 gcd(m,n)=gcd(n mod m, m) 对每对正整数 m 和 n,m>0 都成立。
flag=1; DeleteFirstChar(s); } if(flag==1)//若首位元素被删除, 那么执行 DeleteChar(s,x);继续检查第一个 字符是否为 x,并做相应操作 DeleteChar(s,x); else DeleteChar(s+1,x);//若首位元素未被删除, 那么执行 DeleteChar(s+1,x); 检查下一个字符是否为 x,并做相应操作 } } void DeleteFirstChar(char *s)//辅助函数,用于删除字符串 s 的首位字符元素 { int i=0; while(s[i]!='\0') { s[i]=s[i+1]; i++; } }
1-12 试用归纳法证明程序 1-7 的排列产生器算法的正确性。
证明:主函数中,程序调用 perm(a,0,n),实现排列产生器。 ① 当 n=1 时,即数组 a 中仅包含一个元素。函数内 k=0,与(n-1)=0 相等,因此函 数内仅执行 if(k==n-1)下的 for 语句块,且只执行一次。即将 a 数组中的一个元 素输出,实现了对一个元素的全排列。因此当 n=1 时,程序是显然正确的; ② 我们假设程序对于 n=k-1 仍能够满足条件, 将 k-1 个元素的全排列产生并输出; ③ 当 n=k 时,程序执行 else 下语句块的内容。首先执行 swap(a[0],a[0]),然后执 行 Perm(a,1,n),根据假设②可知,该语句能够产生以 a[0]为第一个元素,余下 (k-1)个元素的全排列; 然后再次执行 swap(a[0],a[0]), 并进行下一次循环。 此时 i=1, 即在本次循环中, 先执行 swap(a[0],a[1]), 将第二个元素与第一个元素互换, 下面执行 Perm(a,1,n), 根据假设②可知, 该语句产生以 a[1]为第一个元素, 余下(k-1)个元素的全排列; 以此类推,该循环每一次将各个元素调到首位,通过执行语句 Perm(a,1,n)以及 基于假设②,能够实现产生 k 个元素的全排列。 因此 n=k 时,程序仍满足条件。 ④ 综上所述,该排列器产生算法是正确的,证毕。
算法分析与设计习题答案
算法分析与设计习题答案
《算法分析与设计》期末复习题及答案
⼀、简要回答下列问题:
1.算法重要特性是什么?
2.算法分析的⽬的是什么?
3.算法的时间复杂性与问题的什么因素相关?
4.算法的渐进时间复杂性的含义?
5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?
6.简述⼆分检索(折半查找)算法的基本过程。
7.背包问题的⽬标函数和贪⼼算法最优化量度相同吗?
8.采⽤回溯法求解的问题,其解如何表⽰?有什么规定?
9.回溯法的搜索特点是什么?
10.n皇后问题回溯算法的判别函数place的基本流程是什么?
11.为什么⽤分治法设计的算法⼀般有递归调⽤?
12.为什么要分析最坏情况下的算法时间复杂性?
13.简述渐进时间复杂性上界的定义。
14.⼆分检索算法最多的⽐较次数?
15.快速排序算法最坏情况下需要多少次⽐较运算?
16.贪⼼算法的基本思想?
17.回溯法的解(x1,x2,……x n)的隐约束⼀般指什么?
18.阐述归并排序的分治思路。
19.快速排序的基本思想是什么。
20.什么是直接递归和间接递归?消除递归⼀般要⽤到什么数据结构?
21.什么是哈密顿环问题?
22.⽤回溯法求解哈密顿环,如何定义判定函数?
23.请写出prim算法的基本思想。
参考答案:1. 确定性、可实现性、输⼊、输出、有穷性
2. 分析算法占⽤计算机资源的情况,对算法做出⽐较和评价,设计出额更好的算法。
3. 算法的时间复杂性与问题的规模相关,是问题⼤⼩n的函数。
4.当问题的规模n趋向⽆穷⼤时,影响算法效率的重要因素是T(n)的数量级,⽽其他因素仅是使时间复杂度相差常数倍,因此可以⽤T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
算法分析与设计(习题答案)
算法分析与设计教程
习题解答
第1章 算法引论
1. 解:算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列计算方法。 频率计数是指计算机执行程序中的某一条语句的执行次数。
多项式时间算法是指可用多项式函数对某算法进行计算时间限界的算法。 指数时间算法是指某算法的计算时间只能使用指数函数限界的算法。
2. 解:算法分析的目的是使算法设计者知道为完成一项任务所设计的算法的优劣,进而促
使人们想方设法地设计出一些效率更高效的算法,以便达到少花钱、多办事、办好事的经济效果。
3. 解:事前分析是指求出某个算法的一个时间限界函数(它是一些有关参数的函数);事
后测试指收集计算机对于某个算法的执行时间和占用空间的统计资料。
4. 解:评价一个算法应从事前分析和事后测试这两个阶段进行,事前分析主要应从时间复
杂度和空间复杂度这两个维度进行分析;事后测试主要应对所评价的算法作时空性能分布图。
5. 解:①n=11; ②n=12; ③n=982; ④n=39。
第2章 递归算法与分治算法
1. 解:递归算法是将归纳法的思想应用于算法设计之中,递归算法充分地利用了计算机系统内部机能,自动实现调用过程中对于相关且必要的信息的保存与恢复;分治算法是把一个问题划分为一个或多个子问题,每个子问题与原问题具有完全相同的解决思路,进而可以按照递归的思路进行求解。
2. 解:通过分治算法的一般设计步骤进行说明。 3. 解:int fibonacci(int n) {
if(n<=1) return 1;
return fibonacci(n-1)+fibonacci(n-2); }
《算法分析与设计》练习题一答案.docx
《算法分析与设计》练习题一答案
1.程序书写格式应该遵循哪四个原则?
参考答案:
(1)正确使用缩进:一定要有缩进,否则代码的层次不明显。
(2)在一行内只写一条语句。
(3), '}'位置不可随意放置。
(4)变量和运算符之间最好加1个空格
2.什么是算法?
参考答案:
用计算机解决问题的过程可以分成三个阶段:分析问题、设计算法和实现算法。算法可以理解为冇基本运算及规定的运算顺序所构成的完整的解题步骤,它是求解问题类的、机械的、统一的方法,它由有限多个步骤组成,对于问题类屮每个给定的具体问题,机械地执行这些步骤就可以得到问题的解答。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
3.什么是线性结构?什么是非线性结构?
参考答案:
线性结构:数据逻辑结构屮的一类。它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所冇结点都冇R只冇一个直接前趋和一个直接后继。线性表就是一个典型的线性结构。栈、队列、串等都是线性结构。
非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接而趋和直接后继。数组、广义表、树和图等数据结构都是非线性结构。
4.已知二叉树后序遍丿力序列是DABEC,屮序遍丿力序列是DEBAC,则前序遍历序列是什么?参考答案:
前序遍历序列是CEDBA
5.什么是数制?
参考答案:
数制是人们利用符号进行计数的一种科学方法。数制也称计数制,是用一组固定的符号和统一的规则來表示数值的方法。
6.如果将十进制数106转换为八进制数,结果是多少?
2020年算法分析设计习题答案
8.
若m[i,j]>t, 则m[i,j]=t; s[i,j]=k;
第3章 动态规划
再讨论圆周上的石子合并问题, 子结构[i:j]稍作修改 • 定义m[i][len]为合并第i堆到第i+len-1堆石子能得到的最少分数 • 当i+len-1>n时, 指跨过第n堆到第(i+len-1)%n堆,
仅sum函数需要修改
解: 设机器1上t秒能解的问题规模为 n1, 机器2上t秒能解的问题规模为 n2.
(1) 由 t = 32n1 = 32n2 /64 知, n2=n1+6, 所以规模增大6. (2) 由 t = n12 = n22 /64 知, n2 = 8 n1, 所以规模增大7倍. (3) 若 t 8 则n1可以任意大, 若t1/8则n2可以任意大.
第2章 分治
2-8 设n个不同的整数排好序后存于T[1:n]中. 若存在一个下标i, 1 i n, 使得T[i]=i. 设计一个有效算法找到这个下标. 要求算 法在最坏情况下的计算时间O(log n).
解: 不同整数意味着要么严格递增, 要么严格递减 若T[1:n]严格递减, 则
T[i]<i蕴含j>i(T[j]<j), T[i]>i蕴含j<i(T[j]>j) 满足二分法条件, 可用二分搜索 若T[1:n]严格递增, T[i]>i蕴含j>i(T[j]>j), T[i]<i<0蕴含j<i(T[j]<j) 也满足二分法条件, 可用二分搜索 满足二分法条件也意味着至多有一个解. 算法略
算法设计与分析_王红梅_课后答案网(部分)
第六章
动态规划法
• P137 2 ,3, 4
•
2.解答:cost[i]表示从顶点i 到终点n-1 的最短路径,path[i]表示从顶点i 到终点n-1 的路径上顶点i 的下一个顶点。
cost[i]=min{cij+cost[j]}
3 有5 个物品,其重量分别是{3, 2, 1, 4,5},价值分别为{25, 20, 15, 40, 50},背包的容量为6。V[i][j]表
示把前i 个物品装入容量为j 的背包中获得的最大价值。
最优解为(0,0,1,0,1)最优值为65. 4.
序列A =(x, z , y , z , z , y,x ),B =(z , x , y , y , z , x , z ),建立两个(m+1)×(n+1)的二 维表L 和表S ,分别存放搜索过程中得到的子序列的长度和状态。z , x , y , y , z,x , z )
path[i]= 使 cij+cost[j] 最小的 j i 0
1
2
3
4
5
6
7
8 9 10 11 12 13 14 15 Cost[i] 18 13 16 13 10 9 12 7 6
8
7
5
9
4
3
Path[i]
1
4
5
7
7
8
9
11 11 11 13 14 14 15 15 0
得到最短路径 0->1->4->7->11->14->15 , 长度为 18
(a)长度矩阵L(b)状态矩阵S 。。。。。。
第七章贪心算法
2.背包问题:
有7 个物品,背包容量W=15。将给定物品按单位重量价值从大到小排序,结果如下:
个物品,物品重量存放在数组w[n]中,价值存放在数组
算法设计与程序分析习题精选含答案(第一章)
作业一
1.1.8. What does Euclid's algorithm do for a pair of integers in which the first is smaller than the second? What is the maximum number of times this can happen during the algorithm's execution on such an input?
答:
欧几里得算法采用重复应用gcd(m,n)直到m mod n =0,对于任何0
1.1.1
2. Locker doors There are n lockers in a hallway, numbered sequentially from 1 to n. Initially, all the locker doors are closed. You make n passes by thelockers, each time starting with locker #1. On the ith pass,i=1,2,..….n, you toggle the door of every ith locker: if the door is closed, you open it; if it is open, you close it. After the last pass, which locker doors are open and which are closed? How many of them are open?
算法设计与分析报告习题
《算法设计与分析》习题
第一章算法引论
1、算法的定义?
答:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。
通俗讲,算法:就是解决问题的方法或过程。
2、算法的特征?
答:1)算法有零个或多个输入;2)算法有一个或多个输出; 3)确定性;4)有穷性
3、算法的描述方法有几种?
答:自然语言、图形、伪代码、计算机程序设计语言
4、衡量算法的优劣从哪几个方面?
答:(1) 算法实现所耗费的时间(时间复杂度);
(2) 算法实现所所耗费的存储空间(空间复杂度);
(3) 算法应易于理解,易于编码,易于调试等等。
5、时间复杂度、空间复杂度定义?
答:指的是算法在运行过程中所需要的资源(时间、空间)多少。
6、时间复杂度计算:
{i=1;
while(i<=n)
i=i*2; }
答:语句①执行次数1次,
语句②③执行次数f(n), 2^f(n)<=n,则f(n) <=log2n;
算法执行时间: T(n)= 2log2n +1
时间复杂度:记为O(log2n) ;
7.递归算法的特点?
答:①每个递归函数都必须有非递归定义的初值;否则,递归函数无法计算;(递归终止条件)
②递归中用较小自变量函数值来表达较大自变量函数值;(递归方程式)
8、算法设计中常用的算法设计策略?
答:①蛮力法;②倒推法;③循环与递归;④分治法;
⑤动态规划法;⑥贪心法;⑦回溯法;⑧分治限界法
9、设计算法:
递归法:汉诺塔问题?兔子序列(上楼梯问题)?
整数划分问题?
蛮力法:百鸡百钱问题?
倒推法:穿越沙漠问题?
答:算法如下: (1) 递归法
● 汉诺塔问题
算法设计与分析习题答案1-6章
习题1
1.
图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼
斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经
过一次,图1.7是这条河以及河上的两个岛和七
座桥的草图。请将该问题的数据模型抽象出来,并判断此问题是否有解。
七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点 1, 一次步行
2, 经过七座桥,且每次只经历过一次 3, 回到起点
该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。
2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法 1.r=m-n
2.循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3 输出m
3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码和C ++描述。
//采用分治法
//对数组先进行快速排序 //在依次比较相邻的差 #include <iostream> using namespace std;
int partions(int b[],int low,int high) {
图1.7 七桥问题
int prvotkey=b[low];
b[0]=b[low];
while (low<high)
{
while (low<high&&b[high]>=prvotkey)
算法分析与设计试题答案
算法分析与设计习题
第一章算法引论
一、填空题:
1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。
2、多项式10()m m A n a n a n a =+++的上界为O(n m )。
3、算法的基本特征:输入、输出、确定性、有限性。
4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。
5、计算下面算法的时间复杂度记为: O(n 3) 。
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{c[i][j]=0;
for(k=1;k<=n;k++)
c[i][j]= c[i][j]+a[i][k]*b[k][j];
}
6、描述算法常用的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。
7、算法设计的基本要求:正确性 和 可读性。
8、计算下面算法的时间复杂度记为: O(n 2) 。
for (i =1;i
{ y=y+1;
for (j =0;j <=2n ;j++ )
x ++;
}
9、计算机求解问题的步骤:问题分析、数学模型建立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。
10、算法是指解决问题的 方法或过程 。
二、简答题:
1、按照时间复杂度从低到高排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3),
O( n!)应该排在哪一位?
答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n ),O( n!)
2、什么是算法?算法的特征有哪些?
算法设计与分析习题答案1-6章
习题1
1. 图论诞生于七桥问题。出生于瑞士
的伟大数学家欧拉(Leonhard
Euler ,1707—1783)提出并解决了该问题。七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次,图是这条河以及河上的两个岛和七座桥的草图。请将该问题的数据模型抽象出来,并判断此问题是否有解。
七桥问题属于一笔画问题。
输入:一个起点
输出:相同的点
1, 一次步行
2, 经过七座桥,且每次只经历过一次
3, 回到起点
该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。
图 七桥问题
南
2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法
=m-n
2.循环直到r=0
m=n
n=r
r=m-n
3 输出m
3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码和C++描述。
编写程序,求n至少为多大时,n个“1”组成的整数能被2013整除。
#include
using namespace std;
int main()
{
double value=0;
for(int n=1;n<=10000 ;++n)
{
value=value*10+1;
if(value%2013==0)
{
cout<<"n至少为:"<
break;
}
}计算π值的问题能精确求解吗编写程序,求解满足给定精度要求的π值
#include
using namespace std;
算法设计与分析习题解答(第2版)
第1章算法引论11.1 算法与程序1
1.2 表达算法的抽象机制1
1.3 描述算法3
1.4 算法复杂性分析13
小结16
习题17
第2章递归与分治策略19
2.1 递归的概念19
2.2 分治法的基本思想26
2.3 二分搜索技术27
2.4 大整数的乘法28
2.5 Strassen矩阵乘法30
2.6 棋盘覆盖32
2.7 合并排序34
2.8 快速排序37
2.9 线性时间选择39
2.10 最接近点对问题43
2.11 循环赛日程表53
小结54
习题54
第3章动态规划61
3.1 矩阵连乘问题62
目录算法设计与分析(第2版)3.2 动态规划算法的基本要素67 3.3 最长公共子序列71
3.4 凸多边形最优三角剖分75
3.5 多边形游戏79
3.6 图像压缩82
3.7 电路布线85
3.8 流水作业调度88
3.9 0-1背包问题92
3.10 最优二叉搜索树98
小结101
习题102
第4章贪心算法107
4.1 活动安排问题107
4.2 贪心算法的基本要素110
4.2.1 贪心选择性质111
4.2.2 最优子结构性质111
4.2.3 贪心算法与动态规划算法的差异111
4.3 最优装载114
4.4 哈夫曼编码116
4.4.1 前缀码117
4.4.2 构造哈夫曼编码117
4.4.3 哈夫曼算法的正确性119
4.5 单源最短路径121
4.5.1 算法基本思想121
4.5.2 算法的正确性和计算复杂性123 4.6 最小生成树125
4.6.1 最小生成树性质125
4.6.2 Prim算法126
4.6.3 Kruskal算法128
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题 1
1.图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707— 1783)
提出并解决了该问题。七桥问题是这样描述的:北区
一个人是否能在一次步行中穿越哥尼斯堡(现
东区在叫加里宁格勒,在波罗的海南岸)城中全部岛区
的七座桥后回到起点,且每座桥只经过一次,
图是这条河以及河上的两个岛和七座桥的草南区
图。请将该问题的数据模型抽象出来,并判断图七桥问题
此问题是否有解。
七桥问题属于一笔画问题。
输入:一个起点
输出:相同的点
1,一次步行
2,经过七座桥,且每次只经历过一次
3,回到起点
该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个
奇点的图形。
2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法
=m-n
2.循环直到 r=0
m=n
n=r
r=m-n
3输出 m
3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代
码和 C++描述。
编写程序,求 n 至少为多大时, n 个“1”组成的整数能被2013 整除。
#include
using namespace std;
int main()
{
double value=0;
for(int n=1;n<=10000 ;++n)
{
value=value*10+1;
if(value%2013==0)
{
cout<<"n 至少为 :"< break; } } 计算π值的问题能精确求解吗?编写程序,求解满足给定精度要求的π 值 #include using namespace std; int main () { double a,b; double arctan(double x);圣经上说:神 6 天创造天地万有,第7 日安歇。为什么是6天呢?任何一个自然数的因数中都有 1 和它本身,所有小于它本身的因数称为这个数的真 因数,如果一个自然数的真因数之和等于它本身,这个自然数称为完美数。例如, 6=1+2+3,因此6 是完美数。神 6 天创造世界,暗示着该创造是完美的。设计算法,判断给定的自然数是否是完美数 #include using namespace std; int main() { int value, k=1; cin>>value; for (int i = 2;i!=value;++i) { while (value % i == 0 ) { k+=i;有 4 个人打算过桥,这个桥每次最多只能有两个人同时通过。他们都 在桥的某一端,并且是在晚上,过桥需要一只手电筒,而他们只有一只手电筒。这就意味 1着两个人过桥后必须有一个人将手电筒带回来。每个人走路的速度是不同的:甲过桥要用 分钟,乙过桥要用 2 分钟,丙过桥要用 5 分钟,丁过桥要用10 分钟,显然,两个人走路的 速度等于其中较慢那个人的速度,问题是他们全部过桥最少要用多长时间? 由于甲过桥时间最短,那么每次传递手电的工作应有甲完成 甲每次分别带着乙丙丁过桥 例如: 第一趟:甲,乙过桥且甲回来 第二趟:甲,丙过桥且甲回来 第一趟:甲,丁过桥 一共用时19 小时 9.欧几里德游戏:开始的时候,白板上有两个不相等的正整数,两个玩家交替行动,每次行动时,当前玩家都必须在白板上写出任意两个已经出现在板上的数字的差,而且这个数字必须是新的,也就是说,和白板上的任何一个已有的数字都不相同,当一方再也写不出新数字时,他就输了。请问,你是选择先行动还是后行动?为什么? 设最初两个数较大的为则最终能出现的数包括a/factor个。a,较小的为b,两个数的最大公约数为factor : factor, factor*2, factor*3, ..., factor*(a/factor)=a. 。 一共 如果a/factor是奇数,就选择先行动;否则就后行动。 习题 4 1.分治法的时间性能与直接计算最小问题的时间、合并子问题解的时间以及子问题的个数有关,试说明这几个参数与分治法时间复杂性之间的关系。 2.证明:如果分治法的合并可以在线性时间内完成,则当子问题的规模之和小于原问题的规模时,算法的时间复杂性可达到O( n)。 O(N)=2*O(N/2)+x O(N)+x=2*O(N/2)+2*x a*O(N)+x=a*(2*O(N/2)+x)+x=2*a *O(N/2)+(a+1)*x 由此可知,时间复杂度可达到O(n); 3.分治策略一定导致递归吗?如果是,请解释原因。如果不是,给出一个不包含递归的分治例子,并阐述这种分治和包含递归的分治的主要不同。 不一定导致递归。 如非递归的二叉树中序遍历。 这种分治方法与递归的二叉树中序遍历主要区别是:应用了栈这个数据结构。 4.对于待排序序列 (5, 3, 1, 9),分别画出归并排序和快速排序的递归运行轨迹。 归并排序: 第一趟:( 5,3 )( 1,9 ); 第二趟:( 3,5,1,9 );