时间复杂度和空间复杂度浅谈

1. 如何衡量一个算法的好坏?
①算法的效率
判断一个算法的效率时,往往只需要关注操作次数的最高次项,其他次要项和常数项可以忽略
在没有特殊说明时,我们所分析的时间复杂度都是指算法的最坏时间复杂度
只有常数记做1
操作数量的估算可以作为时间复杂度的估算

2. 什么是时间复杂度?
时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。
计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。

3. 时间复杂度为什么不使用时间来衡量而使用基本语句的运行次数来衡量?
①一个程序在不同环境的执行时间不同
②但是程序的执行次数是不发生变化的

4. 时间复杂度的O渐进表示法
只关注最高次项
时间复杂度是指最坏时间复杂度
只有常数项记做1

5. 时间复杂度的:最优、平均、最差情况,为什么时间复杂度看的是最差情况?
6. 如何求解:二分查找、递归求阶乘、递归斐波那契的时间复杂度?
7. 什么是空间复杂度?
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
8. 如何求空间复杂度? 普通函数&递归函数
对于斐波那契额数列的递归:
即时间复杂度为 O(2^n)
空间复杂度:递归深度每次递归所需要的辅助空间所以空间复杂度有为o(n)
对于斐波那契的非递归算法:
时间复杂度O(n)
空间复杂度O(n)

9. 分析递归斐波那契数列的:时间、空间复杂度,并对其进行优化,伪递归优化—>循环优化
对于斐波那契额数列的递归:
即时间复杂度为 O(2^n)
空间复杂度:递归深度每次递归所需要的辅助空间所以空间复杂度有为o(n)
10. 总结常见时间复杂度
①第一种O(1)

O(1)
    常数复杂度, 最快的算法
    取数组第1000000个元素
    字典和集合的存取都是O(1)
    数组的存取是O(1)

②第二种,对数复杂度

O(logN)
    对数复杂度
    假设有一个有序数组, 以二分法查找

③第三种,线性复杂度

O(n)
    线性复杂度
    假设有一个数组, 以遍历的方式在其中查找元素

④第四种

O(nlogn)
    求两个数组的交集, 其中一个是有序数组
    A数组每一个元素都要在B数组中进行查找操作
    每次查找如果使用二分法则复杂度是 logN

⑤第五种

O(n2)
    平方复杂度
    求两个无序数组的交集

猜你喜欢

转载自blog.csdn.net/a_hang_szz/article/details/89599696