折半查找判定数及平均查找长度
折半查找的过程看,可用二叉树来描述,二叉树中的每个结点对应有序表中的一个记录,结点中的值为该记录在表中的位置。通常称这个描述折半查找二叉树的过程称为折半查找判定树。
例如:长度为10的折半查找判定树的具体生成过程:
都遵循这个规律,左孩子结点<根结点<右孩子结点
(1)在长度为10的有序表中进行折半查找,不论查找哪个记录,都必须和中间记录进行比较,而中间记录为
(1+10)/2 =5 (注意要取整) 即判定数的的根结点为5,如图7-2(a)所示。
(2)考虑判定树的左子树,即将查找区域调整到左半区,此时的查找区间为[1,4],那么中间值为(1+4)/2 =2 (注意要取整) ,所以做孩子根结点为2,如图7-2(b)所示。
(3)考虑判定树的右子树,即将查找区域调整到右半区,此时的查找区间为[6,10],那么中间值为(6+10)/2 =8 (注意要取整) ,所以做孩子根结点为8,如图7-2(c)所示。
(4)重复以上步骤,依次去确定左右孩子、
1.折半查找是一棵二叉排序树,每个根结点的值都大于左子树的所有结点的值,小于右子树所有结点的值。
2.折半查找判定数中的结点都是查找成功的情况,将每个结点的空指针指向一个实际上不存在的结点————外结点,所有外界点都是查找不成功的情况,如图7-2(e)所示。如果有序表的长度为n,则外结点一定有n+1个
折半查找判定数中,某结点所在的层数就是即将要比较的次数,整个判定树代表的有序表的平均查找长度即为查找每个结点的比较次数之和除以有序表的 长度。
例如:长度为10的有序表的平均查找长度为
ASL=(1*1+2*2+3*4+4*3)/10=29/10;
折半查找判定数中,查找不成功的次数即为查找相应外结点与内结点的比较次数。整个判定树代表的有序表的平均查找长度。查找失败时的有序表的平均查找长度即为查找每个外结点的比较次数之和除以外结点的个数。
如图7-2(e)所示
例如:查找失败时,。长度为10的有序表的平均查找长度为
ASL=(3*5+4*6)/11=39/11;
来源:CSDN
作者:zhupengqq1
链接:https://blog.csdn.net/zhupengqq1/article/details/104141699