关于查找
平均查找长度ASL——查找方法时效的度量
为确定记录在查找表中的位置,需将关键字和给定值比较次数的期望值。
查找成功时的ASL计算方法:ASL=∑ni=0Pi∗Ci
n:记录的个数
pi:查找第i个记录的概率
( 不特别声明时认为等概率 pi =1/n )
ci:找到第i个记录所需的比较次数
约定:无特殊说明,一般默认关键字的类型为整型
ASLs(查找成功的的平均查找长度)
ASLf(查找失败的平均查找长度)
几种不同的查找方式
顺序查找:
int seqsearch (int *a, const int n, const int K )
{
int i = 0; a[n] = K;
while (a[i] != K) i++;
return i;
}
设置监控哨,减少比较次数,提高算法效率。
ASLs=(n+1)/2
ASLf=n+1
二分查找:
int binsearch ( int K, int v[ ], int n )
{
int low, high, mid;
low = 1;
high = n;
while ( low <= high )
{
mid = ( low + high ) / 2;
if ( K < v[mid] )
high = mid - 1;
else if ( K > v[mid] )
low = mid + 1;
else /* 找到了匹配的值*/
return mid;
}
return -1; /* 没有查到*/
}
判定树的高度h=floor(logn)+1
ASLs=(n+1)*\log_2 (n+1)/n-1≈log(n+1)-1
ASLf=h-1 or h
关于静态最优查找树
定义:查找性能最佳的判定树。
性质:带权内路径长度之和PH为最小值。
PH=sigma(Wi*Hi) 与ASLs成正比
其中n:二叉树上结点的个数(有序表长度)
Hi:第i个结点在二叉树上的层次数
Wi=c*pi:c为某个常量;
pi:第i个结点的查找概率
最优查找体现的原则:
1)最先访问的结点应是访问概率最大的结点;
2)每次访问应使结点两边尚未访问的结点的被访概率之和尽可能相等。
关于次优查找树
PH值近似为最小
比静态最优查找树易于构造,时间开销少
首先按照权值升序排列,每一次选择一个,右边所有节点权值相加和减去左边节点权值相加和 最小的节点作为根节点,然后以左边节点作为左子树,右边节点作为右子树,分别构造其次优查找树。
关于分块查找
索引表中应该储存每一块的起始地址以及其中最大关键字的值,索引表中代表的每一块应该是相对有序的。也就是第一块中的元素小于第二块的中的元素,依次类推。但每一块中的元素可以无序。
首先二分查找或者顺序查找索引表,确定元素所在块。然后在每一块中顺序查找。
b为索引表长度,s为每一块中记录的个数
顺序查找+顺序查找
ASLbs=(n/s+s)/2+1
二分查找+顺序查找
ASLbs≈log(n/s+1)+s/2
几种查找树
二叉排序数 不说了,太简单
平衡二叉树(AVL树)
每个节点的平衡因子为左子树的高度减去右子树的高度
每个节点的平衡因子应该在-1到1之间
在插入一个或删除一个节点后,如果不平衡,通过旋转保持AVL数的平衡。
[调整范围的确定]
插入结点后,找到离插入结点最近且平衡因子绝对值超过1的祖先结点(危机节点),则以该危机节点为根的子树将是可能不平衡的最小子树,可将重新平衡的范围局限于这棵子树。
[调整的类型]
LL型-表示新插入结点在危机结点的左子的左子树上(一次顺时针旋转)
LR型-表示新插入结点在危机结点的左子的右子树上(一次逆时针旋转+一次顺时针旋转)
RL型-表示新插入结点在危机结点的右子的左子树上(一次顺时针旋转+一次逆时旋转)
RR型-表示新插入结点在危机结点的右子的右子树上(一次逆时针旋转)
B树
[B-树]
B-树是一种平衡的多路查找树。应用于文件系统。
1. 定义
一棵 m 阶B- 树,或为空树,或为满足下列特性的 m 叉树:
1、树中每个结点最多有 m 棵子树;
2、若根结点不是叶子结点,则最少有两棵子树;
3、除根之外的所有非终端结点最少有ceil( m / 2) 棵子树;
4、所有非终端结点包含 (n,A0,K1,A1,K2,…,Kn,An)信息数据;其中n为结点中关键字个数,Ai为指向子树的指针,Ki为关键字。
5、所有叶子结点在同一层上,且不带信息。
设关键字总数为N,m阶B-数的最大层次L=以ceil(m/2)为底的((n+1)/2)的对数+1
插入过程中需要分裂,删除过程中需要合并
[B+树]
B+树是一种B-树的变形树。应用于索引顺序文件系统。
1. m阶B+ 树与 B- 树的不同之处
1)有 n 棵子树的结点中有 n 个关键字;
2)非叶结点可以看成是索引部分 索引集
Ai :第i个子结点的指针
Ki :第i个子结点的最大(或最小)关键字
3)所有叶子结点中包含了全部关键字的信息及指向这些关键字记录的指针,且叶子结点以关键字大小自小至大顺序链接
- B+树上的基本运算
1)查找
方式1:从根结点开始,利用索引集结构,向下查找直到叶子结点
方式2:从最小关键字开始,沿叶结点数据集的链结构顺序查找
2)插入
仅在叶子结点上进行,关键字个数大于m则分裂
3)删除
也仅在叶子结点上进行,关键字个数小于m/2时,需进行合并
本文介绍了查找算法的基本概念,包括平均查找长度ASL,并详细解析了顺序查找、二分查找等方法及其平均查找长度。此外,还探讨了静态最优查找树、次优查找树和分块查找等高级主题,以及二叉排序树、AVL树、B树和B+树等数据结构。
891

被折叠的 条评论
为什么被折叠?



