《算法导论》第三版第4章 分治策略 练习&思考题 个人答案

4.1 最大子数组问题

4.1-1

解:最大值。

4.1-2

解:

VIOLENTLY-FIND-MAXIMUM-SUBARRAY(A)
max_sum = -∞
left = 0
right = 0
for i = 1 to A.length
    sum = A[i]
    if sum > max_sum
        max_sum = sum
        left = i
        right = i
    for j = i + 1 to A.length
        sum = sum + A[j]
        if sum > max_sum
            max_sum = sum
            right = j
return (max_sum, legt, right)

4.1-3

解:依不同计算机而不同。。。交叉点不会改变。

4.1-4

思路:原算法末尾加判断max_sum是否为负,或者开始时判断数组是否全部为负。

4.1-5

解:

ITERATIVE-FIND-MAX-SUBARRAY(A)
max_sum = -∞
i = 1
left = 0
right = 0
while i <= A.length
    sum = 0
    for j = i downto 1
        sum = sum + A[j]
        if sum > max_sum
            max_sum = sum
            right = i
            left = j
    i = i + 1
return (max_sum, left, right)

4.2 矩阵乘法的Strassen算法

4.2-1

解:过程很长,最后结果是
18 14
62 66

4.2-2

解:

SQUARE-MATRIX-MULTIPLY-STRASSEN(A, B)
n = A.rows
let C be a new n*n matrix
if n == 1
    C[1][1] = A[1][1] * B[1][1]
else partition A, B and C as in equations (4.9)
    let S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, P1, P2, P3, P4, P5, P6, P7 be new (n/2)*(n/2) matrixes
    S1 = B12 - B22
    S2 = A11 + A12
    S3 = A21 + A22
    S4 = B21 - B11
    S5 = A11 + A22
    S6 = B11 + B22
    S7 = A12 - A22
    S8 = B21 + B22
    S9 = A11 - A21
    S10 = B11 + B12
    P1 = SQUARE-MATRIX-MULTIPLY-STRASSEN(A11, S1)
    P2 = SQUARE-MATRIX-MULTIPLY-STRASSEN(S2, B22)
    P3 = SQUARE-MATRIX-MULTIPLY-STRASSEN(S3, B11)
    P4 = SQUARE-MATRIX-MULTIPLY-STRASSEN(A22, S4)
    P5 = SQUARE-MATRIX-MULTIPLY-STRASSEN(S5, S6)
    P6 = SQUARE-MATRIX-MULTIPLY-STRASSEN(S7, S8)
    P7 = SQUARE-MATRIX-MULTIPLY-STRASSEN(S9, S10)
    C11 = P5 + P4 - P2 + P6
    C12 = P1 + P2
    C21 = P3 + P4
    C22 = P5 + P1 - P3 - P7
return C

4.2-3

思路:可将矩阵扩展为规模为2的幂的矩阵,并在空白处填0;因为与0相乘的结果仍是0,所以扩充元素的计算可以省略。

4.2-4

解:k<3lg7,T(n)=kT(n/3)+Θ(n)

4.2-5

解:
log68132464≈2.795128
log70143640≈2.795122
log72155424≈2.795147
最快的是70×70,且优于Strassen。

4.2-6

解:前者会产生一个kn×kn矩阵,需要k2次相乘;后者会产生n×n矩阵,需要k次相乘和k-1次相加。

4.2-7

解:

COMPLEX-MULTIPLICATION(a, b, c, d)
A = (a + b) * (c + d)
B = a * c
C = b * d
real = B - C
imaginary = A - B - C
return (real, imaginary)

4.3 用代入法求解递归式

4.3-1

