如何计算时间复杂度
来源:互联网 发布:3d打印 软件 编辑:程序博客网 时间:2024/06/05 07:29
定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。
当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。
我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。
此外,一个问题本身也有它的复杂性,如果某个算法的复杂性到达了这个问题复杂性的下界,那就称这样的算法是最佳算法。
“大O记法”:在这种描述中使用的基本参数是 n,即问题实例的规模,把复杂性或运行时间表达为n的函数。这里的“O”表示量级 (order),比如说“二分检索是 O(logn)的”,也就是说它需要“通过logn量级的步骤去检索一个规模为n的数组”记法 O ( f(n) )表示当 n增大时,运行时间至多将以正比于 f(n)的速度增长。
这种渐进估计对算法的理论分析和大致比较是非常有价值的,但在实践中细节也可能造成差异。例如,一个低附加代价的O(n2)算法在n较小的情况下可能比一个高附加代价的 O(nlogn)算法运行得更快。当然,随着n足够大以后,具有较慢上升函数的算法必然工作得更快。
O(1)
Temp=i;i=j;j=temp;
O(n^2)
2.1. 交换i和j的内容
2.2.
2.4.
2.5.
二分查找以及快速排序查找的时间复杂度
因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:
一次二分剩下:n/2
两次二分剩下:n/2/2 = n/4
。。。
m次二分剩下:n/(2^m)
在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为
n/(2^m)=1;
2^m=n;所以时间复杂度为:log2 (n)
快速排序的基本思想是:每次从无序的序列中找出一个数作为中间点(可以把第一个数作为中间点),然后把小于中间点的数放在中间点的左边,把大于中间点的数放在中间点的右边;对以上过程重复log(n)次得到有序的序列。
快速排序的时间复杂性分析:排序的大体如下图所示,假设有1到8代表要排序的数,快速排序会递归log(8)=3次,每次对n个数进行一次处理,所以他的时间复杂度为n*log(n)。所以排序问题的时间复杂度可以认为是对排序数据的总的操作次数。
1.AVL树
通过确保所有节点的左右子树的差小于等于 1,AVL 树保证了插入、删除和查找操作将始终保持 O(log 2 N)(2为底数)的渐进运行时间,而与插入或删除节点的顺序无关。
2.红黑树
下面是一些常用的记法:
访问数组中的元素是常数时间操作,或说O(1)操作。一个算法如 果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间。用strcmp比较两个具有n个字符的串需要O(n)时间。常规的矩阵乘算法是O(n^3),因为算出每个元素都需要将n对 元素相乘并加到一起,所有元素的个数是n^2。
指数时间算法通常来源于需要求出所有可能结果。例如,n个元 素的集合共有2n个子集,所以要求出所有子集的算法将是O(2n)的。指数算法一般说来是太复杂了,除非n的值非常小,因为,在 这个问题中增加一个元素就导致运行时间加倍。不幸的是,确实有许多问题 (如著名的“巡回售货员问题” ),到目前为止找到的算法都是指数的。如果我们真的遇到这种情况,通常应该用寻找近似最佳结果的算法替代之。
参考:http://blog.csdn.net/firefly_2002/article/details/8008987
参考:http://www.tuicool.com/articles/MVVnEzu
参考:http://blog.csdn.net/zhikangfu/article/details/51259118
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 时间复杂度如何计算
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度?
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 如何计算时间复杂度
- 复习 数据结构 照着慕课来吧第一篇 最大子列和
- android 面试浅想
- java面试整理
- 又见拦截导弹
- linuxIPC之消息队列
- 如何计算时间复杂度
- 输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。
- Android App退出检测
- 电脑开机出现警报音后提示要按F1才能进入的分析处理
- @component
- Android OpenGL 学习(一)
- 字符串多模式匹配:AC算法
- 将内存当作ceph日志盘使用(试验)
- 关于ubuntu中终端的计算机名称修改