七、 查找

本文详细介绍了查找的基本概念,包括顺序查找、折半查找、分块查找和B树等常见查找算法。顺序查找适用于无序序列,而折半查找仅用于有序表,能提高查找效率。B树作为一种多路平衡查找树,确保了查找操作的平衡性,降低了查找层数。文章还探讨了B树的插入和删除操作,是理解数据结构和算法的重要资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、查找

(一)概念:

查找——在数据集合中寻找满足某种条件的数据元素的过程
查找表(查找结构)——用于查找的数据集合,由同一类的数据元素(或记录)组成
关键字——数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的
在这里插入图片描述

(二)查找算法的效率评价:

查找长度——在查找运算中,需要对比的关键字的次数
平均查找长度(ASL)——所有查找过程中进行关键字的比较次数的平均值
在这里插入图片描述

二、顺序查找:

又叫线性查找,通常用于先信标

(一)算法思想:

从头到jio挨个找(从jio到头也可以)

(二)算法实现:

typedef struct{//查找的数据结构:顺序表 
	int* elem;//动态数组基地址
	int TabeLen;//表长 
}SSTable;

//顺序查找
int Search_Seq(SSTable ST,int key){
	for(int i = 0;i < ST.TabeLen && ST.elem[i] != key;++ i){
		//查找成功则返回元素小标;查找失败则返回-1
		return i == ST.TabeLen?-1:i; 
	}
} 

三、折半查找

(一)算法思想:

又称二分查找,仅适用于有序顺序表

(二)算法实现:

在这里插入图片描述

四、分块查找

(一)算法思想:

在这里插入图片描述在这里插入图片描述

五、B树

(一)概念:

对于5叉排序树,规定除了根节点外,任何结点都至少有3个分叉,2个关键字,若每个结点内关键字太少,会导致树变高,则需要查更多层结点,效率低
策略:
  1)m叉树中,规定除了跟结点外,任何结点至少有[m/2]个分叉,即至少含有[m/2]-1个关键字
  2)规定m叉查找树中,对于任何一个结点,其所有子树的高度都相同,保证课平衡

满足以上“策略”条件即是一颗B树,所谓B树:
1)又称多路平衡查找树,B树中所有结点的孩子个数的最大值为B树的阶,用m表示;
2)一颗m阶B树或为空树,或满足以下条件:
  (1)树中每个结点至多有m个子树,即至多含有m-1个关键字;
  (2)若根节点不是终端结点,则至少有两颗子树;
  (3)除根节点外的所有非叶子结点至少有[m/2]棵子树,即至少含有[m/2]-1个关键字;
  (4)所有非叶子结点结构如下:
在这里插入图片描述

  (5)所有的叶结点都出现在同一层次上,且不带信息(视为外部结点或类似折半查找判定树的查找失败结点,实际上不存在,指向这些结点的指针为空)。
在这里插入图片描述

(二)B树的高度:

注:B树的高度不包括叶子结点(失败结点)。
问题:含有n个关键字的m阶B树的最小高度最大高度是多少?
最小高度——让每个结点尽可能的满,有m-1个关键字,m个分叉,则有
在这里插入图片描述最大高度——让各层的分叉尽可能少,即根节点只有2个分叉,其他结点只有[m/2]个分叉;
                      各层结点至少有:第一层1、第二层2、第三层2[m/2]…第h层2([m/2])h-2
                      第h+1层共有叶子结点(失败结点)2([m/2])h-1
                      n个关键字的B树必有n+1个叶子节点(n个关键在将数域切分为n+1个区间),则n+1 >= 2([m/2])h-1,即:h <= log[m/2][(n+1)/2] + 1

(三)B树的插入:

在这里插入图片描述

(四)B树的删除:

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值