算法在计算机科学中的角色
算法是计算机科学的主题
解决一个计算问题的过程:
可计算否---》能行可计算否---》算法设计与分析---》用计算机语言实现算法---》软件系统
可计算理论
--计算模型
--可计算问题、不可计算问题
--计算模型的等价性--图灵/church命题
计算复杂性理论
--在给定计算模型下研究问题的复杂性
*固有复杂性
*上界
*下界
*平均
*复杂性问题分类
*抽象复杂性研究
算法的概念
算法的定义
- 计算:可有一个给定计算模型机械地执行规则或计算步骤序列成为该计算模型的一个计算。
一个计算机程序是一个计算(计算模型是计算机)
计算可能永远不停止——不是算法 - 算法:满足
有穷性:有限步内必须停止
确定性:每一步都是严格定义和确定的动作
能行性:每一个动作都能够被精确地机械执行
输入:有一个满足给定约束条件的输入
输出:满足给定约束条件的结果 - 问题:是算法的目的。定义了输入集合和输出集合的映射关系。
- 问题实例:一个算法面向一个问题,而不是仅求解一个问题的一个或几个实例。
算法的分析
算法的正确性分析
- 算法正确性:算法对于每一个输入都最终停止,而且产生正确输出。
不正确算法:不停止(在某个输入上)。对所有输入都停止,但对某输入产生不正确结果
近似算法:对所有输入都停止。产生近似正确的解或产生不多不正确解。 - 算法正确性证明:证明算法对所有输入都停止,证明对每个输入都产生正确结果。
调试程序不等于程序正确性证明。调试程序只能证明程序有错,不能证明程序无错。 -
循环不变量方法——证明主要结构是循环结构的算法正确性。
循环不变量:数据或数据结构的关键性质,依赖具体算法和算法的特点。
初始:循环开始前循环不变量成立。
循环步骤:循环体每执行一次,循环不变量成立。
终止:算法结束后,循环不变量保证算法正确。
算法的复杂性分析
- 目的:预测算法对不同输入所需的资源量
- 复杂性测度:时间,空间,I/O等,是输入大小的函数。
*其他概念:输入大小,时间复杂度性,空间复杂性,最坏复杂性,最小复杂性,平均复杂性。