时间复杂度
就是针对输入规模的每个取值,计算该算法执行了多少次基本运算的执行次数。
常用的时间复杂度所耗费的时间从小到大依次是:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
常用算法的时间复杂度
数学小常识-对数 logn
如果 ,即a的x次方等于N(a>0,且a≠1),那么数x叫做以a为底N的对数(logarithm),记作 。其中,a叫做对数的底数,N叫做真数,x叫做“以a为底N的对数”。
特别地,我们称以10为底的对数叫做常用对数(common logarithm),并记为lg。
称以无理数e(e=2.71828...)为底的对数称为自然对数(natural logarithm),并记为ln。
零没有对数。
在实数范围内,负数无对数。[2] 在复数范围内,负数是有对数的。
举例:
O(log2n) 时间复杂度的由来
int i=1; ①
while (i<=n)
i=i*2; ②
解:
语句1的频度是1,
设语句2的频度是f(n), 则:2^f(n)<=n;f(n)<=log2n
取最大值f(n)= log2n ,T(n)=O(log2n )
*评:
注意查看条件while(i < n),可知实际执行的次数。
【补充-20170205】
丁酉年初九
程序员经常接触到的五大算法
冒泡排序|二分查找|快速排序|Dijkstra(迪杰斯特拉)算法|贪婪算法|动态规划|回朔算法(八皇后走迷宫)
统治现实世界的几大算法
①归并排序|快速排序|堆排序
②傅立叶变换与快速傅立叶变换
互联网、你的WIFI、智能手机、电话、计算机、路由器、卫星,几乎所有内置计算机的东西都会以各种方式使用这些算法实现各自的功能。如果你没有学习这些重要的算法,你将无法获得电子、计算机或通信方面的学位。
③Dijkstra 算法
毫无不夸张地说,如果没有这个算法,当今互联网将无法有效工作。这是一种图搜索算法,它被广泛应用在能够建模为图的问题中,用以找出两个节点之间的最短路径。
目前,即便我们已经拥有了解决最短路径问题的更好方法,Dijkstra 算法依然在那些重视稳定性的系统中得到应用。
【链接】
http://blog.csdn.net/kakaxi_77/article/details/46401223
真正统治世界的十大算法
http://blog.csdn.net/kakaxi_77/article/details/52289019
现实世界广泛应用的十三大算法