[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录

队列:先进先出的理念,应用范围非常广泛,如系统进程间通信

哈希表:可以使数据的查询效率得到显著提升(考虑解决哈希冲突,冲突后可以在对应的已有元素后紧跟指针形成链表来解决冲突),而对于冲突域的查询,在查询到该链表后,改为线性查询,就由O(1)变为了O(n).如果数组的空间过小,使用哈希表的时候就很容易产生冲突,线性查找的使用频率也会更高;反过来,如果数组的空间太大,就会出现很多空箱子,造成内存的浪费.因此,给数组设定合适的空间非常重要.

在存储数据的过程中,如果发生冲突,可以利用链表在已有数据的后面插入新数据来解决冲突.这种方法被称为’链地址法’.
还有几种解决冲突的方法.其中,应用较为广泛的是’开放地址法’.这种方法当发生冲突时,立刻计算出一个候补地址(数组上的位置)并将数据存进去.如果仍有冲突,便继续计算下一个候补地址,直到有空地址为止.因为哈希表在数据存储上的灵活性和数据查询上的高效性,编程语言的关联数组等也常常会使用它.

堆:是一种树形结构,被用于实现’优先级队列’.向堆中插入数据时,总是加在最下面一行靠左的位置,当最下面一行没有多余空间时,就再往下另起一行,把数据夹在这一行的最左端.

[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第1张图片
从堆中取数据时,取出的是最上面的数据,这样,堆中就能始终保持最上面的数据最小.[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第2张图片
取出数据后,堆内的数据重排[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第3张图片
[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第4张图片

如果频繁地从管理的数据中取出最小值,那么使用堆来操作会非常方便.比如狄克斯特拉算法,每一步都需要从候补顶点中选择距离起点最近的那个顶点.此时,在顶点选择上可以用到堆

二叉查找树

二叉查找树有两个性质
[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第5张图片
[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第6张图片
[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第7张图片
[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第8张图片
[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第9张图片[我的第一本算法书] 第一章 基本数据结构作用和特性 摘录_第10张图片

还有很多以二叉查找树为基础拓展出来的数据结构,比如’平衡二叉查找树’.这种数据结构可以修正形状不平衡的树,让其始终保持均衡形态,以提高查找效率.

本文中介绍的二叉查找树中的一个结点最多有两个子结点,但我们可以把子节点数拓展为m(m为预先设定好的常数).像这种子节点数可以自由设定,并且形状均衡的树便是B树.

你可能感兴趣的:(Algorithm,&,Data,Structures)