数据结构(3)——算法和算法分析
数倌栗受绽据结构除了要研究数据的逻辑结构和存储结构外。还要研究如何在数据的各种结构上实施有效的操作或处理,这就涉及到算法。算法是对特定维咩缡朊问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
工具/原料
数据结构书
算法5个特性
1、有穷性:对任何合法的输入值,一个算法必须在执行有穷步之后阶数,且每一步都应该在又穷时间内完成。
2、确定性:算法中每一条指令必须有姑百钠恁确切的含义,不会出现二义性,在任何条件下,算法只有唯一的一条执行路径,对于相同的输入只能得出相同的输出。
3、可行性:一个算法是可行的,即算法中的操作都可以通过已经实现的基本运算执行有限次来实现。
4、输入:一个算法有零个或多个输入,这些输入取自于某个特定的数据对象的集合,他可以使用输入语句从外部提供,也可以在算法内通过赋初值给定。
5、输出:一个算法有一个或多个输出,这些书除湿桶输入有着某种特定关系的量。
算法设计的要求
1、正确性:算法应当满足具体问题的需求。正确性大体可以分为以下四个层次:

2、可读性:算法主要是为了人的阅读与交流,其次才是及其执行。可读性好有助于人对算法的理解,晦涩难懂的程序易于隐藏较多的错误,往往难以调试和修改。
3、健壮性:当输入数据非法时,算法也能适当的做出反应或进行处理,而不会产生莫名奇妙的结果。
4、效率:对于同一个问题,如果有多个算法可以解决,则执行时间短、存储量需求小的算法效率高。
算法效率的度量
1、算法的效率包括算法运行时间代价和存储空间代价,它们分别由时间复杂度和空间复杂度来度量。
2、算法的时间复杂度:度量一个程序的执行时间通常由两种方法,即事后统计法和事前估计法。
3、事后统计法:

4、事前分析估算的方法:

5、为了便于比较同一问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题来说是基本运算的原操作,以该院操作的重复执行的次数作为算法的时间度量。
6、一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记为:

7、式子表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。T(n)称为算法的渐进时间复杂度,简称时间复杂度。
8、在大多数情况下,原操作是最深层循环类的语句中的原操作。它的执行次数和包含它的语句的频度相同(语句的频度指的是该语句重复执行的次数。)
9、例如:

10、以上三例中,含基本操作”x++“的语句的频度分别为1,n和n方。这三个程序段的时间复杂度相应为O(1),O(n)和O(n方)分别称为常量阶,线性阶和平方阶。
11、除特别指明外,时间复杂度均指最坏情况下的时间复杂度。
算法的空间复杂度
1、类似于算法的时间复杂度,以空间复杂度作为算法所需存储空间的量度,记为:
