目录
前言
本文介绍数据结构的入门——时间复杂度。将会对时间复杂度进行剖析,通过例题讲解时间复杂度的应用范围和注意事项。
一、时间复杂度
概念:算法的时间复杂度是一个函数:(是数学含义上的函数)数据里面带未知数的函数式。
含义:算法在机器中运行所消耗的时间。
实际意义:算法中基本操作的执行次数。
作用和理解:降低占用内存和减少运行时间,提高效率。
好的算法相当于拿着筷子吃饭,差的算法相当于拿着竹竿吃饭,又长又麻烦。
二、大O表示法
大O符号(Big O notation):用于描述函数渐进行为的数学符号(描述时间复杂度)
推导大O阶方法:
1,用常数1取代运行次数中的所有加法常数;
2,在修改后的运行次数函数中,只保留最高阶项;
3,如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶;
含义:(保留最高阶的未知数,不保留常系数)。
三,实例介绍
例1:O(N^2)
找到某条基本语句与问题规模N之间的数学表达式,就是算出了算法的时间复杂度。
例2:O(1)
例3:O(M +N)
(重点)例4:O(N)
const char* strchr(const char *str,int character);
whlie(*str)
{
if(*str==chaeacter)
return str;
else
++str;
}
return NULL;
例5:冒泡排序( O(N^2) )
例6:二分法查找(O(log2N))
例7:
(1)递归法(阶乘)O(N) | O(1)
(2)递归法(斐波那契数列)( O(2^N))
总结
1.本次讲了时间复杂度的基本认识。
通过对7例不同的时间复杂度的分析,我们可以得出以下结论:
(1)时间复杂度不局限与循环有关,核心是与算法思想有关。
(2)时间复杂度主要取其最坏循环次数。
(3)通过对时间复杂度的认识,能更好的对我们的程序进行优化。