一般练习

1.           设法证明1.1.2节给出的求平方根的牛顿迭代法一定收敛。

2.           修改正文红绿灯安排实例中的算法,使之最后给出的各分组达到最大,可以考虑从正文算法给出的分组出发,给每个分组加入不冲突的所有行驶方向。

3.           请完整写出采用高斯消元法求矩阵行列式的算法,并仔细分析其时间复杂度。

4.           解决同一问题有两个算法,一个算法的时间开销约为,另一个约为。问题规模为多大的情况下后一算法更快?

5.           假设现在需要对全世界的人口做一些统计工作,希望在1天之内完成工作。如果采用的算法具有线性复杂度,多快的计算机就足以满足工作需求?如果所用算法具有平方复杂度呢?用天河二号超级计算机大约能处理怎样复杂度的算法?

6.           如果在宇宙大爆炸的那一刻启动了一台每秒十亿次的计算机执行斐波那契数列数列的递归算法(见正文),假设每条指令计算一次加法。到今天为止它可以算出第几个斐波那契数?这个数的数值应该是多少?

7.           假设你从3岁开始手工操作计算器,每秒可以完成3次加法或乘法。执行求斐波那契数的递归算法,到今天为止你可能算到那个斐波那契数?假设执行正文中给出求矩阵乘积的算法,到今天为止能做出两个多大的矩阵的乘积?

8.           根据本章的讨论和自己的认识,设法对数据结构和算法的关系做一个综述和总结,并给出自己的认识,讨论其中的问题。

编程练习

1.           回忆(查阅)基础数学中求平方根的方法。请定义一个Python函数,其中采用基础数学中的方法求平方根。从各方面比较这个函数和基于牛顿迭代法的函数。

2.           基于正文1.3.4节中构造整数表的几个函数做一些试验,对一组参数值统计它们的执行时间。修改这些函数,重复试验,对Python中构造表的各种方法做一个总结。

3.           Python字典表示冲突图结构,以关键码  关联的值为True表示冲突,没有值表示不冲突。用这种技术完成另一个求无冲突分组的程序。

4.           基于第3题的类似设计开放一个程序,使之能枚举出一个冲突图上的各种分组组合,从中找出最佳的无冲突分组。