总结完静态查找,继续总结一下动态查找
动态查找表的特点是:表结构本身是在查找过程中动态生成的,对于给定的值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于Key的记录。
-
二叉排序树(BST)
二叉排序树:或者是一棵空树,或者具有以下性质:1)若其左子树不空,则左子树上的所有结点的值均小于它的根结点的值;2)若它的右子树不空,则右子树上所有结点的值均大于它的跟结点的值;3)它的左右子树也分别是二叉排序树。
由其定义我们可知,中序遍历二叉树可得到一个关键字的有序序列。 平衡二叉树(AVL树)
平衡二叉树,或者为空树,或者具有如下性质:左子树和右子树都为平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1.
平衡因子(BF):该结点的左子树的深度减去它右子树的深度。平衡二叉树上所有结点的平衡因子只可能是-1、0和1.
在平衡二叉树上查找的时间复杂度为O(logn)B-树
是一种平衡的多路查找数,在文件系统中很有用。
一棵m阶的B-树,或为空树,或为满足下列特性的m叉树:
1)树中每个结点最多有m棵子树
2)若根结点不是叶子结点,则至少有两棵子树
3)除根结点外的所有非终端结点至少有m/2上取整棵子树
4)所有的非终端结点包含如下信息(n,A0,K1,A1,K2,A2,…,Kn,An)
其中n表示该结点中包含的关键字的个数,Ki表示关键字,且Ki+1>Ki,Ai表示指向子树跟结点的指针,且Ai-1指向的子树中所有结点的关键字均小于Ki,Ai指向的子树中所有结点的关键字均大于Ki。
例如:B+树
是应文件系统所需而出的一种B-树的变型树,两者的差异在于
1)某个结点含有n棵子树,则该结点中含有n个关键字
2)所有的叶子节点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依照关键字的大小自小而大顺序链接。
3)所有非叶子结点可以看成是索引部分,结点中仅含有其子树(跟结点)中的最大(或最小)关键字。
例如:-
键树(数字查找树DST)
是一棵度>=2的树,注意:该树中的每个结点不是包含一个或几个关键字,二是将关键字拆分,只含有组成关键字的符号,例如,若关键字是数值,则结点中只包含一个数位,若关键字是单词,则结点中只包含一个字母字符。
例如有如下16个关键字的集合
{CAI、CAO、LI、LAN、CHA、CHANG、WEN、CHAO、YUN、YANG、LONG、WANG、ZHAO、LIU、WU、CHEN}
先按首字符分为5个子集
{CAI、CAO、CHA、CHANG、CHAO、CHEN},{ZHAO}…以此类推
然后对关键字个数大于1的子集进行按照第二个字符的不同进行分割
….直到每个子集只包含一个关键字为止。
例如: