老杨《大话数据结构》第二章 算法

算法是解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,每条指令表示一个或者多个操作。

1. 算法的特性

  1. 输入
  2. 输出
  3. 有穷性
  4. 确定性
  5. 可行性

2. 算法设计的要求

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 时间效率高和储存量低

3. 算法效率的度量方法

  1. 事后统计方法
  2. 事前分析估计方法

通过书中所给1+2+...+99+100的例子,可以明显对比出几种不同算法具有不同的空间和时间开销。某个算法随着n增大,会越来越优于另一算法,或者越来越差于另一算法。这里就可以体现出,算法本身的复杂度是时刻变化的,那么如何量化衡量这种复杂度呢?算法时间复杂度的定义是,语句总的执行次数T(n)是关于问题规模n的函数,而分析T(n)的变化情况并确定T(n)的数量级。算法时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n)) 它表示随着问题规模的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,称为时间复杂度。一般都用大写的O来表示。推导大O阶的基本流程:

推导大O阶:

1. 用常数1取代运行时间中的所有加法常数

2. 在修改后的运行次数函数中,只保留最高阶项

3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶

复杂度名称大O记号

常数阶

O (1)
线性阶O (n)
对数阶O (logn)
平方阶O (n^2)
nlognO (nlogn)
立方阶O (n^3)
指数阶O (2^n)

常用算法复杂度顺序从小到大:

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(2^n) < O(n!) < O(n^n)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值