您的位置:首页 > 理论基础 > 数据结构算法

第二话:数据结构的历史与来由

2012-06-06 00:00 1896 查看

一些数据结构的历史

有句话是这么说的,程序 = 数据 + 算法。这里的数据,是数据结构吗?

不完全对噢。记得Pascal之父、结构化程序设计的先驱Niklaus Wirth最著名的一本书,书名叫作《算法+数据结构=程序》,所以我觉得这里的数据应该是数据结构才对。

算法与数据结构之于程序设计的重要性不言自明。那么,什么是算法?什么是数据结构?什么又是程序呢?

我们先从阐明大家最为熟悉的“程序”的概念入手。程序是计算机指令的某种组合,控制计算机的工作流程,完成一定的逻辑功能,以实现某种任务;

再来看什么是算法,算法是程序的逻辑抽象,是解决某类客观问题的数学过程;

最后我们来看一看数据结构又是什么呢?在这里,数据结构具有两个层面上的涵义--逻辑结构和物理结构:客观事物自身所具有的结构特点,我们将其称之为逻辑结构。如家族谱系是一个天然的树型逻辑结构。而逻辑结构在计算机中的具体实现则称之为物理结构。如树型逻辑结构是用指针表示还是使用数组实现。 

仔细体会一下,就会发现算法与数据结构间的紧密性。用一个较为贴切的例子来形容,若把数据结构喻为建筑工程中的建筑设计图,那么算法就是工程中的施工流程图。数据结构与算法呈相互依托的关系,恰当的确立了问题的结构,问题的解决才能根据确立的层次结构选择合适的解决方法。因此任何讲解数据结构的书都不可能撇开算法,单单介绍数据结构,反之亦然。

那就是说,程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。

是的。早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。

可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

1968年,美国的高德纳(DonaU E. Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作, 开创了数据结构的课程体系。同年,数据结构作为一门独立的课程,在计算机科学的学位课程中开始出现。也就是说,那之后计算机相关专业的学生开始接受《数据结构》的“折磨”其实应该是享受才对。

之后,70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视“数据结构”。

延伸阅读

此文章所在专题列表如下:

第一话:你的数据结构怎么学的?

第二话:数据结构的历史与来由

第三话:关于数据结构的一些概念

第四话:数据的逻辑结构

第五话:数据的物理结构

第六话:关于数据类型

第七话:抽象数据类型ADT

第八话:补充数据结构基本概念的关系

第九话:数据结构与算法的关系

第10话:什么是算法?

第11话:算法的五个基本特征

第12话:什么样的算法才是好算法

第13话:算法的性能分析

第14话:如何计算算法的时间复杂度

第15话:算法的最坏情况与平均情况

第16话:算法的空间复杂度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构