查找知识整理
一、查找的基本概念
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