算法导论阅读笔记——渐进表示法(1)

算法导论阅读笔记——渐进表示法(1)

1渐进表示法的作用:
在表示算法的复杂度时一般使用的是与输入规模n有关的函数来表示算法的空间或者时间复杂度(以下以时间复杂度为例)
时间的复杂度的很脸标准就是对n的输入 程序运行所需的时间,当然这个时间是一个变化的时间,就算是同样规模的数据 ,其所用的时间也可能不同。举例说明的话 比如对于搜索一个输入数据时,假设搜索一项用时为1 ,当搜索的结果项,刚好在输入的数据的开头时,很明显 这时输入的用时是一个常数的时间 为1,当结果在末尾时 所需的时间便是n。
当要显性 简便地表示出或者比较一个算法的复杂度时,我们更倾向于使用一种更为优雅的方式,而不是将一个算法复杂度表示为5 n3+n+5这种比较冗余的式子(这样并不优雅)
当输入比较大时 多项式中低阶的项对于算法的复杂度影响不大 比如在n>100时 上式中的三阶项可能是二阶和一阶项的上万倍 所以这个时候 我们省略了低阶项 。
同样 我们比较两个算法的复杂度时 ,我们更多的是比较算法的增长速度 比如n3与n2时 我们会忽略掉前边的系数 因为在n很大时 系数的影响不会太大 更为重要的是其阶数 (对于一些比较简单的 比如幂函数 只要比较幂即可 但是对于其他函数 可以使用 两个函数之比 趋于正无穷来判断 什么?不会? 自己去翻翻高数课本) 所以 我们可以优雅地表示一个算法的复杂度了
2.大O表示法:
当我们评估一个算法复杂度时 像1中所说的 我们会根据输入情况不同 得到不同的复杂度。当我们遇到最坏情况时 我们用大O来表示。比如一个算法复杂度最坏的情况下为5 n3+n+5时 我们可以知道这个算法的复杂度为O(n3)
而更为精确的数学含义表示为
对于正的常数c(任取一个)存在n0 有f(n)<=cg(n) 在n>n0时成立
则可以表示为f(n)属于O(g(n)) 所以 我们会发现 原来O表示的这玩意是满足上述判别式的f(n)的集合 但是 我们更喜欢表示为f(n)=O(g(n)) 这个等号便不是一般的等号 (至少不可以反转 )表示属于的含义
当O(g(n))出现在计算式中时 我们会把O(g(n))看作是O(g(n))这个集合的一个元素(注意 这两个大O表示不同哦)
我们值测量一个程序的复杂度时 更为关注的是在最坏情况下的复杂度 所以大O表示法更为广泛
3.大Ω表示法
与O类似 表示最好情况 自行推算
今日先写这么多 下次继续写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值