第1章 算法基础
前言
算法是计算机科学的基石
算法:计算的灵魂
程序=算法+数据结构
学习算法可以提高分析问题的能力
例题
1.1算法
1.算法的定义
算法指问题求解的方法及求解过程的描述,是一个精心设计的计算序列,用以解决一类特定的问题。
2.算法的性质和设计原则
1)有穷性:一个算法必须能在执行有限步骤之 后终止,且每一步都在 有穷时间内完成。
2)确定性:算法中的每一条指令必须有 确切的含 义,对于相同的输入只能得到相同的输出。
3)可行性:算法描述的操作都必须足够基本,都可以通过已经实现的基本操作执行有 限次来实现。
4)有输入:一个算法有零个或多个输入。
5)有输出:一个算法有一个或多个输出。
3.算法的表示
自然语言、程序流程图、N-S图、程序设计语言(如C语言)、伪代码等。
4.算法举例
5.程序
程序是用某种程序设计语言对算法的具体实现。
史上第一次编写程序是Ada Byron于1842年为巴贝奇分析机编写求解伯努利方程的程序,因此Ada Byron被大多数人认为是世界上第一 位程序员。
6.冒泡排序
(1)自然语言
两两相比
逆序交换
(2)伪代码
(3)程序描述
1.2算法分析
- 算法分析是对一个算法所需的计算资源(时间、空间、通信等)进行预测。
- 算法复杂度 = 时间和空间资源 (+通信带宽)
算法的时间复杂度(所需时间资源)T(n);
算法的空间复杂度(所需空间资源)S(n)。
其中 n 是问题的规模(输入大小)。 - 注:不特别说明情况下,对算法只分析时间复杂度。
1.算法分析的基本法则
(1)for/while 循环:循环体内计算时间×循环次数;
(2)嵌套循环:循环体内计算时间×所有循环 次数;
(3)顺序语句:各语句计算时间相加;
(4)if-else语句:if语句计算时间和else语句计算时间的较大者。
2.冒泡排序算法分析
3.不同情况下的算法时间复杂度
1.3算法的运行时间
1.算法渐近复杂度
2.渐近表示
3.算法分析中常见的复杂性函数
4.算法分类