第四章 分治策略

Divide-Conquer-Combine

4.1 最大子数组问题

FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high) 
    /*
    接受数组A和下表low,mid,high为输入,
    返回一个下标元组划定跨越种点的最大子数组的边界,并返回最大子数组中值的和
    */
left-sum = -∞
sum = 0
for i = mid downto low
    sum = sum + A[i]
    if sum > left - sum
        left-sum = sum
        max-left = i
right-sum = -∞
sum = 0
for j = mid + 1 to high
    sum = sum + A[j]
    if sum > right-sum
        right-sum = sum
        max-right = j
return(max-left, max-right, left-sum + right-sum)

FIND-MAXIMUM-SUBARRAY(A,low,high) //求出A[1...n]的最大子数组
if high == low
    return (low,high,A[low])
else mid = (low + high)/2
    (left-low, left-high, left-sum) = 
    	FIND-MAXIMUM-SUBARRAY(A,low,mid)
    (right-low, right-high, right-sum) = 
    	FIND-MAXIMUM-SUBARRAY(A,mid+1,high)
    (cross-low, cross-high, cross-sum) = 
    	FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high)
    if left-sum >= cross-sum and right-sum >= cross-sum
        return(left-low, left-high, left-sum)
    else right-sum >= cross-sum and right-sum >= cross-sum
        return(right-low, right-high, right-sum)
    else return(cross-low, cross-high, cross-sum)

4.2 矩阵乘法的Strassen算法

常规算法花费Θ(n3),Strassen算法花费Θ(nlg7)≈Θ(n^2.81)

基本思想:减少多余的乘法,把乘法变成乘法+加法

4.3 代入法求解递归式

步骤

  1. 猜测解的形式
  2. 用数学归纳法求出解种的常数,并证明解是正确的

4.4 递归树方法求解递归式

将递归式转换成一棵树,其节点表示不同层次的递归调用产生的代价。然后采用边界和技巧来求解递归式。

4.5 主方法求解递归式

求解形式如 T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n)递归式的界

4.5 主方法求解递归式

求解形式如 T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n)递归式的界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值