数据结构基础

递归的四条基本法则:

1. 基准情形:必须总有某些基本情形,无需递归就能解出

2. 不断推进:对于那些需要递归求解的情形,每一次递归调用都必须使求解状况向接近基准情形方向推进

3. 设计法则:假设所有的递归调用都能运行

4. 合成效益法则:在求解一个问题的一个实例时,不能在不同的递归调用中做重复的工作


1. 如果存在正的常数c和n0使得当N>=n0时,T(N)<=cf(N),则记为T(N) = O(f(N))

2. 如果存在正的常数c和n0使得当N>=n0时,T(N)>=cg(N),则记为T(N) = Ω(g(N))

3. 当且仅当T(N) = O(h(N))且T(N) = Ω(g(N))时,T(N) = θ(h(N))

4. 如果T(N) = O(p(N))且T(N) ≠ θ(p(N)),则T(N) = o(p(N))

其中,(1)是说T(N)的增长率小于等于f(N)的增长率;(2)说明T(N)的增长率大于等于g(N)的增长率;(3)说明T(N)的增长率等于h(N)的增长率;(4)说明T(N)的增长率小于p(N)的增长率,它不同于O因为没有等于

当我们说T(N) = O(f(N))时,我们保证函数T(N)是在不快于f(N)的速度增长,因此f(N)是T(N)的一个上界;同时,T(N) = Ω(g(N))意味着g(N)是T(N)的一个下界


1. 如果T1(N) = O(f(N))且T2(N) = O(g(N)),则

a. T1(N) + T2(N) = max( O(f(N)), O(g(N)) )

b. T1(N) * T2(N) = O( f(N)*g(N) )

2. 如果T(N)是一个k次多项式,则T(N) = θ(N^k)。将常数或低阶项放进O是非常坏的习惯

3. 对任意常数k,(log N)^k = O(N)。这说明对数增长的非常缓慢


除分治算法外,可将对数最常出现的规律概括为以下法则:如果一个算法用时间常数(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(log N)。另一方面,如果使用常数时间只是把问题减少一个常数(如减少1),那么这种算法就是O(N)的


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值