分治算法

1、分治算法设计

Divide:整个问题划分为多个自问题

Conquer:求解各个子问题(递归调用算法)

Combine:合并自问题的解、形成原始问题的解

2、分析递归方程

建立递归方程;求解

3、递归方程建立方法

设输入大小为n,T(n)为时间复杂性

当n<c,T(n) = O(1)

4、时间复杂性分析

Divide阶段的时间复杂度:

      划分问题为a个子问题

      每个子问题大小为n/b

      划分时间可以直接得到=D(n)

Conquer阶段的时间复杂度:

      递归调用

      Conquer时间=aT(n/b)

Combine阶段的时间复杂度:

      时间可以直接得到=C(n)

最后得到递归方程

      T(n) = O(1)                            n ≤ c

      T(n) = aT(n/b)+D(n)+C(n)      n > c

5、举例:快速排序

Divide:

      将数组A[p..r]分为A[p..q]和A[q+1..r]

      对于任意x∈[p..q],x ≤ A[q],任意y∈A[q+1..r],y>A[q]

Conquer:

      对A[p..q]和A[q+1..r]分别使用快排

Conbine:

      A[p..q]和A[q+1..r]均为有序,结束

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值