赞
踩
void test01()
{
int begin = clock();
int x = 0;
for (int i = 0; i < 100000000; i++)
{
++x;
}
int end = clock();
int time = end - begin;
printf("x = %d\n", x);
printf("time = %d ms\n",time);
}
// 请计算一下Func1中++count语句总共执行了多少次? void Func1(int N) { int count = 0; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { ++count; } } for (int k = 0; k < 2 * N; ++k) { ++count; } int M = 10; while (M--) { ++count; } printf("%d\n", count); }
我们将它转化为一个数学表达式
F(N) = N² + 2 × N + 10
在计算时间复杂度时我们将数学表达式中的影响最大的部分摘下来,并将复杂度写作O( N² )
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
另外有些算法的时间复杂度存在最好、平均和最坏情况:
最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数(下界)
例如:在一个长度为N数组中搜索一个数据x
最好情况:1次找到
最坏情况:N次找到
平均情况:N/2次找到
在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)。
示例 | 复杂度 | 名称 |
---|---|---|
5201314 | O( 1 ) | 常数阶 |
3n + 4 | O( n ) | 线性阶 |
3n^2 + 4n + 5 | O( n² ) | 平方阶 |
3 log( 2 ) n + 4 | O( log n ) | 对数阶 |
3n*log( 2 ) n + 4 | O( n*log n ) | nlogn阶 |
n^3 + n^2 + 4 | O( n^3 ) | 立方阶 |
2^n | O( 2^n ) | 指数阶 |
十分感谢您观看我的原创文章。
本文主要用于个人学习和知识分享,学习路漫漫,如有错误,感谢指正。
如需引用,注明地址。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。