C3 Algorithm Analysis

第三章 算法分析

数据结构:组织和访问数据的一种系统化方式
算法:是在有限的时间里一步步执行某些任务的过程

3.1实验研究

*算法时间必须要有限,这样才有意义,算法时间的长短对于评价一个算法好坏也至关重要

from time import time
start_time = time()
run algorithm
end_time = time()
elapsed = end_time-start_time   #记录运行秒数
上面这个方法并不完美,他记录的是cpu的运行时间,由于计算机往往不可能只运行当前算法,所以还有一种更公正的方法就是度量算法使用的CPU周期的数量。

算法的运行时间一般认为依赖于输入的大小和结构,所以有时候我们可以将不同输入的算法运行性能可视化,这样可以帮助我们在对实验数据进行统计分析时,以寻找出核试验数据的最好的输入大小函数
*算法分析的三个局限性:
1.很难直接比加两个算法的试验时间
2.实验不包含在实验中的输入的运行时间
3.算法必须完全实现才有意义
*计算原子操作
原子操作包括给对象指定标识符;给这个标识符的关联变量确定出来;将其直接进行的算术运算;比较运算;索引访问;函数调用;返回函数。
我们考虑算法执行,就是看其包含了多少原子操作。

3.2本书的7种函数

3.2.1 常数函数

f ( n ) = c ( 直 接 赋 值 ) f(n)=c(直接赋值) fn=c

3.2.2 对数函数

x = l o g b n     o r   s a y      b x = n x=log_bn\ \ \ or\ say\ \ \ \ b^x=n x=logbn   or say    bx=n
一般在计算机科学中,我们令b=2,应为计算机储蓄整数用的是二进制,所以在计算机科学,我们把 l o g log log默认为 l o g 2 log_2 log2(不同于计算器上的log一般默认以十为底)
l o g b n log_bn logbn有时候用近似值来取代,那就是 ⌈ l o g b n ⌉ \lceil{log_bn}\rceil logbn(向上取整)。
(注: l o g b a = l o g d a / l o g d b     ,   b l o g d a = a l o g d b log_ba=log_da/log_db\ \ \ ,\ b^{log_da}=a^{log_db} logba=logda/logdb   , blogda=alogdb

3.2.3 线性函数

f ( n ) = n f(n)=n f(n)=n

3.2.4 nlog n函数

f ( n ) = n l o g n f(n)=nlogn f(n)=nlogn
(函数特点:增长速度快鱼线性函数,慢于二次函数)

3.2.5 二次函数

f ( n ) = n 2 f(n)=n^2 f(n)=n2
(嵌套循环中内外层循环操作次数)

3.2.6 三次函数和其他多项式

f ( n ) = n 3 f(n)=n^3 f(n)=n3
f ( n ) = a 0 + a 1 n + . . . + a d n d f(n)=a_0+a_1n+...+a_dn^d f(n)=a0+a1n+...+adnd

3.2.7 指数函数

f ( n ) = b n f(n)=b^n f(n)=bn

3.2.8 比较增长率

leanote

3.3渐近分析

3.3.1大○符号

若函数f(n)恒小于等于c*g(n),存在c为实型常量,那么我们就称f(n)为g(n)的大○.其中,大○符号意味着给定常数因子且在渐近意义上n趋于无穷时,函数 f ( n ) ≤ g ( n ) f(n)\leq g(n) f(n)g(n)
大Ω:与大○相反,表示的是一个函数的增长速率大于或等于零一个函数,即 f ( n ) ≥ c g ( n ) f(n)\geq cg(n) f(n)cg(n),则f(n)为g(n)的大Ω
大θ:增长速率相同,即 c ′ g ( n ) ≤ f ( n ) ≤ c ′ ′ ( n ) c'g(n)\leq f(n) \leq c''(n) cg(n)f(n)c(n)

3.3.2比较分析

我们通过算法运行时间来描述高效与不高效算法,

3.3.3算法分析示例

(看不下去了。。。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值