最优二叉查找树 次优二叉查找树 最优二叉树

未完成。。

在数据结构课本中,查找,作为倒数的章节介绍,不是因为它不重要,而是它本身作为一种数据结构比较简单。但实用用性较强。


按照查找的引出的先后顺序介绍:

1. 静态查找(树)表

以下介绍的是有序表查找,无序表只能顺序查找

二分查找

作为有序表查找的一种非常普通且实用的方法。大家并不陌生。

思想:先确定待查记录所在的范围(区间),然后逐步缩小范围找到或找不到该记录为止。如果mid对应值大于key,high = 密度-1;如果mid对应值小于key,low = mid + 1;否则找到结果。

性能分析:对于任意的n,当较大(n>50)时,假设表中每个记录的查找概率相等(1/n),则查找成功时折半查找的近似平均查找长度为= log2(n+1)-1。

斐波那契查找

原理:根据斐波那契序列的特点对表进行分割。

其中:《最优二叉查找树 次优二叉查找树 最优二叉树》

假设开始时数组A中记录个数比某个斐波那契数小1,即n=Fu-1,然后将给定值key和查找序列中A[Fu-1]进行比较,

若相等,则查找成功

若key > A[Fu-1],则在A[Fu-1+1]至A[Fu-1]区间的数组中进行查找;

若key < A[Fu-1],则继续在A[0]至A[Fu-1-1]区间的数组中进行查找;


性能分析:斐波那契查找的平均性能比折半查找好,但最坏情况下的性能 (虽然仍为O(lgn)) 却比折半查找差。

小小优点:分割时只需进行加、减运算。


插值查找

原理:是根据给定值key来确定进行比较关键字A[i]的查找方法。

《最优二叉查找树 次优二叉查找树 最优二叉树》

其中,A[l]和A[h]分别为有序表中具有最小关键字和最大关键字的下标

性能比较:它只适合于关键字均匀分布的数组,在这种情况下,对数组较长的数组来说,其平均性能比折半查找好。


由于上面讨论的查找都是等概率的查找,如果待查找数为非等概率出现,那么上述的方法并非是使平均查找长度最短

静态最优查找树(SOST)

提出背景:

定义:

性能分析:由于构造的代价比较大,达到O(n^3)

次优查找树(NOST)

提出背景:对于上述查找的所有结点来说,它们的出现是等概率的;

          当它们被查找的概率不同时,这时原来的为了使整体的ASL(平均查找长度)最小

定义:递归定义,推到公式

构造过程:1、按照元素值大小进行排序,并记录每个元素的概率

          2、每次选择最小的P值作为该子树的根

性能分析:

索引顺序表

提出背景:

定义:

原理:缩小区间的查找过程

性能:可以折半查找

2. 动态查找(树)表

二叉排序树或平衡二叉树-BST

提出背景:对于有序表的查找来说,在进行二分查找时,

定义:


平衡二叉查找树-AVL

提出背景:

定义:对于树中每个结点来说,它的左右子树高度差的绝对值不超过1

B树、B+、B-

提出背景:

键树

引入原因:

最优二叉树—huffman树—不是查找树的一种,可以做对比

3. 哈希表

    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/zhaojinjia/article/details/8170681
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