目录
一、简要
第一章一共四小节,只有第四节单独作为一个博客发表,不仅仅是这一节在我心中地位比较重要,这一节在考研,期末考试和以后的码农生涯都会有重要作用。我不能说我这一节总结的有多好,但我还是希望能拿出来与大家分享。
1、涵盖内容
1、算法的定义、算法的基本特性以及算法分析的基本概念。
2、算法的设计要求,效率度量方式以及存储空间需要。
2、学习要求
1、掌握算法的五个重要特性及特点;
2、掌握评价算法的标准,会计算时间复杂度和空间复杂度。
3、参考书目
《数据结构(C语言版)》严蔚敏、吴伟民 编著 清华大学出版社
二、重要笔记
1、算法
1.定义
算法(algorithm)是对特定问题求解步骤的一种描述,他是指令的有限序列,其中一条指令表示一个或多个操作。
2.五个重要特性
(1)有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可能在有穷时间内完成。
(2)确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性,在任何条件下,算法只有唯一的一条执行路径。对于相同的输入只能得到相同的输出。
(3)可行性:一个算法是能行的,算法中描述的操作都是可以通过已实现的基本运算执行有限次来实现。
(4)输入:一个算法有零个或多个输入。取自某个特定的对象的集合。
(5)输出:一个算法有一个或多个输出。同输入有某种特定关系的量。
3.算法目标
(1)正确性:算法应当满足具体问题的需求,并能正确的解决求解问题。
(2)可读性:算法主要是为了人的阅读和交流,其次才是机器执行,可读性有助于人对算法的理解,晦涩难懂的算法难以调试和修改。
(3)健壮性:当输入非法数据时,算法也能适当做出反应或进行处理,而不是产生莫名其妙的输出结果。
(4)效率与低存储量需求:效率指的是算法执行的时间,存储量需求是指算法执行过程中所需要的最大的存储空间,这两者都与问题的规模有关。
2、算法效率度量
1.度量方法
(1)事后统计的方法
缺陷:依据算法编制的程序;依赖计算机硬件,软件等环境因素,容易掩盖算法本身的优劣。
(2)事前分析估算的方法
取决于以下因素:算法策略;问题规模;书写程序的语言(实现语言级别越高,执行效率越低);编译所产生的机器代码质量;机器执行指令速度。
2.时间复杂度
一个语句的频度是指该语句在算法中被执行的次数,算法中所有的语句的频度之和记作T(n),它是该算法问题规模n的函数,记作
它表示随着问题规模n的增大,算法执行时间的增长率和 f(n) 的增长率相同。称之为算法的渐近时间复杂度,简称时间复杂度。
(1)常用时间复杂度
注:越往下,算法的时间复杂度越高,编写算法时尽量避免使用指数阶。
(2)时间复杂度分类
最坏时间复杂度:最坏情况下的时间复杂度。
平均时间复杂度:所有输入实例等概率出现的期望运行时间。
最好时间复杂度:最好情况下的算法时间复杂度。
注:一般总是考虑最坏时间复杂度,保证算法的运行时间不会比它更长。
3.空间复杂度
算法的所消耗的存储空间,即算法的空间复杂度。记为:
算法原地工作:算法所需要的辅助空间是常量,即O(1)。