目录
用计算机解决问题
用计算机解决问题的过程分为两个阶段:程序开发者针对要解决的问题开发出相应的程序,使用者运行程序处理问题的具体实例,完成具体计算。
考虑一个计算问题时,要注意三个概念:
- 问题:一个问题W是需要解决(需要用计算求解)的一个具体需求。
- 问题实例:问题W的一个实例w是该问题的一个具体例子。
- 算法:解决问题W的一个算法A,是对一种计算过程的严格描述。对W的任何一个实例w,实施算法A描述的计算过程,就能得到w的解。
算法的性质
算法是对计算过程的严格描述。
- 有穷性:一个算法的描述应该由优先多条指令或语句构成。
- 能行性:算法中所描述的操作过程可以完全机械地进行。
- 确定性:根据算法的描述将产生出唯一的确定的一个动作序列。
- 终止性:对问题的任何实例,算法产生的动作序列是有穷的,或者终止并给出该问题实例的解;或者终止并指出给定的输入无解。
- 输入/输出:有明确定义的输入和输出。
算法的描述
- 采用自然语言描述,比较容易阅读、理解。
- 采用在自然语言描述中结合一些数学记法或公式的描述形式。
- 采用严格定义的形式化记法形式描述。如图灵机模型。
- 用类似某种编程语言的形式描述算法过程,其中参杂使用一些数学符号和记号,用于描述一些细节和具体操作。
- 采用某种伪代码形式,结合编码语言的常用结构、形式化的数学记法代表的严格描述和自然语言。
算法设计
算法设计中一些常见的通用想法
- 枚举法
- 贪心法:根据问题的信息尽可能做出部分的解,并基于部分解逐步扩充得到完整的解。
- 分治法:把复杂问题分解为相对简单的子问题。
- 回溯法(搜索法)
- 动态规划法
- 分支限界法
算法分析的主要任务就是弄清算法的资源消耗,最重要的作用是作为评价算法的一种标准。