算法时间复杂度
2015-11-16 20:20
239 查看
算法时间复杂度定义:(引用《大话数据》)
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f(n))。他表示随时间规模n的增大,算法执行时间的增长率和f(n) 的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模哦n的某个函数。
定义的文字很难理解,让我们用一个简单的例子说明一下:
1 + 2 + 3 + 4 +.........+ 100 用C编译:
#include <stdio.h>
void main()
{
int i, sum = 0; //执行一次
for (i = 1; i <= 100; i++) //执行了n+1次
{
sum += i; //执行n次
}
printf ("和为:%d\n",sum);//执行了1次
}
所以这道程序所执行的总次数为:1 + (n+1) + n + 1 = 2n + 3
2n + 3 == 2n + 1 (3为加法中的常数)
第二步:在修改后的运行次数函数中,只保留最高阶项。
2n + 1 == 2n
第三步:如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大0阶。
2n + 1 == n
因此最后我们得到上面那段代码的算法时间复杂度表示为:0(n)
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f(n))。他表示随时间规模n的增大,算法执行时间的增长率和f(n) 的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模哦n的某个函数。
定义的文字很难理解,让我们用一个简单的例子说明一下:
1 + 2 + 3 + 4 +.........+ 100 用C编译:
#include <stdio.h>
void main()
{
int i, sum = 0; //执行一次
for (i = 1; i <= 100; i++) //执行了n+1次
{
sum += i; //执行n次
}
printf ("和为:%d\n",sum);//执行了1次
}
所以这道程序所执行的总次数为:1 + (n+1) + n + 1 = 2n + 3
“大O阶”推导算法时间复杂度
第一步:用常数1取代运行时间中的所有加法常数。2n + 3 == 2n + 1 (3为加法中的常数)
第二步:在修改后的运行次数函数中,只保留最高阶项。
2n + 1 == 2n
第三步:如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大0阶。
2n + 1 == n
因此最后我们得到上面那段代码的算法时间复杂度表示为:0(n)
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法