知识大全 查找 - 线性表的查找 - 二分查找(二)
Posted 结点
篇首语:智者不为愚者谋,勇者不为怯者死。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 查找 - 线性表的查找 - 二分查找(二)相关的知识,希望对你有一定的参考价值。
二分查找判定树
二分查找过程可用二叉树来描述 把当前查找区间的中间位置上的结点作为根 左子表和右子表中的结点分别作为根的左子树和
右子树 由此得到的二叉树 称为描述二分查找的判定树(Decision Tree)或比较树(Comparison Tree)
注意
判定树的形态只与表结点个数n相关 而与输入实例中R[ n] keys的取值无关
【例】具有 个结点的有序表可用下图所示的判定树来表示
>
( )二分查找判定树的组成
①圆结点即树中的内部结点 树中圆结点内的数字表示该结点在有序表中的位置
②外部结点 圆结点中的所有空指针均用一个虚拟的方形结点来取代 即外部结点
③树中某结点i与其左(右)孩子连接的左(右)分支上的标记 < ( > ) 表示 当待查关键字
K
回 否则继续将K与树中更下一层的结点比较
( )二分查找判定树的查找
二分查找就是将给定值K与二分查找判定树的根结点的关键字进行比较 若相等 成功 否则若小于根结点的关键字 到左子树
中查找 若大于根结点的关键字 则到右子树中查找
【例】对于有 个结点的表 若查找的结点是表中第 个结点 则只需进行一次比较;若查找的结点是表中第 或第 个结点 则
需进行二次比较;找第 个结点需要比较三次;找到第 个结点需要比较四次
由此可见 成功的二分查找过程恰好是走了一条从判定树的根到被查结点的路径 经历比较的关键字次数恰为该结点在树中的层
数 若查找失败 则其比较过程是经历了一条从判定树根到某个外部结点的路径 所需的关键字比较次数是该路径上内部结点的总数
【例】待查表的关键字序列为 ( ) 若要查找K= 的记录 所经过的内部结点为
最后到达方形结点 其比较次数为
实际上方形结点中 i i+ 的含意为被查找值K是介于R[i] key和R[i+ ] key之间的 即R[i] key
(3)二分查找的平均查找长度
设内部结点的总数为n=2 h -1,则判定树是深度为h=lg(n+1)的满二叉树(深度h不计外部结点)。树中第k层上的结点个数为2 k-
1 ,查找它们所需的比较次数是k。因此在等概率假设下,二分查找成功时的平均查找长度为:
ASL bn ≈lg(n+1)-1
二分查找在查找失败时所需比较的关键字个数不超过判定树的深度,在最坏情况下查找成功的比较次数也不超过判定树的深度
。即为:
>
二分查找的最坏性能和平均性能相当接近。
6、二分查找的优点和缺点
虽然二分查找的效率高,但是要将表按关键字排序。而排序本身是一种很费时的运算。既使采用高效率的排序方法也要花费
O(nlgn)的时间。
二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。因此,二分查找特别适
用于那种一经建立就很少改动、而又经常需要查找的线性表。
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。链表上无法实现二分查找。
cha138/Article/program/sjjg/201311/23857相关参考
分块查找 分块查找(BlockingSearch)又称索引顺序查找它是一种性能介于顺序查找和二分查找之间的查找方法 二分查找表存储结构 二分查找表由分块有序的线性表和索引表组成 ()分块有
当用线性表作为表的组织形式时可以有三种查找法其中以二分查找效率最高但由于二分查找要求表中结点按关键字有序且不能用链表作存储结构因此当表的插入或删除操作频繁时为维护表的有序性势必要移动表中很多结点这
顺序查找(SequentialSearch) 在表的组织方式中线性表是最简单的一种顺序查找是一种最简单的查找方法 顺序查找的基本思想 基本思想是从表的一端开始顺序扫描线性表依次将扫描到的结点
线性表上进行查找的方法主要有三种顺序查找二分查找和分块查找 顺序查找(SequentialSearch)算法基本思想是从表的一端开始顺序扫描线性表依次将扫描到的结点关键字与给定值K相比较若当前扫
二分查找又称为折半查找(BinarySearch)它要求线性表中结点必须按关键字值递增或递减顺序排列 二分查找的基本思想首先用要查找的关键
本章介绍了线性表树和散列表的查找方法算法实现以及各种查找方法的时间性能分析重点是顺序查找二分查找二叉树查找以及散列表上查找的基本思想和算法实现 一基本概念(识记) 查找的同时对表做修改操作(如
初始条件线性表L存在 操作结果在表L中查找值为x的数据元素其结果返回在L中首次出现的值为x的那个元素的序号或地址称为查找成功;否则在L中未找到值为x的数据元素返回一特殊值表示查找失败 ⑸插入操
知识大全 PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
PHP冒泡排序二分查找顺序查找二维数组排序算法函数的详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
单链表的查找运算 ()按序号查找 ①链表不是随机存取结构 在链表中即使知道被访问结点的序号i也不能像顺序表中那样直接按序号i访问结点而只能从链表的头指针出发顺链域 next逐个结点往下搜索
利用线性探测法构造散列表 【例】已知一组关键字为()用除余法构造散列函数用线性探查法解决冲突构 造这组关键字的散列表 解答:为了减少冲突通常令装填因子α 数为:h(key)=key%13。