C++ 数据结构(一)绪论(4)算法分析

来源:我的博客站 OceanicKang |《C++ 数据结构(一)绪论(4)算法分析》

上一篇:《C++ 数据结构(一)绪论(3)复杂度》

主要任务

算法分析的两个主要任务 = 正确性(不变性 * 单调性) + 复杂度

C++ 等高级语言的 基本指令,均等效于常数条 RAM 的 基本指令

在渐进意义下,二者大体相当于:

  • 分支转向:goto // 算法的灵魂;出于结构化考虑,被隐藏了
  • 迭代循环:for()、while()、… // 本质上就是 “if + goto"
  • 调用 + 递归(自我调用) // 本质上也是 goto

主要方法

复杂度分析的主要方法:

  • 迭代:级数求和
  • 递归:递归跟踪 + 递推方程
  • 猜测 + 验证

级数

算数级数

与末项平方同阶

T ( n ) = 1 + 2 + ⋯ + n = n ( n + 1 ) 2 = O ( n 2 ) T(n) = 1 + 2 + \cdots + n = \frac{n(n+1)}{2} = O(n^2) T(n)=1+2++n=2n(n+1)=O(n2)

幂方级数

比幂次高出 一阶

∑ k = 0 n k d ≈ ∫ 0 n x d + 1   d x = 1 d + 1 x d + 1 ∣ 0 n = 1 d + 1 n d + 1 = O ( n d + 1 ) \sum_{k=0}^{n} k^d \approx \int_{0}^{n} x^{d+1} \ dx = \frac{1}{d+1} x^{d+1} |_0^n = \frac{1}{d+1} n^{d+1} = O(n^{d+1}) k=0nkd0nxd+1 dx=d+11xd+10n=d+11nd+1=O(nd+1)

T 2 ( n ) = 1 2 + 2 2 + 3 2 + ⋯ + n 2 = n ( n + 1 ) ( 2 n + 1 ) 6 = O ( n 3 ) T_2 (n) = 1^2 + 2^2 + 3^2 + \cdots + n^2 = \frac{n(n+1)(2n+1)}{6} = O(n^3) T2(n)=12+22+32++n2=6n(n+1)(2n+1)=O(n3)

T 3 ( n ) = 1 3 + 2 3 + 3 3 + ⋯ + n 3 = n 2 ( n + 1 ) 2 4 = O ( n 4 ) T_3 (n) = 1^3 + 2^3 + 3^3 + \cdots + n^3 = \frac{n^2(n+1)^2}{4} = O(n^4) T3(n

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值