第二章 2.2 什么是抽象数据类型?

计算机科学建立在许多经典的公理之上,而抽象是其中最重要的一个。
语言的发展就是一种抽象的产物。新的简写记号能表达更广泛的概念。
一条c语句平均代表10条汇编。一条c++平均代表3条c语句。
汇编语言也包含了有用的抽象,难以察觉的是,就是“内存”与“寄存器”的概念,也是抽象,否则就要表示无数个门电路的状态变换。
文件也是抽象,你摸不着,打开硬盘也看不见,不是物理存在的。
malloc函数实现的动态内存的概念也是抽象。
————————————————————————————

程序的目的,从广义上讲,就是为了模拟现实世界。
而计算机也只能存储与处理各种数据。
因此我们需要有一种方法,可以把现实世界的问题映射到计算机里去。
在数学领域,有一种基本理念,即“万物皆数”,世界上的一切东西,都可以用各种数据来进行描述。
于是人们的重心就转向为寻找现实问题与数据的映射关系。
这种映射关系,就是现在所说的抽象数据类型。

抽象数据类型==现实问题与计算机里数据描述的映射。

第二章 2.2 什么是抽象数据类型?_第1张图片

抽象数据类型听起来有些绕口,可以把“抽象”理解成"想象"。

为什么需要想象呢?

因为每个人对问题的观察角度不同,需求不同,这种映射方式并没有一个"真理”性的标准。

比如人们出门旅游这个问题,有些人关注的是安全性,有些人关注的是花费,有些人关注的是效率。

不同的关注点,自然带来不同的需求,也就产生了不同的映射。

第二章 2.2 什么是抽象数据类型?_第2张图片

显而易见,每一种映射都是现实中某个问题的片面化描述。
所以某个具体的数据类型,对被描述的那个“问题”来说,仅仅是它的某一个方面特征。
如果改变关注点,改变了需求,意味着映射方式被改变了,那么这个具体的数据类型也就不再适用。

算法要想发挥作用,必然是依托于某个数据结构之上的(已经确定了映射方式)。
算法设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。

你可能感兴趣的:(算法--塞奇威克)