编程小博士(23):程序=算法+数据结构

软件世界

  问:前几期你给我陆续介绍了顺序、循环、分支、数组等知识,可以说,我学到了一些编程的技巧。可你能不能给我整体性地介绍一下编程的概念呢?不然学多了我会糊涂的。

  小博士:好的。

  谈编程谈得多了,那程序到底是什么呢?有一个很出名的公式言简意赅地说明了这个问题:“程序=算法+数据结构”。其实要想学好编程,关键不在于会用多少编程的语言工具,或者知晓多少时髦的概念,而是要掌握好算法和数据结构。这就像制造一个精美的瓷器,关键是加工的材料(就好比是数据结构)和制造的的方法(就好比是算法)。那么什么是算法和数据结构呢?

  算法:

  算法就是用有限的步骤去实现对某一特定问题的解法。其实算法又何尝只存在于计算机的世界里呢?应该说现实生活中有更多的“算法”。像前面说的制造任何一样产品,都要按一定的流程、一定的方法来。这一定的流程一定的方法就是“算法”。学生们从学校回家,可能有好几条回家的路线,而每一条路线都能用一定的步骤去完成“回家”这个特定的问题,所以这几条路线就可以看做几种解决问题的算法。相应地,如果提出三个数比大小的问题,当然也要有一定的算法,只不过如果你解决问题的方法要依托计算机来完成的话,那这个算法就是我们在编程的时候谈到的算法了。原来算法也是很有趣吧。

  算法的优劣

  算法既然是解决某些特定问题的方法,只要是方法,自然就有个优劣之分了。我们来看看例子:

  问题:a、b的值互换

  解决方法1(使用一个临时变量c):

  1 c=a;

  2 a=b;

  3 b=c;

  解决方法2 (使用两个临时变量c、d):

  1 c=a;

  2 d=b;

  3 a=d;

  4 b=c;

  这两种方法各有千秋,但如果考察的标准是系统更小的开销,更少的变量的话,无疑第1种方法更优秀一些。所以通过这个例子,读者就能看出来,优秀的算法往往能在本质上优化程序。

  数据结构

  数据结构就是相互之间有联系的一组元素的集合。它其实也是可以从社会中抽象出来的一个概念。看看身边的同事,大家同在一个办公室,这就是联系,因为这联系,大家就可以看作是一种数据结构。再看看一个班上的同学,大家同在一个课堂,也可以看作是一种数据结构。所以联系就是数据结构的核心。要弄懂各种类型的数据结构就是要弄懂元素间的各种联系。

  数据结构分为逻辑上的数据结构和物理上的数据结构。逻辑上的数据结构主要是讨论数据元素间的逻辑关系,而物理上的数据结构则是关注数据元素在计算机上的物理存储。

  小结

  “程序=算法+数据结构”生动地勾勒出了编程的画面。要学好编程,一窥程序宫殿里的瑰丽美景,自然少不了对算法和数据结构的了解。前面陆续介绍了一些编程的方法,后面将继续为大家介绍一些典型的数据结构和算法。