目录
一.算法效率
算法效率:1,时间效率 2,空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。
二.时间复杂度详解
1.概念
在计算机科学中,时间复杂度是一个函数(数学函数)。它定量的描述了算法的运行时间,算法执行所花费的时间与其中的语句成正比。算法中的基本操作的执行次数为算法的时间复杂度。
2.大O渐进表示法
大O渐进表示法是一种估算方法,用来估算算法的时间复杂度。
大O符号(Big O notation):是用于描述函数渐进行为的数学符号
计算规则:1.用1代替运行时间中的所有常数项。
2.在修改后的运行次数函数中,只保留最高阶项。
3.将最高阶项的系数改为1。
下面用一个例题来说明一下
例1:
所以Func1函数的执行次数F(N)=N^2+2*N+10,根据大O渐进表示法的计算规则,其时间复杂度为O(N^2).去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数。
另外有些算法的时间复杂度存在最好、平均和最坏情况:
最坏情况:最大运行次数(上界)
平均情况:期望运行次数
最好情况:最小运行次数(下界)
例如:在一个长度为N数组中搜索一个数据x
最好情况:1次找到
最坏情况:N次找到
平均情况:N/2次找到
对于这种情况,要看最坏的情况就是F(N)=N,所有时间复杂度为O(N).
3.例题
例1:
F(N)=2*N+10。大O渐进表示法求时间复杂度为O(N)。
例2:
F(N)=M+N,大O渐进表示法求时间复杂度为O(M+N)。
例3:
F(N)=100,大O渐进表示法求时间复杂度为O(1)。
例4:
F(N)=0.5*n^2+0.5*n,大O渐进表示法求时间复杂度为O(n^2)。
例5:
F(N)=,大O渐进表示法求时间复杂度为O()。
例6:
递归算法的时间复杂度=递归次数*每次递归函数中的次数
这道题递归了N次,所以时间复杂度为O(N)。
例7:
递归次数为2^N.
所有该题时间复杂度为O(2^N).
三.空间复杂度详解
1.概念:
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。空间复杂度算的是变量的个数,开辟空间的个数。也使用大O渐进表示法。
2.例题
由于其只使用了一个额外空间,所以空间复杂度为O(1).
因为递归了n次每次递归都要在栈区开辟空间所有空间复杂度为O(n)。
总结
时间复杂度和空间复杂度的计算不难,做题做的多了,看到多了,自然能熟能生巧。