目录
二分查找
二分查找所对应的二叉判定树:一定是二叉排序树,一定是平衡二叉树。
并且若取 mid = ⌊(low+high)/2⌋,则右子树中的节点数量一定比左子树中的多0个或1个;
若取 mid = ⌈(low+high)/2⌉,则左子树中的节点数量一定比右子树中的多0个或1个。
分块查找
没用过分块查找,还真没啥印象
存储的结构特点
查找过程
主要区别在于查找分块时采用的是顺序还是二分,顺序查找不用多说,下面介绍一下比较特殊的二分查找
使用二分法查找分块时,一般会出现“查找失败”的情况,但这时一定要在low所指的分块中继续查找。其原因在于二分法查找失败时,最终的low = high + 1,此时所要查找的关键值大小介于high和low所指的元素之间,例如图中的19最终介于high所指向的10和low所指向的20之间,但是这时不应该结束查找,因为按照分块查找的存储结构特点,每个分块保存的元素是这个分块中的最大关键字,所以low所指向的分块中是有可能还存在着所要找的关键值的,例如图中的19就位于low所指向的分块当中。
查找效率分析
查找次数:
注意对索引表采用二分查找时,要仔细判断在索引表中的二分查找次数,例如图中查找27时需要二分查找3次 + 顺序查找1次 = 4次
一种特殊情况是将长度为n的查找表平均分为b个分块,每个分块有s个元素:
当 时,ASL取最小时
对索引表采用二分查找时: