第二章 1.2算法

文章详细阐述了算法的五个基本特性,包括有穷性、确定性、可行性、输入和输出,并探讨了好算法应具备的正确性、可读性和健壮性。同时,介绍了时间复杂度和空间复杂度的概念,包括如何通过加法规则和乘法规则估算算法的效率,并提供了比较不同复杂度的口诀。此外,提到了空间复杂度与递归调用的深度之间的关系。
摘要由CSDN通过智能技术生成

笔记:王道考研数据结构

什么是算法

程序 = 数据结构 + 算法

五个特性

  1. 有穷性: 一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

注:算法必须是有穷的,而程序可以是无穷的

  1. 确定性: 算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

  1. 可行性: 算法中描述的操作都可以通过己经实现的基本运算执行有限次来实现

输人: 一个算法有念个不或多个输人,这些输入取自于某个特足的对象的集合。

输出: 一个算法有二个或多个输出,这些输出是与输入有着某种特定关系的量。

好算法的特质

  1. 正确性: 就是要对

  1. 可读性:能让别人看懂

  1. 健壮性: 输入非法的数据时,能够做出错误反应

  1. 高效率低存储量需求

  1. 高效率: 执行速度快,时间复杂度

  1. 低内存: 不费内存,空间复杂度

时间复杂度

  • 存在什么问题?

  1. 和机器性能有关,如:超级计算机V.s.单片机

  1. 和编程语言有关,越高级的语言执行效率越低

  1. 和编译程序产生的机器指令质量有关。

事前预估算法时间开销T(n)与问题规模n的关系(T表示“time”)

EG:

可以只考虑阶数高的部分,简化成o(n)

a)加法规则(多项相加,只保留最高阶的项,且系数变为1)

T(n)=Ti(n)+T2(n)=O(f(n))+o(g(n))=O(max(f(n),g(n)))

b)乘法规则(多项相乘,都保留)

T(n)=T(n)×T2(n)=Ofn)×O(gn)=Ofn)Xgn)

Eg:

T3(n) = n^3 + n^2 log2n

= O(n^3) + O(n^2 logzn)

比较: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2)<O(n!)<O(n")

口诀:常对幂指阶

  • 结论1:顺序执行的代码只会影响常数项,可以忽略

  • 结论2:只需挑循环中的一个基本操作分析它的执行次数与n的关系即可

  • 结论3:如果有多层嵌套循环,只需关注最深层循环循环了几次

空间复杂度

int a;    //S(n) = O(1)
int a[n];    //S(n) = O(n)
int a[n][n];    //S(n) = O(n^2)
  • 加法规则

T(n) = Ti(n) + T2(n) = o(f(n)) + o(g(n)) = O(max(f(n), g(n)))

  • 乘法规则

O(f(n)×O(g(n)=O(f(n)×g(n)

  • 比较

O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < 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、付费专栏及课程。

余额充值