算法与数据结构¶
数据结构主要是指数据的两种结构
- 数据之间的逻辑结构
- 数据在计算机内存中的物理结构
逻辑结构¶
按照逻辑结构来划分,主要分为线性结构和非线性结构;
线性结构:数组、表、链表、栈、队列;数据以一定的线性顺序关系排列组织,比较直观。
非线性结构:树(堆是特殊的树)、图、集合、字典(哈希表)
某些数据结构可能同时包含线性和非线性结构,比如为了解决哈希冲突,哈希表的每个元素可能作为一个数组或者链表的头指针。
物理结构¶
- 连续 continuous 存储
- 离散 discrete 存储
离散数学¶
离散数学是研究离散结构的数学分支,它是计算机科学的基础学科,也是计算机算法的基础,当时大三学习该课程时不知其意义。
牛顿和莱布尼茨发明的微积分是研究连续空间结构的,很好地服务了大众。现实世界是连续的,物理学中的很多问题都被微积分的模型阐述和解决。
人也是连续的,思维和行为都是连续的,人还是复杂的多样的,切忌不要将人也二值化处理分类,非黑即白的判定不可取。
计算机只能处理离散的数据。
- 计算机的硬件基础逻辑门就是很好的例子:连续的电子信号被离散化成
0和1的状态。 - 哈希算法就是两个集合之间的映射关系。
-
编程语言的语法和语义也是离散的
- 我们基于某种语言编写的程序
- 以及编译器将其转换成的机器码
- 处理器的指令集(e.g. x86, ARM)
这几个实体之间的关系也是离散的,本质也是多个集合之间的映射关系。