算法逻辑之时间概念
时间和空间
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。
在实际开发中,使用的算法第一时间我们是去考虑其效果和运算时间;不同的算法其运算时间和占用内存是不同的,为了衡量不同算法的优劣和特点,主要从这俩维度进行切入:
1.时间维度 算法计算完成所需要的时间;
2.空间维度 算法计算所需的内存;
如何分析算法的时间复杂度
一看都这个我是想着,时间复杂度不就是运算时间嘛,整个机子一跑不就知道了;
但是我没考虑到,我拿自己的windows笔记本跑和mac跑,所需时间是不同的;
为了正确的判断和分析时间复杂度;
程序员大佬提出了一个分析方法 大o表示法
引入百度百科对大O表示法的解释:
大O表示法:算法的时间复杂度通常用大O符号表述,定义为T[n] = O(f(n))。称函数T(n)以f(n)为界或者称T(n)受限于f(n)。 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n)。T(n)称为这一算法的“时间复杂度”。当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。
n 表示数据规模 ,O(f(n))表示运行算法所需要执行的指令数,和f(n)成正比。
大O表示法复杂度量级
这五个阶级都能用代码体现出来,结合代码还是非常容易理解的。
O(1)常数阶
1 |
|
O(n)线性阶
1 |
|
O(n^2)平方阶
1 |
|
O(logn)对数阶
这里得提一下对数的基本概念
【定义】如果 N=ax(a>0,a≠1),即a的x次方等于N(a>0,且a≠1),那么数x叫做以a为底N的对数(logarithm),记作:
x=logaN
其中,a叫做对数的底数,N叫做真数,x叫做 “以a为底N的对数”。
我也不是特别理解这玩意,头疼。
结合二分法的运作理念好理解一些;
1 |
|
O(nlogn)线性对数阶
这个很好理解 就是将时间复杂度为O(logn)的代码循环n遍所需时间。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!