课后习题3.1

来源:互联网 发布:杰伦布朗体测数据 编辑:程序博客网 时间:2024/06/02 06:06

个人做的课后练习

书籍:算法设计与分析基础(第三版)

习题3.1

一.
a.最小生成树算法
b.背包问题

二.
a.
pow(a,n)的蛮力算法,T(n)=n
如果用n的二进制位数表示d表示,T(n)=pow(2,d)

b.
计算 pow(a,n) mod m 的时候,
可以在计算一次乘法的同时就进行一次模的运算。这样就可以保证不会越界。

三.
习题2.3 4.5.6的算法 都是属于满力算法。

四.
a.计算一次n阶多项式的效率。以乘法为关键步骤。
T(n)=(n+1)(n+2)/2
b.
改为线性的算法。
第一种,我们可以增加一个 数组,记录 x的1到n次方所有的结果。这样可以减少重复的计算。
第二种,化简多项式
p(x)=(((an*x+an-1)*x+an-2)*x….)x+a0
c.
还没有想到比线性效果还要好的算法。

五.
时间效率是 T(n)=n^2

六.
a.直线拼板 可以完全覆盖
b.方形拼板 可以完全覆盖
c.L形拼板 可以完全覆盖
d.T形拼板 可以完全覆盖
e.Z型拼板 不可以完全覆盖

七.
a.蛮力算法:逐个比较。T(n)=n-2
b.T(n)=log3(n)

九.
选择排序是稳定的

十.
用链表进行选择排序,可以获得相同的O(n^2)的效率

十二.
a.显然,如果比较一遍之后,发现已经没有元素交换位置。证明了后面的所有元素已经处于有序的状态了,所以,可以停止循环。
b.

BubbleSort(A[0...n-1]){    for i←0 to n-2 do        count0        for j←i to n-2 do            if( A[j] < A[j+1] )                temp←A[j]                A[j]←A[j+1]                A[j+1]←temp                count ++            end if        end for        if(count == 0)            break        end if    end for}

c.逆序的时候。

十三.
冒泡排序是稳定的。

十四.

Change(2n){    for i←1 to n do        for j←i*2 to i+1 do            temp = A[j]            A[j] = A[j-1]            A[j-1] = temp}
0 0