初认识算法
- 获取链接
- X
- 电子邮件
- 其他应用
算法复杂度
复杂度的概念(时间复杂度):
在计算机科学中,算法的时间复杂度(time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 n (必须比 n0 大)的输入,它至多需要 5n3 + 3n 的时间运行完毕,那么它的渐近时间复杂度是 O(n3)。
为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元执行的时间都是相同的。因此,总运行时间和算法的操作单元数量最多相差一个常量系数。
相同大小的不同输入值仍可能造成算法的执行时间不同,因此我们通常使用算法的最坏情况复杂度,记为 T(n) ,定义为任何大小的输入 n 所需的最大执行时间。另一种较少使用的方法是平均情况复杂度,通常有特别指定才会使用。时间复杂度可以用函数 T(n) 的自然特性加以分类,举例来说,有着 T(n) = O(n) 的算法被称作“线性时间算法”;而 T(n) = O(Mn) 和 Mn= O(T(n)) ,其中 M ≥ n > 1 的算法被称作“指数时间算法”。(摘自Wiki百科)
空间复杂度:
在计算机科学中,一个算法或程序的空间复杂度定性地描述该算法或程序运行所需要的存储空间大小。空间复杂度是相应计算问题的输入值的长度的函数,它表示一个算法完全执行所需要的存储空间大小。[1]
和时间复杂度类似,空间复杂度通常也使用大O记号来渐进地表示,例如、
、
、
等;其中n用来表示输入的长度,该值可以影响算法的空间复杂度。
就像时间复杂度的计算不考虑算法所使用的空间大小一样,空间复杂度也不考虑算法运行需要的时间长短。(摘自wiki百科)
时间复杂度和空间复杂度是衡量一个算法好坏的重要指标(前提是算法能够正确运行)
在构建一个算法程序过程中,首要考虑的应该是如何实现这个程序。再考虑算法的优化,降低时间复杂度和空间复杂度。但是在理想条件下,时间和空间不可兼得。为了节省时间,就必须要牺牲更多的空间。(同理为了节省空间,就得牺牲更多的时间!)但是考虑到”时间就是金钱“应该没有多少人会为了空间而牺牲时间吧(😀)。
总之,算法的目的就是能够高效的完成一个给定的要求和程序。
- 获取链接
- X
- 电子邮件
- 其他应用
