数据结构学习笔记——查找

查找知识整理

一、查找的基本概念

1、定义:给定关键字k,在n个记录中找到等于k的关键字

2、基本操作:比较

3、分析查找算法优劣的方法ASL:算出:每个关键字取到的概率pi(一般取1/n)* 每个关键字查找到需要比较的次数,再求和

二、基本查找方法

1、顺序查找:for循环遍历再比较

2、折半查找法:

1)前提:线性表有序

2)查找步骤:① 确定中点位置mid=(low+high)/ 2

                          ② 与R[mid]比较缩小比较范围 

3)查找过程表示:by二叉树,又叫做“折半查找判定树”

4)掌握折半查找判定数的的建立:不断求mid,区分左右子树的过程

      ASL的求法:各个关键字查找到的次数/查找不到的次数(不要算上空指针)

三、散列表

core:根据给定的关键字计算出关键字在表中的地址

1、散列表的建立方法:除留余数法H(key)= key mod p

                                          [p一般选择小于表长m的最大素数]

2、冲突的解决

1)何为冲突:key1=/=key2,但是hash(key1)= hash(key2)

2)解决方法:①线性探查法(即从发生冲突的地址开始,依次探查d的下一个地址)——弊端:容易产生堆积

②链地址法:算出地址为i后,将关键字插在地址为i的表尾

3、会计算查找成功和查找不成功的ASL 

5、装填因子a:1)关系到hash表平均查找长度

   2)装填因子=关键字个数和表长度的比值

                             3)各冲突解决方法所对应装填因子的变化趋势

线性探查法:查找成功、查找失败的平均查找长度都随a越大而越长

平方探查法:查找失败随a越大而越大

链地址法:查找成功的平均长度随a增大而减少,查找失败的平均查找长度随a增大而增大

例题

关键字序列{7,4,1,14,100,30,5,9,20,134}

见散列表、消除冲突、计算查找成功和查找不成功的ASL

四、二叉排序树、平衡二叉树

1、二叉排序树

1)定义:一般未说明,就是左小右大

2)存储结构,date,lchild,rchild

3)基本算法

①查找算法 :类似折中查找算法

②插入关键字算法

③ 二叉树构造算法

④删除操作的手工操作过程

第一种情况:叶子结点

第二种情况:只有左子树或只有右子树

第三种情况:删除的p结点既有左子树又有右子树,从p的右子树根结点的左指针一直往左走,case1,若是叶子结点直接替换,如下图

 

case2,若是非叶子结点,替换后,转换到第二种情况,如下图

 

2、平衡二叉树AVL树

1)定义:首先是一种二叉排序树,左右子树的高度之差不超过1

                  (因发现二叉树的树越矮查找效率越高)

      判定:若一棵二叉排序树中每个结点`的平衡因子只取0,1,-1;即为平

                 衡二叉树[平衡因子的概念:结点左子树高度减去右子树高度]

2)平衡二叉树的建立

同二叉排序树的建立,唯独不同的是每插一个关键字,都要看新的关键字是否会使原二叉树失去平衡,即树中平衡因子的绝对值大于1,若大于1就要进行平衡调整

3)平衡调整是重点

where:调整的是最小不平衡子树,即距离插入结点最近,且平衡因子大于1的结点作为根的子树

how:4种情况,RR、LL、RL、LR

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值