什么是算法
在这一模块中,我们将介绍算法的定义和分析方法,并讲解一些经典算法的 C 语言实现。
数学基础要求
本模块假定读者有一定的数学水平:基本的算术 + 集合论 + 概率论 + 矩阵。
《算法导论》附录 A~D 中有对这部分数学的简明扼要的讲解。
1. 基本概念
1.1 定义
算法是为了解决某类问题而规定的一个有限长的操作序列。
1.2 特征
- 有穷性:一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。
- 确定性:对千每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行,不会产生二义性。
- 可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
- 输入:一个算法有零个或多个输入。当用函数描述算法时,输入往往是通过形参表示的,在它们被调用时,从主调函数获得输入值。
- 输出:一个算法有一个或多个输出,它们是算法进行信息加工后得到的结果
1.3 一个“公式”
1.4 算法的表示
- 自然语言
- 流程图和 N-S 图
- 伪代码(《算法导论》中采用这种方法)
习题
[20101] 某些算法实际上是数学题目:首先要用数学技巧求得解的简单表达形式,再编写简单的程序直接输出结果。这道题带有一定脑筋急转弯性质,解答这道题对编程技巧和学习算法没有太大帮助。
- [2.2] 平面上有
个不重合的点,将它们两两连成线段,将这些线段的中点涂成红色(如果有两个或两个以上的中点重合,那里只会呈现出一个红点)。输入 ,输出红点个数的最小值。 - [3.2] 甲乙两人在玩抽硬币游戏。
枚硬币紧挨着摆成一圈,从甲开始,轮流抽走一枚或紧挨着的(如果 ABC 是紧挨着的并且 A 和 C 不是紧挨着的,那么 B 抽走之后,A 和 C 不再是紧挨着的)两枚硬币。抽走最后一枚硬币的人取得胜利。两个人都很聪明,会采取最优的策略。编写程序,输入 ,输出甲获胜的概率。
- [2.2] 平面上有