1 算法
- 算法(Algorithm) :是对特定问题求解方法( 步骤) 的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。
1.1 算法具有以下五个特性
- ① 有穷性 : 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
- ② 确定性 :算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口。
- ③ 可行性 : 一个算法是能行的。即算法描述的操作都可以通过已经实现的基本运算执行有限次来实现。
- ④ 输入 : 一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。
- ⑤ 输出 : 一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。
1.2 算法的描述
一个算法可以用多种方法描述,主要有:使用自然语言描述;使用形式语言描述;使用计算机程序设计语言描述。
算法和程序是两个不同的概念 。一个计算机程序是对一个算法使用某种程序设计语言的具体实现。算法必须可终止意味着不是所有的计算机程序都是算法。
1.3 算法设计的要求
- 评价一个好的算法有以下几个标准
- ① 正确性(Correctness ) : 算法应满足具体问题的需求。
- ② 可读性(Readability) : 算法应容易供人阅读和交流。可读性好的算法有助于对算法的理解和修改。
- ③ 健壮性(Robustness) : 算法应具有容错处理。当输入非法或错误数据时,算法应能适当地作出反应或进行处理,而不会产生莫名其妙的输出结果。
- ④ 通用性(Generality) : 算法应具有一般性 ,即算法的处理结果对于一般的数据集合都成立。
- ⑤ 效率与存储量需求 : 效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。一般地,这两者与问题的规模有关。
2 算法效率的度量
算法执行时间需通过依据该算法编制的程序在计算机上运行所消耗的时间来度量。
- 其方法通常有两种:
- 事后统计 :计算机内部进行执行时间和实际占用空间的统计。
问题:必须先运行依据算法编制的程序;依赖软硬件环境,容易掩盖算法本身的优劣;没有实际价值。- 事前分析 :求出该算法的一个时间界限函数。
– 依据算法选用何种策略;
– 问题的规模;
– 程序设计的语言;
– 编译程序所产生的机器代码的质量;
– 机器执行指令的速度;
撇开软硬件等有关部门因素,可以认为一个特定算法“ 运行工作量” 的大小,只依赖于问题的规模(通常用n 表示),或者说,它 是问题规模的函数