第一节:时间复杂度和空间复杂度

一. 前言

 1. 思考

  算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的。就比如要拧一个螺母,使用扳手还是钳子是有区别的,虽然使用钳子也能拧螺母,但是没有扳手好用。“条条大路通罗马”,解决问题的算法有多种,这就需要判断哪个算法“更好”。

2. 算法vs程序

  很多人认为,程序就是算法,其实不然。 算法是解决某个问题的想法和思路;而程序则是把想法和思路用代码实现出来并且可以运行。算法可以是伪代码,程序则是实实在在的可以运行的代码。

  比如:我们想把一个数组的中的值输出来,首先想到的是通过for循环,这就是算法;在这个想法的基础上通过代码编写程序。  

  所以,算法相当于是程序的雏形。当解决问题时,首先心中要有解决问题的算法,围绕算法编写出程序代码。

3. 有算法一定能解决问题吗?

  对于一个问题,想出解决的算法,不一定就能解决这个问题。

  例如拧螺母,扳手相对于钳子来说更好使(选择算法的过程),但是在拧的过程(编写程序的过程)中发现螺母生锈拧不动,这时就需要另想办法。

  为了避免这种情况的发生,要充分全面地思考问题,尽可能地考虑到所有地可能情况,慎重选择算法(需要在实践中不断地积累经验)。

4. 好算法的标准

(1). 对于一个算法而言,首先它得必须能解决这个问题(称为准确性),其次通过该算法编写的程序必须要在任何情况下都不崩溃(称为健壮性)。

(2). 在满足了算法满足了 准确性 和 健壮性后,接下来要考虑的就是通过该算法编写的程序的运行效率如何,运行效率主要体现在两个方面:

  A. 算法的运行时间。(称为:时间复杂度

  B. 运行算法所需的内存空间大小。(称为:空间复杂度)

二. 时间复杂度

三. 时间--空间 互换

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

猜你喜欢

转载自www.cnblogs.com/yaopengfei/p/12562220.html