计算机算法分析-第四章

  • 格式:pdf
  • 大小:184.99 KB
  • 文档页数:26

最好, 平均, Θ(1), Θ(log n), 最好, Θ(log n),
最坏 Θ(log n) 最坏 Θ(log n)

失败:

平均, Θ(log n),
P99-6
对于含n个节点的二元树,证明
E(n) = I(n) + 2n 其中,E(n)、I(n)分别为外部和内部 路径的长度
归纳法进行证明: n = 1时,结论显然成立 假设n = k时结论成立 当n = k + 1时,将深度为d的叶子内节点替换 为外节点后能得到含k个内节点的比较树
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)+21 f(2k-1)+ f(2k) # =2kT(1)+2k-1f(2)+2k-2f(22)+…+20f(2k)
=2kg(n)+ 2k-1f(2)+2k-2f(22)+…+20f(2k)
计算机算法分析—习题课
2014年4月 第四章:2 、3、 5、 6、10、11、23
P99-2
在下列情况下求解 4.1 节的递归关系式
n足够小 ⎧ g ( n) T(n)= ⎨ 否则 ⎩2T (n / 2) + f (n)
当①g(n)=O(1)和 f(n)=O(n); ②g(n)=O(1)和 f(n)=O(1)。
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+…+20d = c2k+d(2k - 1) = (c+d)n - d = O(n)
P99-3

根据4.2节开始所给出的二分检索策略,写一 个二分检索的递归过程。
两个序列交错大小 需要比较n-1次 一个序列完全大于/小于另一个序列 比较n/2次

最好情况


差异都是线性的,不改变复杂性的阶

最好情况也是Θ(nlogn), 平均复杂度Θ(nlogn)
P99-11

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

见《数据结构》--- 合并排序
P=(A11+A22)(B11+B22) Q=(A21+A22)B11 R=A11(B12-B22) S=A22(B21-B11)
T=(A11+A12)B22 U=(A21-A11)(B11+B12) V=(A12-A22)(B21+B22)
C22=P+R-Q+U =(A11+A22)(B11+B22)+A11(B12+B22)-(A21+A22)B11 +(A21A11)(B11+B12) = A11B11+A22B11+A11B22+A22B22+ A11B12-A11B22A21B11-A22B11 +A21B11 +A21B12-A11B11-A11B12 =A22B22+A21B12
procedure MPass(R, n, len, X) integer n, len, i; i←1; while i ≤ n – 2 * len + 1 do Merge(R, i, i+len – 1, i+2*len–1, X); i←i+2*len; repeat if i+len–1 < n then Merge(R, i, i+len–1, n, X) else for j = i to n do X(j) ← R(j) end MPass
P=(A11+A22)(B11+B22) Q=(A21+A22)B11 R=A11(B12-B22) S=A22(B21-B11)
T=(A11+A12)B22 U=(A21-A11)(B11+B12) V=(A12-A22)(B21+B22)
C12=R+T = A11B12-A11B22 +A11B22+A12B22 = A11B12 +A12B22 C21=Q+S = A21B11+A22B11 +A22B21-A22B11 = A21B11 +A22B21
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 +A12B21
P99-10
过程MERGESORT的最坏情况时 间是O(nlogn),它的最好情况时间 是什么?能说归并分类的时间是 Θ(nlogn)吗?

最好情况:

对有序文件进行排序 归并的次数不会发生变化----log(n)次 归并中比较的次数会发生变化(两个长n/2序列归 并)


分析

最坏情况

P99-5
作一个“三分”检索算法,它首先检
查n/3处的元素是否等于某个x的 值,然后检查2n/3处的元素。这 样,或者找到x,或者把集合缩小 到原来的1/3。分析此算法在各种 情况下的计算复杂度。
procedure ThriSearch(A, x, n, j) integer low, high, p1, p2 low←1; high←n while low≤high do p1← ⎣(2low+high+1)/3 ⎦ p2← ⎣ (low+2high+2)/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-1
I(n) = I(k) + d E(n) = E(k) – d + 2d + 2 = I(k) + 2k + d + 2 = I(n) + 2k + 2 = I(n) + 2n
另一种证明思路: 假设左右子树分别含n1、n2个节点,显然 n1 + n2 = n − 1 E(n1) = I(n1) + 2n1、E(n2) = I(n2) + 2n2 E(n) = E(n1) + E(n2) + n +1 = I(n1) + 2n1+ I(n2) + 2n2 + n +1 = [ I(n1) + I(n2) + n1 + n2] + [n1 + n2 + 1 + n] = I(n) + 2n
P99-23
通过手算证明(4.9)和(4.10)式确
实能得到C11,C12,C21和C22的正确值。
P=(A11+A22)(B11+B22) Q=(A21+A22)B11 R=A11(B12-B22) S=A22(B21-B11)
T=(A11+A12)B22 U=(A21-A11)(B11+B12) V=(A12-A22)(B21+B22)
Procedure BINSRCH1(A, low, high, x, j) integer mid, low, high, j; if low≤high then mid← ⎣(low+high)/2 ⎦; case :x=A(mid): j←mid; :x < A(mid): BINSRCH1(A, low, mid-1, x, j); :else: BINSRCH1(A, mid+1, high, x, j); endcase else j←0; endif end BINSRCH1
P99-2
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(nlogn)
P99-2
Procedure MSort(R, n) // 直接两路合并排序 算法,X是辅助文件,其记录结构与R相同 integer len, n; len ← 1; while len < n do MPass(R, n, len, X); len ← 2 * len; MPass(X, n, len, R); len ←2 * len; repeat end MSort
endcase repeat j←0 end ThriSearch
实例运行 在数组 { -15, -6, 0, 7, 9, 23, 54, 82, 101 }中找 9和53
1
2
3 0
4 7
5 9
6 23
7 54
8 82
9 101
-15 -6
查9和53
时间复杂度



算法每一步的时间为常数,复杂度取决于循环 次数,也即路径长度或路径长度加1 E(n) = I(n)+ ⎡3n/2⎤ 成功: