第1章 入门
1.4 算法的效率
对于给定的问题,起初只是考虑只要找到一个算法解决该问题就行,而不管该算法花多长时间或者占用多大的存储空间。随着计算机技术的发展,人们发现,求解同一个问题的不同的算法,所需要的运行时间是不同的。例如对排序问题,除了上面介绍过的插入排序算法,我们还将介绍选择排序、合并排序以及快速排序算法。我们自然会问,哪个排序算法好呢?怎么样评价一个算法的好坏呢?这就涉及到算法的时间和空间资源的分析,即算法效率(Efficiency)的分析。
算法效率的分析,指的是算法求解一个问题所需要的时间和空间。分析一个算法,意味着预测该算法解一个问题时,需要花费多少时间和空间资源。空间资源一般指解决一个问题,需要多大的内存、硬盘空间等来存储输入输出数据等。时间资源一般指的是解决一个问题需要多长的时间。一般地,对一个问题,存在不同的求解算法,我们可以根据算法所需要的时空资源来确定出其中有效的算法。随着计算机硬件技术的发展,现在计算机的内存和硬盘空间基本上能满足问题的需要,即空间资源已经不是问题,因此,我们分析一个算法,主要考虑算法的计算时间,今后,我们也主要从时间资源方面对算法进行分析,即分析算法有多快。
在分析一个算法前,我们需要知道如何实现一个算法,这就涉及到计算模型的概念。如果对一个问题,利用计算模型能够实现一个求解算法,则该问题是可解的,否则是不可解的。排序问题是一个可解的问题,因为我们已经找到了许多排序算法。对于不可解的问题,由于无法找到其求解算法,对其进行算法研究也就没必要,本书探讨可解问题的算法设计与分析。
……