课后练习2.4
来源:互联网 发布:vpn for mac 编辑:程序博客网 时间:2024/05/26 12:02
个人做的课后练习
书籍:算法设计与分析基础(第三版)
习题2.4
一.
a. 5*n-5
b. 4*pow(3,n-1)
c. n*(n+1)/2
d. 2*n-1
e. log3(n)+1
二.
n!的阶乘
F(n)=n*F(n-1),其中F(0)=1;
递归的次数是:n次
三.
a.加法:A(n)=A(n-1)+1,其中A(1)=0;
解得 A(n)=n-1
乘法:M(n)=M(n-1)+2,其中M(1)=0;
解得 M(n)=2*(n-1)
b.运用递归和运用循环计算这个问题。其做的加法和乘法次数都是一样的。个人偏向使用循环,递归算法占用的内存比较大。
四.
a.该算法计算的是 n的平方
b.乘法:M(n)=M(n-1)+1,其中M(1)=0;
解得 M(n)=n-1
c.加减法:A(n)=A(n-1)+2,其中A(1)=0;
解得 A(n)=2*(n-1)
五.
a.( pow(2,64)-1)/(365*24*60)
b. pow(2,i-1)+1
c. 直接用递推公式 M(n)=M(n-1)+1+M(n-1),从第一项开始计算。
Hanoi(n) M[0]←0 for i←1 to n do M[i]←M[i-1]+1+M[i-1] return M[n]
六.
因为每一次都需要从B进行操作。我们可以假设把n个圆盘从A移到C中。假设把盘子移到相邻柱子所用步数为M(n);
首先,我们把A中的n-1个盘移动到B,然后,再把B中的n-1个圆盘移动到C,然后这时候把A中剩下的一个圆盘移动到B,再把C中的n-1个圆盘移动到B,然后再从B把n-1个圆盘移动到A,把B中剩下的一个圆盘移动到C,再把A中的n-1个圆盘移动到B,再移动到C,就完成了本次的操作了。
从上述中,我们可以得出一个公式:
2*M(n)=M(n-1)+M(n-1)+1+M(n-1)+M(n-1)+1+M(n-1)+M(n-1)=6*M(n-1)+2,其中M(1)=1;
解得有:2*M(n)=pow(3,n)-1
七.
a.可以直接用数学归纳法证明
b.递推关系有:M(n)=M(n/2)+1,其中M(0)=0;
八.
a.
value(n) if n==0 return 1; else return value(n-1)+value(n-1);
b. A(n)=A(n-1)+1+A(n-1),其中A(0)=0;
解得 A(n)=pow(2,n)-1;
c. 这里就不作图了…
d.不是一个好的算法,因为这是一个指数规模的算法。
九.
a. 找到数组里面最小的元素
b. 基本的操作是:比较
J(n)=J(n-1)+1;J(1)=0;
解得 J(n)=n-1
十.
O(n*n)
十一.
a. 显然可以得到递推关系有:
M(n)=n*M(n-1),其中M(2)=2,M(1)=0;
解得 M(n)=n!
b. 如果依然按照这个思路,利用循环,从二阶矩阵开始算起的话。
计算二阶矩阵: n(n-1)/2
计算三阶矩阵: n(n-1)(n-2)/2
…
计算n阶矩阵:n!/2
如果使用n的排列计算行列式:
算法就是 n的全排序,也就是n!
十二.
M(n)=M(n-1)+4*n,其中M(0)=1;
解得 M(n)=2(n+1)n
十三.
a.
time(n) if n==1 or n==2 return 2; else return time(n-2)+time(2);
时间的关系:n/2向上取整*2
b.显然时间不是最少的,因为烤三个面包所需的时间是3分钟。
c.
time(n) if n==3 return 3; else if n==1 or n==2 return 2; else return time(n-3)+time(3);
十四. 名人问题
从题目中,我们可以知道,所有人都认识名人,而名人不认识其他人。假如,A认识B,那么,证明了A不是名人;若,A不认识B,那么证明了B不是名人。所以,每判断一次,就可以排除一个,我们只需要n-1次,就可以筛选出最后那一个可能是名人的人。最后,我们只需要检验他到底认不认识其他人,和,其他人是否都认识他,判断有无名人。显然,这里需要2*(n-1)次,总体算法的复杂度是 O(n)
- 课后练习2.4
- 课后练习
- 课后练习
- 课后练习
- 课后练习
- Applet课后练习-2
- C#课后练习
- 毛邓三 课后练习答案
- APUE课后练习3.2
- 课后练习 exercise 4.1
- 第三章课后练习
- day02--课后练习
- 课后3 上机练习
- 课后练习 1.1
- 课后练习 1.2
- 课后练习 1.3
- 课后练习 1.4
- 课后练习 2.1
- mysql(加强篇)-------数据库的设计
- Longest Increasing Subsequence最长递增子序列(动态规划+二分查找)
- Linux--线程,pthread_detach使用
- 存储器(内存)管理基本概念
- 设计模式六大原则
- 课后练习2.4
- vlc在Ubuntu下的自动安装和手动安装
- Jquery中的DOM操作 (十.超链接提示效果)
- 8.NLTK之分析句子结构
- SQL Server 2014 启动错误及解决:Cannot find one or more componets
- Android4.4蓝牙耳机HFP流程分析-2
- LINUX查看CORE文件
- 2>&1和&>/dev/null
- 导出图片到Excel