算法求解-数组求和

算法求解-数组求和

二分递归
算法:分而治之
sum(int A[], int lo,int hi)  //区间范围,入口形式为sum(A,0,n-1)

{
       if(lo==hi)  return A[lo];
       int mi=(lo+hi)/2;
       return sum(A,lo,mi)+sum(A,mi+1,hi);

}

T(n)=各层递归实列所需时间和
= O ( 1 ) ∗ ( 2 0 + 2 1 + 2 2 + 2 3 + ⋯ + 2 ( l o g 2 n ) ) =O(1)*(2^0+2^1+2^2+2^3+\cdots+2^(log_2n)) =O(1)(20+21+22+23++2(log2n))

= O ( 1 ) ∗ ( 2 ( l o g 2 n ) − 1 ) =O(1)*(2^(log_2n)-1) =O(1)(2(log2n)1)

= O ( n ) =O(n) =O(n)

递归基:sum(A,lo,lo)

递推方程
T ( n ) = 2 ∗ T ( n / 2 ) + O ( 1 ) T(n)=2*T(n/2)+O(1) T(n)=2T(n/2)+O(1)

T ( 1 ) = O ( 1 ) T(1)=O(1) T(1)=O(1)

线性递归
sum(int A[],int n)
{
 return (n<1)  ?  0  :  sum(A,n-1) +A[n-1];     
}

时间复杂度:

单个递归实列自身只需 O(1)
T ( n ) = O ( 1 ) ∗ ( n + 1 ) = O ( n ) T(n)=O(1)*(n+1) =O(n) T(n)=O(1)(n+1)=O(n)
递归基:sum(A,0)

递推方程
T ( n ) = T ( n − 1 ) + O ( 1 ) T(n)=T(n-1)+O(1) T(n)=T(n1)+O(1)

T ( 0 ) = O ( 1 ) T(0)=O(1) T(0)=O(1)

求解:
T ( n ) − n = T ( n − 1 ) − ( n − 1 ) = ⋯ T(n)-n=T(n-1)-(n-1)=\cdots T(n)n=T(n1)(n1)=

= T ( 2 ) − 2 =T(2)-2 =T(2)2

= T ( 1 ) − 1 =T(1)-1 =T(1)1

= T ( 0 ) =T(0) =T(0)

移项:
T ( n ) = O ( 1 ) + n = O ( n ) T(n)=O(1)+n=O(n) T(n)=O(1)+n=O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值