证明:
T ( n ) ≤ c ( n − 1 ) 2 + n = c n 2 − 2 c n + c + n T ( n ) ≤ c ( n − 1 ) 2 + n = c n 2 − 2 c n + c + n T(n)≤c(n−1)^2+n=cn^2−2cn+c+nT(n)≤c(n−1)^2+n=cn^2−2cn+c+n T(n)c(n1)2+n=cn22cn+c+nT(n)c(n1)2+n=cn22cn+c+n
c = 1 c=1 c=1 ,有 n ≥ 1 n≥1 n1
n 2 − 2 n + 1 + n = n 2 − n + 1 ≤ n 2 n^2−2n+1+n=n^2−n+1≤n^2 n22n+1+n=n2n+1n2

4.3-2

证明:
T ( n ) ≤ c lg ⁡ ( ⌈ n / 2 ⌉ − 2 ) + 1 ≤ c lg ⁡ ( n / 2 + 1 − 2 ) + 1 ≤ c lg ⁡ ( ( n − 2 ) / 2 ) + 1 ≤ c lg ⁡ ( n − 2 ) − c lg ⁡ 2 + 1 ≤ c lg ⁡ ( n − 2 ) ≤ c lg ⁡ n T(n) \le c\lg(\lceil n/2 \rceil - 2) + 1 \le c\lg(n/2 + 1 - 2) + 1 \le c\lg((n - 2)/2) + 1 \le c\lg(n - 2) - c\lg2 + 1 \le c\lg(n - 2) \le c\lg n T(n)clg(n/22)+1clg(n/2+12)+1clg((n2)/2)+1clg(n2)clg2+1clg(n2)clgn

4.3-3

