算法学习笔记18-查找

来源:互联网 发布:js仿ios选择器 编辑:程序博客网 时间:2024/05/18 01:24

这里主要讲用于查找的数据结构——查找表(Search Table),可分为两类:

  • 动态查找表
  • 静态查找表

静态查找表

对于顺序表或线性链表(有序表),可以用折半查找(二分查找),它的时间复杂度是O(log n),此外还有斐波那契查找( O(log n) )和插值查找。
对于静态树表,可以构造一颗次优查找树(Nearly Optimal Search Tree)。
对于索引顺序表,可以用分块查找。

动态查找表

动态查找的表结构是可以动态生成的,也就是可以进行插入新值,若查找成功则返回关键字,否则插入关键字。
下面以各种树结构来表示:
(1) 二叉排序树
二叉排序树是一颗中序遍历有序的树,也就是左子树上所有结点的值都小于根结点的值,右子树上所有结点的值都大于根结点 的值。如图1
二叉排序树的查找长度等于路径长度加1,比如在图1中查找50,路径是45-53,到了结点53,左子树为空,查找结束,路径长度是2,此时在左子树插入结点50,总的查找长度是2+1=3。
(2) 平衡二叉树
平衡二叉树是所有左子树和对应的右子树的深度之差的绝对值不超过1的树。
因为二叉排序树的查找长度跟树的深度有很大关系,所以才引入了平衡二叉树的概念。我们很多时候需要把非平衡的二叉排序树。
平衡旋转有四种类型,如图2-图5:
这里写图片描述
(3) B- 树
B-树是一种平衡的多路查找树,一颗m阶的B-树,除了根结点和叶结点,每个结点有(m/2~m)棵子树,且所有的叶结点都出现在同一层。
除了叶结点不包含关键字,每个结点应该包含三部分的信息:关键字的个数n,关键字K_i,指向子树根结点的指针A_i。如图6
其实可以理解为一棵多叉排序树,如图7
这里写图片描述
(4) B+树
B+树是B-树的一种变形,B+树的所有数据都存放在叶结点,其他结点的关键字不保存数据,只用来索引。
如图:
这里写图片描述

原创粉丝点击