算法学习笔记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+树的所有数据都存放在叶结点,其他结点的关键字不保存数据,只用来索引。
如图:
- 算法学习笔记18-查找
- 算法查找学习笔记
- 查找算法学习笔记
- 【算法学习笔记】-二分查找算法
- Java二分查找算法学习笔记。
- [学习笔记]排序算法之 二分法查找
- 算法学习笔记之折半查找
- 算法学习笔记——查找问题
- 学习笔记---排序与查找的算法
- |算法讨论|二分查找 学习笔记
- Java之学习笔记-------------查找算法
- 二分法查找(折半查找)算法学习笔记
- 二分法查找(折半查找)算法学习笔记
- 查找合并算法笔记
- 二分查找算法笔记。
- 查找算法笔记
- 【笔记】静态查找算法
- 算法导论学习笔记——二叉查找树
- 面向对象 -- 方法重写和方法重载,带上点抽象类
- HTML菜鸟入门8
- java导出2007excel--防止内存溢出
- 阿里巴巴常考面试题及汇总答案
- Parameter 'email' not found. Available parameters are [0, 1, param1, param2]解决方案
- 算法学习笔记18-查找
- 一起学ASP.NET Core 2.0学习笔记(一)- CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建
- Css文档流(Normal Flow)详细介绍
- servletCookieAndSession
- 伪静态规则
- JDBC连接工具类
- 顺序表的基本操作
- MYSQL其他常用函数
- 二级java程序设计--异常与断言