算法的基本概念
1.定义
算法(Algorithm)是对特定问题求解步骤的一种描述, 它是指令的有限序列,其中的每条指令表示一个或多个操作。
2.重要特性(5个)
1)有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
2)确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
3)可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
4)输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
5)输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
3.”好“的算法
1)正确性:算法应能够正确地解决求解问题。
2)可读性:算法应具有良好的可读性,以帮助人们理解。
3)健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
4)高效率(时间复杂度低)与低存储量需求(空间复杂度低):效率是指算法执行的时间,在储量需求是指算法执行过程中所儒要的最大存储空间,这两者都与问题的规模有关。
算法效率的度量
1.时间复杂度(研究时间开销与问题规模n之间的关系)
定义:一个语句的频度是指该语句在算法中被重执行的次数。
算法的时间复杂度记为:T(n)= O(n))
最坏时间复杂度是指在最坏情况下,算法的时间复杂度。
平均时间复杂度是指所有可能输入实例在等概奉出现的情况下,算法的期望运行时间。
最好时间复杂度是指在最好情况下,算法的时间复杂度。
结论1:顺序执行的代码只会影响常数项,可以忽略。
结论2:只需挑循环中的一个基本操作,分析它的执行次数与n的关系即可。
结论3:如果有多层嵌套循环,只需关注最深层循环循环了几次。
2.空间复杂度(空间开销(内存开销)与问题规模n之间的关系)
定义:算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。记为S(n)= O(g(n))
算法原地工作是指算法所需的辅助空间为常量,即O(1)。
研究空间复杂度时:只需关注存储空间大小与问题规模相关的变量。
(小故事:算法的性能问题只有在n很大时才会暴露出来)