查找算法中的概念(排序树和散列表)

来源:互联网 发布:淘宝买东西寄到国外 编辑:程序博客网 时间:2024/05/16 18:05

1、二叉排序树
别名二叉搜索树,二叉查找树,Binary Sort Tree(BST)
这里写图片描述
这里写图片描述

如果数据集没有顺序,线性查找是非常慢的。但是如果构造成了二叉排序树,且所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么二叉排序树的搜索性能逼近二分查找。但它比连续内存空间的二分查找的优点是,改变二叉排序树结构(插入与删除结点)通常是常数开销。而插入与删除顺序表中的结点需要移动大段的内存数据。

2、平衡二叉排序树
别名AVL树,Balanced Binary Tree
如果按第一个图构建二叉排序树,例如查找9,只需要比较两次。而第二个图需要比较9次。
这里写图片描述这里写图片描述
第二个图也是一个二叉排序,但它的搜索性能已经是线性的了。同样的关键字集合,按照不同的关键字顺序构建二叉排序树,有可能导致不同的树结构。所以,还要考虑尽可能让二叉排序树保持平衡,使得按照不同的关键字顺序都可以构建效率较高的二叉排序树(平衡二叉排序树)。
这里写图片描述
这里写图片描述
常用算法有红黑树、AVL、Treap、伸展树、Size Balanced Tree(简称SBT)等。

3、多路查找树之2-3树
对于二叉排序树,每个结点只存储一个元素,只有两个孩子,在数据量很大时,树的结点个数会很多并且深度很深,出现内存存储不下的情况。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

4、B树
别称B-树。
这里写图片描述
这里写图片描述
比如2-3树,m=3,3/2<=k<=3,即每个分支结点都有2或者3个孩子,1或2个元素。

这里写图片描述

5、B+树
B+树是B-树的变体,也是一种多路搜索树:

   1.其定义基本与B-树同,除了:   2.非叶子结点的子树指针与关键字个数相同(B-树是k-1个关键字,k个子树指针);   3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);   5.为所有叶子结点增加一个链指针;   6.所有关键字都在叶子结点出现;   如:(M=3)

这里写图片描述
B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在

非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;

   B+的特性:   1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;   2.不可能在非叶子结点命中;   3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;   4.更适合文件索引系统;

6、哈希表(散列表)
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

处理散列表冲突的方法
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

0 0