【算法课】递归与分治法

概述

算法

若干指令组成的有穷序列。

  1. 输入:零或多个外部输入
  2. 输出:至少一个输出
  3. 确定性:每条指令无歧义
  4. 有限性:每条指令执行次数有限,总运行时间有限

复杂性

分时间和空间复杂性。

计算时间复杂度的时候,通过计算其核心语句的执行次数,导出其关于问题规模N的复杂度计量T(N)。

而当N→∞,T(N)→∞。此时通过求T(N)的渐进式来简化复杂度计量。引入渐进意义下记号:O、Ω、θ和o。

O(上界)

设f(N)和g(N)为正数集上的正函数。存在正的常数C和自然数N0,使N>=N0时,总有f(N)<=g(N),则称g(N)是f(N)在N充分大时的一个上界,记为f(N)=O(g(N))

其余渐进符号类推。


递归与分治法

递归

直接或间接调用自身的算法。

分治法

将规模为n的问题分为k个规模较小的子问题。子问题和原问题相同且相互独立。递归地解决子问题并将子问题的解合并为原问题的解。

一般而言,将问题分为大小相近的子问题是最有效率的。通常将问题一分为二。

从设计模式可以看出,分治法一般用递归实现。所以分治法的效率可以通过递归表达式进行分析。则有:

T(n) = \left\{\begin{matrix} O(1) & n = 1\\ kT(n/m)+f(n) &n > 1 \end{matrix}\right.

其中问题规模最小为1,其时解所耗费的时间为常数单位。规模大于1时,将问题分解为k个规模为n/m的子问题。将这k个子问题的解合并耗费的时间为f(n)。则展开上式可得:

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值