9-查找
折半查找
思想
折半查找思想,将给定值key和中间值进行比较,如果小于则查找左半边,大于则查找右半边。当不满足low<high的时候会结束查找,最终显示查找失败。折半不适用于链式存储 直接看算法:
int Binary_Search(int a[],int key){
int len = len(a);
int low = 0;high = len - 1;
while(low<=high){
mid = (low + high)/2;
if(mid == key)reutrn mid;
if(mid < key){
high = mid - 1;
}
else{
low = mid + 1;
}
}
return
}
构造二叉树
计算成功ASL和失败ASL
1)成功: 层数乘以结点数求和再除以长度 成功ASL为: 2)失败:
- 将图中的二叉树补上结点,原来的每个叶子结点都补成度为2的结点
- 这些失败结点是虚拟的,实际是不存在的,所以计算的时候,层数是按它的父节点来计算
所以图中的失败ASL为:这里的12是失败结点。
分块查找
分块查找综合了顺序查找和折半查找的优点,将数据分组,组内可以无序,但是组间必定有序,然后分别记录各组内的最值key。查找的时候先找最值Key,再按分组指针去顺序查找。
下图举例:
ASL
1)成功 先找到分块的key节点,计数一次,然后去块间顺序查找,依次+1 2)失败 整体失败的情况无法预估,题目更可能考察某一个点的查找失败,与成功类似,块间顺序查找完全部元素,即为查找失败,其实就是块长+1
散列查找
基本概念
一种特殊的数据结构,能够根据元素关键字计算出他在散列表中的存储地址