山东中医药大学计算机科学与技术2班王鑫童第7章笔记

在表中的位置;若整个表检测完仍未找到与给定值相等的关键码,则查找失败,给出失败信息。
改进的顺序查找
基本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。
顺序查找的缺点平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。
顺序查找的优点:算法简单而且使用面广。
折半查找
使用条件:线性表中的记录必须按关键码有序;必须采用顺序存储。
基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键码相等,则查找成功;若给定值小于中间记录的关键码,则在中间记录的左半区继续查找;若给定值大于中间记录的关键码,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所查找的区域无记录,查找失败。折半查找判定树:
判定树:折半查找的过程可以用二叉树来描述,树中的每个结点对应有序表中的一个记录,结点的值为该记录在表中的位置。通常称这个描述折半查找过程的二叉树为折半查找判定树,简称判定树。
二叉排序树(也称二叉查找树):或者是一棵空的二叉树,或者是具有下列性质的二叉树:
⑴ 若它的左子树不空,则左子树上所有结点的值均小于根结点的值;
⑵ 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;
⑶ 它的左右子树也都是二叉排序树。
若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。
二叉排序树的删除算法——伪代码
1. 若结点p是叶子,则直接删除结点p;
2. 若结点p只有左子树,则只需重接p的左子树;
    若结点p只有右子树,则只需重接p的右子树;
3. 若结点p的左右子树均不空,则
   3.1 查找结点p的右子树上的最左下结点s及其双亲结点par;
   3.2 将结点s数据域替换到被删结点p的数据域;
   3.3 若结点p的右孩子无左子树,
         则将s的右子树接到par的右子树上;
         否则,将s的右子树接到结点par的左子树上;
   3.4 删除结点s。
二叉排序树的查找在二叉排序树中查找给定值k的过程是:
⑴ 若root是空树,则查找失败;
⑵ 若k=root->data,则查找成功;否则
⑶ 若k<root->data,则在root的左子树上查找;否则
⑷ 在root的右子树上查找。
     上述过程一直持续到k被找到或者待查找的子树为空,如果待查找的子树为空,则查找失败。
二叉排序树的查找效率在于只需查找二个子树之一。平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:
⑴ 根结点的左子树和右子树的深度最多相差1;
⑵ 根结点的左子树和右子树也都是平衡二叉树。 平衡因子:结点的平衡因子是该结点的左子树的深度与右子树的深度之差。
最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因子的绝对值大于1的结点为根的子树。
构造平衡二叉树的基本思想:每插入一个结点,
(1)从插入结点开始向上计算各结点的平衡因子,如果某结点平衡因子的绝对值超过1,则说明插入操作破坏了二叉排序树的平衡性,需要进行平衡调整;否则继续执行插入操作。
(2)如果二叉排序树不平衡,则找出最小不平衡子树的根结点,根据新插入结点与最小不平衡子树根结点之间的关系判断调整类型。
(3)根据调整类型进行相应的调整,使之成为新的平衡子树。
散列表的查找技术:
散列的基本思想:在记录的存储地址和它的关键码之间建立一个确定的对应关系。这样,不经过比较,一次读取就能得到所查元素的查找方法。散列表:采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表。散列函数:将关键码映射为散列表中适当存储位置的函数。散列地址:由散列函数所得的存储地址 。
设计散列函数一般应遵循以下原则:
⑴ 计算简单。散列函数不应该有很大的计算量,否则会降低查找效率。
⑵ 函数值即散列地址分布均匀。函数值要尽量均匀散布在地址空间,这样才能保证存储空间的有效利用并减少冲突。冲突:对于两个不同关键码ki≠kj,有H(ki)=H(kj),即两个不同的记录需要存放在同一个存储位置,ki和kj相对于H称做同义词。
处理冲突的方法——拉链法(链地址法)
基本思想:将所有散列地址相同的记录,即所有同义词记录存储在一个单链表中(称为同义词子表),在散列表中存储的是所有同义词子表的头指针。用拉链法处理冲突构造的散列表叫做开散列表。开散列表不会出现堆积现象。设n个记录存储在长度为m的散列表中,则同义词子表的平均长度为n / m 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值