1.4 算法相关概念的区别
算法其实是一个很抽象的概念,往往需要依托于具体的实现方式才能体现其价值,例如在计算机编程中的算法、数值计算中的算法等。本书重点讲解的是算法在计算机编程中的应用,由于算法的抽象性,导致读者很容易产生混淆,这里有必要先澄清一些基本概念。
1.算法和公式的关系
前面谈到的算法很容易让我们联想到数学中的公式。公式是解决某类问题,有特定的输入和结果输出,能在有限的时间内完成,并且公式都是完全可以操作并计算的。公式是提供了一种算法,但算法绝不完全等同于公式。
公式是一种高度精简的计算方法,可以认为就是一种算法,它是人类智慧的结晶。而算法并不一定是公式,算法的形式可以比公式更复杂,解决的问题更广泛。
2.算法与程序的关系
如前面所述,算法是依托于具体的实现方式的。虽然一提到算法,我们就会联想到计算机的程序设计,但算法并非仅限于此。例如,在传统的笔算中,通过纸和笔按照一定的步骤完成的计算也是算法的应用,在速记中,人们通过特殊的方法来达到快速巩固记忆的目的,这也是一种算法的应用。
在计算机程序设计中,算法的体现更为广泛,几乎每个程序都需要用到算法,只不过有些算法比较简单,有些算法比较复杂而已。
算法和程序设计语言是不同的。目前比较流行的程序设计语言包括Visual Basic、C、C++、C#、Java、Pascal、Delphi、PB等。程序设计语言是实现算法的一种形式,也是一种工具。往往需要首先熟悉程序设计语言的语法格式,才能使用这种程序语言编写合适的算法,实现程序的运行。学习一门程序设计语言是比较容易的,难的是如何正确合理地运用算法来编写程序代码来解决实际问题。
3.算法与数据结构的关系
数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组、结构体、联合、指针和链表等。因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往是依赖于某种数据结构的,也就是说,数据结构是算法实现的基础。
计算机科学家尼克劳斯·沃思(Nikiklaus Wirth)曾提出了一个著名的公式:数据结构+算法=程序。后来,他出版了著名的《数据结构+算法=程序》一书。从中可以看出算法和数据结构的关系。
经过前面的介绍,现在对程序、算法、数据结构、程序设计语言有了比较深刻的认识。如果给出一个公式,这三者的关系则可以表述成如下形式:
数据结构+算法+程序设计语言=程序
其中,数据结构表示的是处理的对象,算法是计算和处理的核心方法,程序设计语言是算法的实现方式,把它们综合起来便构成了一个实实在在的程序。
注意:算法是解决问题的一个抽象方法和步骤,同一个算法在不同的语言中具有不同的实现形式,这依赖于数据结构的形式和程序设计语言的语法格式。