算法导论:分治策略

在分治策略中,我们递归地求解一个问题,在每层递归中应用如下三个步骤:

       分解 -> 将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小

       解决 -> 递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解

       合并 -> 将子问题的解组合成原问题的解

三种求解递归式的方法,即得出算法的时间复杂度的方法:

代入法:猜测一个界,然后用数学归纳法证明这个界是正确的

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

主方法:可求解形如下面公式的递归式的界:

                                 T(n) = aT(n/b) + f(n) 其中a>=1,b>1,f(n)是一个给定的函数

它刻画了这样一个分治算法:生成a个子问题,每个子问题的规模是原问题规模的1/b,分解和合并步骤总共花费时间为f(n)

1. 最大子数组问题:   

FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high)

    left-sum = negative infinity
    sum=0
    for i=mid down to low
        sum = sum + A[i]
        if sum > left-sum
            left-sum=sum
            max-left=i

    right-sum = negative infinity
    sum=0
    for i= mid+1 up to high
        sum = sum + A[i]
        if sum > right-sum
            right-sum=sum
            max-right=i
    
    return(max-left,max-right,left-sum+right-sum)     
FIND-MAXIMUM-SUBARRAY(A,low,high)
    if high==low
        return(low,high,A[low])
    else mid=ceiling((low+high)/2)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值