第七章学习笔记
查找:
基本概念:
查找:
1.静态查找(查找过程中不改变原本的数据)
2.动态查找(查找过程中对原来的数据进行改动)
关键字:
数据元素(或记录)中某个数据项的值
平均查找长度ASL(Average Search Length):
ASL = Σni=1 pi ci
其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同。
Pi=1/n,Ci是找到第i个元素的比较次数。
线性表查找:
1.顺序查找:
基础顺序查找:
从头遍历直到找到目标关键字或到表尾
时间复杂度:O(n);
ASL = (1+2+...+n)/ n = (n+1)/ 2
监视哨顺序查找:
将0号位的值设置成目标关键字作为监视哨
从后往前遍历遍历直到找到目标关键字或监视哨
时间复杂度:O(n);
ASL = (1+2+...+n)/ n = (n+1)/ 2
2.二分查找(适用于有序表):
基础二分查找:
将low和high值分别设为表头表尾的序号(low = 1, high = lenth)
将low和high中间的值与目标关键字比较
根据比较情况调整low和high将搜索区域折半缩小
当low>high时结束程序
时间复杂度:O(log2n);
ASL = log2(n + 1)-1
递归二分查找:
将low和high值分别设为表头表尾的序号(low = 1, high = lenth)
将low和high中间的值与目标关键字比较
根据比较情况递归查找左区域或右区域
当low>high时结束程序
时间复杂度:O(log2n);
ASL = log2(n + 1)-1
3.分块查找:
适用于块内有序块间无序的表
相当于将有序块分别当作有序表查找
树表查找:
1.二叉排序树:
左子树所有结点值小于其根节点(或为空树)
右子树所有结点值大于其根节点(或为空树)
2.二叉平衡树:
左右子树深度差不超过1
3.多叉树:
B树
B+树
散列查找:
哈希表:
散列函数:
关键字经散列函数处理后的值作为该元素的散列地址
一般散列函数使用除留余数法
H(key) = key % m
冲突:
不同关键字的元素分配到同一散列地址的情况称为冲突
解决方法:
开放地址法:
1.线性探测法:
Hi = (H(key) + di) % m di = 1, 2, 3, 4, ..., k(k ≤ m-1)
2.二次探测法:
Hi = (H(key) + di) % m di = 12, -12, 22, -22, ..., k2 , -k2(k ≤ m/2)
3.伪随机探测法
链地址法