算法分析精述分享

[color=blue][b]1. 算法分析的评价体系[/b][/color]
评价算法的三条主要标准是:

[b](1) 算法实现所消耗的时间[/b]
[b](2) 算法实现所消耗的存储空间,其中主要考虑辅助存储空间[/b]
[b](3) 算法应易于理解、易于编码、易于调试。[/b]

[color=blue][b]2. 算法的时间复杂性[/b][/color]
[color=red][b]2.1 和算法执行相关的因素[/b][/color]

[b](1) 问题中数据存储的数据结构[/b]
[b](2) 算法采用的数学模型[/b]
[b](3) 算法设计策略[/b]
[b](4) 问题的规模[/b]
[b](5) 实现算法的程序设计语言[/b]
[b] (6) 编译算法产生的机器代码的质量[/b]
[b](7) 计算机执行指令的速度[/b]

[b][color=red]2.2 算法时间效率的衡量方法[/color][/b]

[b](1) 事后分析法[/b]
先将算法用程序设计语言实现,然后度量程序的运行时间,这种方法成为事后分析法。你能想到它的缺点???

[b](2) 事前分析估算法[/b]
一个算法的运行工作量的大小,只依赖于问题的规模(通常用整数量n表示),或者说算法的时间效率是问题规模的函数。
假如随着问题规模n的增长,算法执行时间的增长率和函数f(n)的增长率相同,则可记作:T(n) = O(f(n)), T(n)简称时间复杂度,
O是数量级的符号。

[color=red][b]2.3 时间复杂度估算[/b][/color]

算法的执行时间 = $[原操作的执行次数 * 原操作的执行时间], 其中, $表示累加.

语句的频度指的是该语句重复执行的次数。

[b](1) 例子1[/b]
 for (j = 1; j <= n; j++)
for(k = 1; k <= n; k++)
x++;

分析: 算法段中语句"x++", "k<=n", "x++"的频度是n*n, 语句"j=1", "k=1"的频度是1, 语句"j<=n", "j++"的频度是n。
因此,算法运行的时间是3*n*n + 2*n + 2


[b](2) 例子2[/b]
for (j = 1; j <= n; j++)
for(k = 1; k <= n; k++)
for(i = 1; i <= n; i++)
s++;
该算法的时间复杂度为近似n*n*n.

[b](3) O[/b]
在算法的复杂度分析中经常使用一个记号O,读作大O,它是数量级Order的第一个字母。当一个算法的运行时间为n*n+n+1时,
由于n*n+n+1和n*n的数量级相等(该表达式当n足够大时约等于n*n),称它为这个算法的渐进时间复杂度,简称算法的时间复杂度,
记作:T(n) = O(n*n).


[b](4) 几种数量级[/b]

[b][color=brown][i] O(1) 常数级
O(logn) 对数级
O(n) 线性级
O(n的c次方) 多项式级
O(c的n次方) 指数级
O(n!) 阶乘级[/i][/color][/b]
[b](5) 问题时间复杂度的上界和下界[/b]
[b](6) 算法时间复杂度的最好情况和最坏情况[/b]

[color=red][b]2.4 算法的空间复杂性[/b][/color]

[b](1) 输入数据所占空间[/b]
[b](2) 程序本身所占空间[/b]
[b](3) 辅助存储空间[/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值