时间复杂度(小总结)
来源:互联网 发布:samba客户端 windows 编辑:程序博客网 时间:2024/05/19 10:10
时间复杂度定义:
如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。
当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。
计算方法:
1. 找到执行次数最多的语句
2. 计算语句执行次数的数量级
3. 用大O来表示结果
O(1)
交换i和j的内容
temp=i;
i=j;
j=temp;
以上三条单个语句的频度为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。
O(n2)
sum=0; /* 执行次数1 */
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
sum++; /* 执行次数n2 */
解:T(n) = 1 + n2 = O(n2)
for (i=1;i<n;i++)
{
y=y+1; ①
for (j=0;j<=(2*n);j++)
x++; ②
}
解: 语句1的频度是n-1
语句2的频度是(n-1)*(2n+1) = 2n2-n-1
T(n) = 2n2-n-1+(n-1) = 2n2-2
f(n) = n2
lim(T(n)/f(n)) = 2 + 2*(1/n2) = 2
T(n) = O(n2).
例子:
O(n)
a=0;
b=1; ①
for (i=1;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
解: 语句1的频度:2,
语句2的频度:n,
语句3的频度:n,
语句4的频度:n,
语句5的频度:n,
T(n) = 2+4n
f(n) = n
lim(T(n)/f(n)) = 2*(1/n) + 4 = 4
T(n) = O(n).
O(log2n)
i=1; ①
while (i<=n)
i=i*2; ②
解: 语句1的频度是1,
设语句2的频度是t, 则:nt<=n; t<=log2n
考虑最坏情况,取最大值t=log2n,
T(n) = 1 + log2n
f(n) = log2n
lim(T(n)/f(n)) = 1/log2n + 1 = 1
T(n) = O(log2n)
O(n3)
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
for(k=0;k<j;k++)
x=x+2;
}
}
解:当i=m, j=k的时候,内层循环的次数为k当i=m时, j 可以取 0,1,...,m-1 , 所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n, 则循环共进行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/2次
T(n) = n(n+1)(n-1)/2 = (n3-n)/2
f(n) = n3
所以时间复杂度为O(n3)。
最后总是把最大的,成长最快的时间复杂度作为代表时间复杂度的最终结果。
例如 理论计算复杂度应该为O(n^3+n^2+n^1)最后结果为O(n^3).
- 时间复杂度(小总结)
- 时间复杂度总结
- 总结下时间复杂度
- 时间复杂度总结
- 时间复杂度的总结
- 排序总结-时间复杂度和空间复杂度
- 算法时间复杂度和空间复杂度总结
- 排序算法时间复杂度总结
- 收藏(时间复杂度)
- 设计时间复杂度小的算法
- 时间复杂度和空间复杂度——总结
- 算法的时间复杂度和空间复杂度-总结
- 【算法的时间复杂度和空间复杂度-总结】
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间复杂度和空间复杂度-总结
- 9.10学习记录
- C# 创建系统服务并定时执行
- vs2013环境cocos2d3.x 创建调试窗口
- 使用 NuGet 管理项目库
- #256 – 使用FixedDocument 在指定的地方显示内容(Use a FixedDocument to Display Content at Fixed Locations)
- 时间复杂度(小总结)
- 机器学习中L1正则化和L2正则化的区别
- grunt自动化构建工具
- 【记录】 Android 双卡手机获取IMEI等
- 关于mysql中一个分类排序的语句问题
- Android系统启动过程
- Jmeter
- 怎么理解TL 和自己的差距
- 开源日志库Logger的剖析