算法
算法(Algorithm)[ælgə’rɪðəm]
概念:程序 = 算法 + 数据结构
算法是解决特性问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的特征
- 输入输出
- 有穷性
- 确定性
- 可行性
算法的设计要求
- 1.正确性
- 2.可读性
- 3.健壮性
- 4.时间效率高和存储量低
输入输出
算法具有零个或多个输入(参数)。
算法至少有一个或多个输出,输出形式可以是打印输出,也可以使返回一个或多个值,处理逻辑等。
有穷性
指算法在执行有限的步骤之后,自动结束而不会出现无线循环,并且每一个步骤在可接受的时间内完成。
确定性
算法的每一个步骤都具有确定的含义,不会出现二义性。
可行性
算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。
可行性意味着算法可以转换为程序上机运行,并得到正确的结果。
正确性
算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。
但是算法的正确通常在用法上有很大的差别,大体分为以下四个层次。
- 1.算法程序没有语法错误。
- 2.算法程序对于合法的输入数据能够产生满足要求的输出结果。
- 3.算法程序对于非法的输入数据能够得出满足规格说明的结果。
- 4.算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。
可读性
算法设计的另一目的是为了便于阅读、理解和交流。
健壮性
当输入数据不合法时,算法也能做出相关的处理,而不是产生异常或莫名其妙的结果。
时间效率高和存储量低
设计算法应该尽量满足时间效率高和存储量低的需求。
算法效率的度量方法
- 1.事后统计方法
- 2.事前分析估算方法
事后统计方法
- 这种方法主要是通过设计好的测试程序和数据,利用计算机时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
- 必须依据事先编写好的程序,这通常要花大量的时间和精力。如果编写完发现算法很糟糕,那就是竹篮打水。
- 时间的比较依赖计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。
- 算法的测试数据测试困难,并且程序的运行时间往往还与测试数据规模有很大的原因。
- 基于事后统计方法有这样那样的缺陷,一般都不予采纳。
事前分析估算方法
在计算机程序编制前,依据统计方法对算法进行估算。
经过分析,一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
1.算法采用的策略、方法。
2.编译产生的代码质量。
3.问题的输入规模。
4.机器执行指令的速度。
第一条是算法好坏的根本
第二条要由软件来支持
第四条要看硬件性能
抛开软件硬件有关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓的问题输入规模是指输入量的多少。