证明:
T ( n ) ≥ 2 c ( ⌊ n / 2 ⌋ + 2 ) ( lg ⁡ ( ⌊ n / 2 ⌋ + 2 ) + n ≥ 2 c ( n / 2 − 1 + 2 ) ( lg ⁡ ( n / 2 − 1 + 2 ) + n ≥ 2 c n + 2 2 lg ⁡ n + 2 2 + n ≥ c ( n + 2 ) lg ⁡ ( n + 2 ) − c ( n + 2 ) lg ⁡ 2 + n ≥ c ( n + 2 ) lg ⁡ ( n + 2 ) + ( 1 − c ) n − 2 c for  n ≥ 2 c / ( 1 − c ) , 0 &lt; c &lt; 1 ≥ c ( n + 2 ) lg ⁡ ( n + 2 ) ≥ c n lg ⁡ n \begin{aligned} T(n) &amp; \ge 2c(\lfloor n/2 \rfloor + 2)(\lg(\lfloor n/2 \rfloor + 2) + n \\ &amp; \ge 2c(n/2 - 1 + 2)(\lg(n/2 - 1 + 2) + n \\ &amp; \ge 2c\frac{n+2}{2}\lg\frac{n+2}{2} + n \\ &amp; \ge c(n+2)\lg(n+2) - c(n+2)\lg2 + n \\ &amp; \ge c(n+2)\lg(n+2) + (1 - c)n - 2c \qquad \text{for } n \ge 2c/(1-c), 0 &lt; c &lt; 1 \\ &amp; \ge c(n+2)\lg(n+2) \\ &amp; \ge cn\lg n \end{aligned} T(n)2c(n/2+2)(lg(n/2+2)+n2c(n/21+2)(lg(n/21+2)+n2c2n+2lg2n+2+nc(n+2)lg(n+2)c(n+2)lg2+nc(n+2)lg(n+2)+(1c)n2cfor n2c/(1c),0<c<1c(n+2)lg(n+2)cnlgn

4.3-4

证明:
T ( n ) ≤ 2 ( c ⌊ n / 2 ⌋ lg ⁡ ⌊ n / 2 ⌋ + ⌊ n / 2 ⌋ ) + n ≤ 2 c ( n / 2 ) lg ⁡ ( n / 2 ) + 2 ( n / 2 ) + n ≤ c n lg ⁡ ( n / 2 ) + 2 n ≤ c n lg ⁡ ( n / 2 ) + 2 n ≤ c n lg ⁡ n − c n lg ⁡ 2 + 2 n ≤ c n lg ⁡ n + ( 2 − c ) n ( c ≥ 1 ) ≤ c n lg ⁡ n + n \begin{aligned} T(n) &amp; \le 2(c\lfloor n/2 \rfloor\lg{\lfloor n/2 \rfloor} + \lfloor n/2 \rfloor) + n \\ &amp; \le 2c(n/2)\lg(n/2) + 2(n/2) + n \\ &amp; \le cn\lg(n/2) + 2n \\ &amp; \le cn\lg(n/2) + 2n \\ &amp; \le cn\lg{n} - cn\lg{2} + 2n \\ &amp; \le cn\lg{n} + (2 - c)n \qquad (c \ge 1)\\ &amp; \le cn\lg{n} + n \end{aligned} T(n)2(cn/2lgn/2+n/2)+n2c(n/2)lg(n/2)+2(n/2)+ncnlg(n/2)+2ncnlg(n/2)+2ncnlgncnlg2+2ncnlgn+(2c)n(c1)cnlgn+n
T ( 1 ) = 1 ≤ c n lg ⁡ n + n = 0 + 1 = 1 T(1) = 1 \le cn\lg{n} + n = 0 + 1 = 1 T(1)=1cnlgn+n=0+1=1

4.3-5

证明:
T ( n ) ≤ c ( ⌊ n / 2 ⌋ − 2 ) lg ⁡ ( ⌊ n / 2 ⌋ − 2 ) + c ( ⌈ n / 2 ⌉ − 2 ) lg ⁡ ( ⌈ n / 2 ⌉ − 2 ) + d n ≤ c ( n / 2 − 2 ) lg ⁡ ( n / 2 − 2 ) + c ( n / 2 + 1 − 2 ) lg ⁡ ( n / 2 + 1 − 2 ) + d n ≤ c ( n / 2 − 1 ) lg ⁡ ( n / 2 − 1 ) + c ( n / 2 − 1 ) lg ⁡ ( n / 2 − 1 ) + d n ≤ c n − 2 2 lg ⁡ n − 2 2 + c n − 2 2 lg ⁡ n − 2 2 + d n ≤ c ( n − 2 ) lg ⁡ n − 2 2 + d n ≤ c ( n − 2 ) lg ⁡ ( n − 2 ) − c ( n − 2 ) + d n ≤ c ( n − 2 ) lg ⁡ ( n − 2 ) + ( d − c ) n + 2 c ( c &gt; d , n &gt; 2 c ) ≤ c ( n − 2 ) lg ⁡ ( n − 2 ) ≤ c n lg ⁡ n \begin{aligned} T(n) &amp; \le c(\lfloor n/2 \rfloor - 2)\lg(\lfloor n/2 \rfloor - 2) + c(\lceil n/2 \rceil -2 )\lg(\lceil n/2 \rceil - 2) + dn \\ &amp; \le c(n/2 - 2)\lg(n/2 - 2) + c(n/2 + 1 -2 )\lg(n/2 + 1 - 2) + dn \\ &amp; \le c(n/2 - 1)\lg(n/2 - 1) + c(n/2 - 1 )\lg(n/2 - 1) + dn \\ &amp; \le c\frac{n-2}{2}\lg\frac{n-2}{2} + c\frac{n-2}{2}\lg\frac{n-2}{2} + dn \\ &amp; \le c(n-2)\lg\frac{n-2}{2} + dn \\ &amp; \le c(n-2)\lg(n-2) - c(n-2) + dn \\ &amp; \le c(n-2)\lg(n-2) + (d - c)n + 2c \qquad (c &gt; d, n &gt; 2c)\\ &amp; \le c(n-2)\lg(n-2) \\ &amp; \le cn\lg n \end{aligned} T(n)c(n/22)lg(n/22)+c(n/22)lg(n/22)+dnc(n/22)lg(n/22)+c(n/2+12)lg(n/2+12)+dnc(n/21)lg(n/21)+c(n/21)lg(n/21)+dn

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值