`
阅读更多

转载http://hxraid.iteye.com/blog/608982

计算机许多应用领域中,查找操作都是十分重要的研究技术。查找效率的好坏直接影响应用软件的性能。比如说:

(1) 全文检索技术中对文本建立索引之后,对索引的查找效率将决定搜索引擎的质量。

(2) mysql数据库的索引就是B+树结构,查找效率极高。

(3) Windows OS的文件系统结构也是采用B+树进行存储的。

 

在《查找算法》系列文章中,我将主要介绍动态查找树结构。其他静态查找结构在下面简单的引出:

 

静态查找:数据集合稳定,不需要添加,删除元素的查找操作。

动态查找:数据集合在查找的过程中需要添加或删除元素。

 

静态查找结构概论

 

当把看似杂乱无章的数据组织成具有一定结构和一定规则的集合体时,查找的效率就会大不一样了。

 

【顺序查找】 大家都知道,最简单的查找方法就是顺序查找 (一个接一个得查下去)。这种线性结构的查找效率是最低的,时间复杂度在O(N)数量级,最坏的情况莫过于所有数据都找遍了,还是没找到。

 

难道真的每一个数据都必须找一次吗?

 

【折半查找】 很显然的一个例子就是利用折半查找(二分查找) 法对有序的线性数据进行查找。每一次都找1/2的部分,查找次数当然就大大减少了。时间复杂度在O(log2 N)数量级上。

 

折半查找实际就是一颗二叉树遍历,其中最中间的数据就是二叉树的根。但是问题又来了,如果这个根数据一年才查找一次,而这棵树的叶子数据1秒钟需要查找1W次(考虑数据的查找概率)。这种折半查找的效率又不行了?

 

【静态最优查找树/次优查找树】 考虑到上面折半查找在概率问题下的效率不行,我们就想能不能把折半查找二叉树中概率最大的数据放在根的位置上或者放在离根较近的位置上。基于此,静态最优查找树/次优查找树的思想就是在折半查找二叉树的基础上求解一个带权(数据概率)路径长度最小/近视最小的树。总体上说,静态最优/次优查找树的时间复杂度也在 O(log2 N)数量级上(特别是在数据具有查找概率的情况下也能保证这个效率)。

 

此外,还有一些别的静态查找结构:索引顺序表的分块查找,线性冲突再散列的hash表的查找(Hash表将在一个专题里面讲到)等。


上面介绍查找表都属于静态查找结构,也就是说当需要查找的数据集合动态变化的时候,这些结构都很不方便。 比如:

折半查找: 当查找过程中没有发现元素A的时候,需要动态添加元素A,此时整个有序表将面临重新排序的问题。

静态最优查找树: 新增元素不光要重新排序,而且原有的整棵带权路径长度最小值的树也将重建(最优解变化了)。这在代价上是沉重的,这也是为什么 静态最优查找树并不适合实际应用的巨大缺陷了。

 

正是由于实际应用中,很多时候需要在查找的同时进行添加,删除操作。因此便捷的动态查找结构就十分的总要了。下面我们用专题的形式详细讲解二叉查找树平衡二叉树红黑树B-树/B+树

分享到:
评论

相关推荐

    算法第四版-PDF-网盘链接

     1.1.1 Java程序的基本结构 4  1.1.2 原始数据类型与表达式 6  1.1.3 语句 8  1.1.4 简便记法 9  1.1.5 数组 10  1.1.6 静态方法 12  1.1.7 API 16  1.1.8 字符串 20  1.1.9 输入输出 21...

    算法-第4版-完整版

    1.1.6 静态方法 12 1.1.7 API 16 1.1.8 字符串 20 1.1.9 输入输出 21 1.1.10 二分查找 28 1.1.11 展望 30 1.2 数据抽象 38 1.2.1 使用抽象数据类型 38 1.2.2 抽象数据类型举例 45 1.2.3...

    《算法》中文版,Robert Sedgewick,塞奇威克

    1.1.6 静态方法 1.1.7 API 1.1.8 字符串 1.1.9 输入输出 1.1.10 二分查找 1.1.11 展望 1.2 数据抽象 1.2.1 使用抽象数据类型 1.2.2 抽象数据类型举例 1.2.3 抽象数据类型的实现 1.2.4 更多抽象数据类型的...

    算法,4th,塞奇威克 (Robert Sedgewick)韦恩 (Kevin Wayne), 谢路云 译.azw3

    1.1.6 静态方法 1.1.7 API 1.1.8 字符串 1.1.9 输入输出 1.1.10 二分查找 1.1.11 展望 1.2 数据抽象 1.2.1 使用抽象数据类型 1.2.2 抽象数据类型举例 1.2.3 抽象数据类型的实现 1.2.4 更多抽象数据类型的...

    算法 第4版 高清中文版

    1.1.6 静态方法 12 1.1.7 API 16 1.1.8 字符串 20 1.1.9 输入输出 21 1.1.10 二分查找 28 1.1.11 展望 30 1.2 数据抽象 38 1.2.1 使用抽象数据类型 38 1.2.2 抽象数据类型举例 45 1.2.3 抽象数据类型的实现...

    算法 第4版-谢路云译-带完整书签

    1.1.6 静态方法 12 1.1.7 API 16 1.1.8 字符串 20 1.1.9 输入输出 21 1.1.10 二分査找 28 1.1.11 展望 30 1.2 数据抽象 38 1.2.1 使用抽象数据类型 38 1.2.2 抽象数据类型举例 45 1.2.3 抽象教据...

    二叉排序树与平衡二叉树的实现

    其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的节点时再进行插入。新插入的结点一定是一个新添加的叶子节点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或...

    PaperTest Q&A笔试综述

    数据结构 46 1.树. 146 1)基本知识 …46 2)几个问题 46 3)完全二叉树( Complete binary tree)… 54 4)次优查找树 55 5)最优二叉树霍大曼树…… 55 6) BST: Search/insert/delete 56 7)平衡二叉树与...

    并行计算导论(原书第2版).[美]Ananth Grama(带详细书签).pdf

    10.7.1 查找最大独立集 10.7.2 单源最短路径 10.8 书目评注 习题 第11章 离散优化问题的搜索算法 11.1 定义与实例 11.2 顺序搜索算法 11.2.1 深度优先搜索算法 11.2.2 最佳优先搜索算法 11.3 搜索开销因子 ...

    C++编程思想习题

    6.5在输入输出流中查找 6.6strstreams 6.6.1为用户分配的存储 6.6.2自动存储分配 6.7输出流格式化 6.7.1内部格式化数据 6.7.2例子 6.8格式化操纵算子 6.9建立操纵算子 6.10输入输出流实例 6.10.1代码生成 6.10.2一个...

    jQuery权威指南-源代码

    5.5 动画效果综述/148 5.5.1 各种动画方法说明/148 5.5.2 使用animate()方法代替其他动画效果/148 5.6 综合案例分析—动画效果浏览相册中的图片/149 5.6.1 需求分析/149 5.6.2 效果界面/149 5.6.3 功能实现/...

Global site tag (gtag.js) - Google Analytics