算法与算法的评价
什么是算法?
1.定义:算法是对解决问题的步骤的准确完整描述,是指令的有限序列,尽管每个指令包含一个或者多个操作。
2.特征(算法的五大基本特性):
有穷性:一个算法在获取合法输入值之后必须在有穷步之类完成,每一个具体步骤也是有穷的。
确定性:算法中的每一条指令必须包含确切的含义,不能产生二义性。
可行性:算法是可实现的,每一个操作都是可以通过已知的基本运算来执行有限次实现。
输入:一个算法有零个或者多个输入,这些输入来自某些特定的集合。
输出:一个算法有一个或者多个输出,这些输出与对应的输入有着某种特定的关系。
【注:一个算法可以没有输入但是必须有至少一个输出。】
如何设计出“好”的算法?
要注意以下四个方面:
1.正确性:算法能够正确的解决问题。
2.可读性:算法具备良好的可读性,以便于其他人阅读理解。
3.健壮性:输入非法值时,算法应当作出正确的回应而不是输出莫名其妙的值。
4.效率与低存储量需求:涉及到算法的执行时间和在计算机中的存储空间,这往往与问题的规模有关。
如何评价一个算法的优劣?
一个算法的优劣往往与它的时间复杂度和空间复杂度有关。
时间复杂度:
1.语句的频度:是一个语句在所在算法中被重复执行的次数。
2.时间复杂度定义:算法中所有语句的频度之和,这是问题规模
的函数,时间复杂度也就是分析
的数量级。
3.如何分析算法的时间复杂度?
因为时间复杂度我们一般记为,即只要研究
的数量级罢了。所以我们只要关注算法代码中最内层循环内的语句执行次数(一般与
同数量级),就可以得到整个算法的时间复杂度
。
但是往往算法的时间复杂度不仅仅依赖于问题的规模n,也取决于输入数据的性质(输入数据的初始状态),这就产生了算法的最好时间复杂度、最坏时间复杂度与平均时间复杂度。一般我们考虑的是算法的最坏时间复杂度,但在考试的时候 要根据实际的问题来看。
时间复杂度有两种规则:
1.加法规则:
2.乘法规则:
常见的时间复杂度的排序:
空间复杂度:
1.空间复杂度的定义:算法的空间复杂度定义为该算法所消耗的存储空间,它是问题规模n的函数。
2.算法的原地工作是指算法所需要的辅助空间为常量.