1
算法与数据结构  C语言版
1.3.3.3 1.3.3 算法效率度量方法
1.3.3 算法效率度量方法

一种数据结构的优劣是由实现其各种运算的算法具体体现的,对数据结构的分析实质上就是对实现运算算法的分析,除了要验证算法是否正确解决该问题外,需要对算法的效率作性能评价。

性能评价分正确性、可读性、健壮性、高效率与低存储量需求几个方面。

在计算机程序设计中,对算法分析是十分重要的。通常对于一个实际问题的解决,可以提出若干个算法,那么如何从这些可行的算法中找出最有效的算法呢?或者有了一个解决实际问题的算法,我们如何来评价它的好坏?这些问题需要通过算法分析来确定。因此算法分析是每个程序设计人员应该掌握的技术。

评价算法的标准很多,评价一个算法主要看这个算法所占用机器资源的多少,而这些资源中时间代价与空间代价是两个主要的方面,通常是以算法执行所需的机器时间和所占用的存储空间来判断一个算法的优劣。

1.关于算法执行时间

一个算法的执行时间大致上等于其所有语句执行时间的总和,语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。

由于语句的执行要由源程序经编译程序翻译成目标代码,目标代码经装配再执行,语句执行一次实际所需的具体时间与机器的软、硬件环境(机器速度、编译程序质量、输入数据量等)密切相关,所以所谓的算法分析不是针对实际执行时间的精确计算,而是针对算法中语句的执行次数作出估计,从中得到算法执行时间的信息。

2.算法的空间复杂度

算法的空间复杂度一般是指执行这个算法所需要的内存空间。

一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间(例如,在链式结构中,除了要存储数据本身外,还需要存储链接信息)。如果额外空间量相对于问题规模来说是常数,则称该算法是原地工作的。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。下面主要讨论时间复杂度。