1、数据结构第九章查找第九章第九章 查找查找 查找表查找表:由同一类型的数据元素(记录)组成的集合。记作:ST=a1,a2,.,an学 号姓 名性别数学外语200041刘大海 男 80 75200042王 伟 男 90 83 200046吴晓英 女 82 88200048 王 伟 女 80 90.序号1234 n 关键字关键字:可以标识一个记录的数据项 主关键字主关键字:可以唯一地标识一个记录的数据项 次关键字次关键字:可以识别若干记录的数据项学生成绩表 数据项1(主关键字)数据项2数据项5查找表的操作:生成查找表 查找元素(记录)x在是否在表ST中 查找元素(记录)x的属性 插入新元素(记录)x
2、 删除元素(记录)x .查找查找-根据给定的某个关键字值,在查找表中确定一个其关键字等于给定值的记录或数据元素。设k为给定的一个关键字值,R1.n为n个记录的表,若存在Ri.key=k,1in,称查找成功查找成功;否则称查找失败查找失败。静态查找静态查找:查询某个特定的元素,检查某个特定的数据元素的属性,不插入新元素或删除元素(记录)。动态查找动态查找:在查找过程中,同时插入查找表中不存在的数据元素(记录)。查找表的类型及其查找方法 (1)静态查找表静态查找表 顺序表,用顺序查找法 线性链表,用顺序查找法 有序的顺序表,用:折半查找法;*斐班那契查找法;插值查找法;索引顺序表/分块表,用分块查
3、找法。(2)动态查找表动态查找表 二叉排序树,平衡二叉树(AVL树)*B树,B+树,键树 (3)哈希哈希(Hash)Hash)表表平均查找长度平均查找长度-查找一个记录时比较关键字次数的平均值。n ASL=PiCi i=1 Pi-查找ri的概率 Ci-查找ri所需比较关键字的次数2041刘大海.2042王 伟.2046吴晓英.0123maxsizeelem key name .监视哨监视哨9.19.1 静态查找表静态查找表顺序表与顺序查找法顺序表与顺序查找法 1.顺序表的描述 length例1 元素类型为记录(结构)#define maxsize 100/表长100 typedef struc
4、t node keytype key;/关键字类型 char name6;/姓名 ./其它 ElemType;typedef struct ElemType elemmaxsize+1;/maxsize+1个记录,/elem0为监视哨 int length;SSTable;SSTable ST1,ST2;121030202515/60 1 2 3 4 5 6 maxsize length监视哨例2 元素类型为整型#define maxsize 100/表长100 typedef int ElemType;typedef struct ElemType elemmaxsize+1;/maxsiz
5、e+1个记录,/elem0为监视哨 int length;SSTable;SSTable ST1,ST2;2.顺序查找法(sequential search)算法设计 算法算法1 1:假定不使用监视哨假定不使用监视哨elem0elem0 基本思想:将关键字k依次与记录的关键字:elem n.key,elemn-1.key,.,elem1.key 比较。如果找到一个记录elemi,有:elemi.keyk(1in),则查找成功,停止比较,返回记录的下标i;否则,查找失败,返回0。输入:查找表ST,查找条件(关键字)k输出:成功时:记录序号,失败时:0int sequsearch(SSTable
6、ST,keytype k)int i=ST.length;/从第n个记录开始查找 while(i=1&k!=ST.elemi.key)i-;/继续扫描 if(i)printf(”successn”);/查找成功 else printf(”failn”);/查找失败 return i;/返回记录的下标i 算法算法2 2:假定使用监视哨假定使用监视哨elem0elem0 基本思想:先将关键字k存入elem0.key,再将k依次与elemn.key,.,elem1.key,elem0.key 进行比较。如果找到一个记录,有:k=elem i.key,(0in),则停止比较。如果 i0,则查找成功;否
7、则,查找失败。输入:查找表ST,查找条件(关键字)k输出:成功时:记录序号,失败时:0int sequsearch(SSTable ST,keytype k)int i=ST.length;/从第n个记录开始查找 ST.elem0.key=k;/k填入ST.elem0.key while(k!=ST.elemi.key)i-;/继续扫描 return i;/返回记录的下标i 因5S做得不好而引发的设备故障,在作业现场是举不胜举,如润滑的堵塞、因灰尘导致马达烧坏、光电管脏污产生错误动作。5塑造企业文化24.2 招标代理机构可以根据本须知第9条规定,通过修改招标文件适当推迟投标截止时间。在这种情况
8、下,招标代理机构和投标人受投标截止时间约束的所有权利和义务将延长至新的截止期。2.9对容器的检验(查)人员、操作人员进行安全技术教育和技术考核工作。五、压力容器、压力管道使用管理及定期检验制度2、增加下级:如果您准备增加某个级别的下级资料,应先在左边树状窗口中选择该级,然后再单击【+】;20.5 本合同终止时双方未了的债权和债务不受合同中止的影响,债务人应继续偿还未了的债务。22.6 未按照规定签署及密封的投标文件将被视为非实质性响应投标而予以拒绝。【自检】3 查找算法性能分析:对n个记录的表,所需比较关键字的次数 只考虑查找成功:最少为1,最多为n 假定每个记录的查找概率相等,即 P1=P2
9、=.=Pn=1/n ASL=(n+1)/2 niiiCP1niiCn11)1.)1(1nnn 考虑查找失败:使用监视哨使用监视哨elem0,elem0,为 n+1n+1 不使用监视哨不使用监视哨elem0,elem0,为 n n 假定查找成功和失败的机会相同,对每个记录的查找概率相等,Pi=1/(2*n),则 1 n n+1 n+1 n+1 ASL=-Ci+-=-+-=3(n+1)/43(n+1)/4 2n i=1 2 4 2 1.有序表 elem1.keyelem2.key.elemn.key2.折半查找(binary search,对半查找,二分查找)假定 k=10 51012182025
10、30401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid hig low mid hig low=1,hig=8low=1,hig=8mid=(low+hig)/2=4mid=(low+hig)/2=4 5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid higlow mid hig low=1,hig=3low=1,hig=3mid=(low+hig)/2=2mid=(low+hig)/2=2 假定假定k=40k=40 5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8
11、 low mid hig low mid hig low=1,hig=8low=1,hig=8mid=(low+hig)/2=4mid=(low+hig)/2=4 5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid hig low mid hig low=5,hig=8low=5,hig=8mid=(low+hig)/2=6mid=(low+hig)/2=6 5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid higlow mid hig low=7,hig=8low=7,hig=8
12、mid=(low+hig)/2=7mid=(low+hig)/2=7 假定假定 k=40k=40(续)(续)5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid higlow mid hig low=8,hig=8low=8,hig=8mid=(low+hig)/2=8mid=(low+hig)/2=8 5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid higlow mid hig low=1,hig=8low=1,hig=8mid=(low+hig)/2=4mid=(low+hig
13、)/2=4 5101218202530401 2 3 4 5 6 7 8 low mid hig low mid hig low=5,hig=8low=5,hig=8mid=(low+hig)/2=6mid=(low+hig)/2=6假定假定 k=22k=22 5101218202530401 2 3 4 5 6 7 81 2 3 4 5 6 7 8 low mid higlow mid hig low=5,hig=5low=5,hig=5mid=(low+hig)/2=5mid=(low+hig)/2=5 假定假定 k=22k=22(续)(续)5101218202530401 2 3 4 5
14、 6 7 8 mid hig lowmid hig low mid=5 mid=5 low=6,hig=5low=6,hig=5 5101218202530401 2 3 4 5 6 7 8 mid hig lowmid hig low mid=5 mid=5 low=6,hig=5low=6,hig=5 higlow,higlow,查找失败查找失败3 3 折半查找算法折半查找算法1 1 int binsrch(SSTable ST,keytype k)int low,mid,hig;low=1;hig=ST.length;while(low=hig)mid=(low+hig)/2;/计算中间
15、记录的地址 if(kST.elemmid.key)hig=mid-1;/查左子表 else if(k=ST.elemmid.key)break;/查找成功,退出循环 else low=mid+1;/查右子表 if(ST.elemmid.key=k)printf(successn”);/查找成功 return mid;else printf(failn”);/查找失败 return 0;折半查找算法2 int binsrch(SSTable ST,keytype k)int low,mid,hig;low=1;hig=ST.length;while(low=high)mid=(low+high)
16、/2;if(kdata=x;/生成并插入结点x t-lchild=t-rchild=NULL;/为叶子结点 else if(x.keydata.key)t-lchild=intree(t-lchild,x);/插入左子树 else t-rchild=intree(t-rchild,x);/插入右子树 return t;(5)二叉排序树的查找算法查找算法 (返回值返回值 失败:失败:NULL NULL 成功:非成功:非NULLNULL,结点指针),结点指针)a)递归算法递归算法 struct node*search_tr(struct node*t,keytype k)if(t=NULL)ret
17、urn NULL;/查找失败 else if(k=t-data.key)return t;/查找成功 else if(kdata.key)return search_tr(t-lchild,k);/查左子树 else return search_tr(t-rchild,k);/查右子树 b)非递归算法非递归算法struct node*search_tree(struct node*t,keytype k)while(t!=NULL)if(k=t-data.key)return t;/查找成功 else if(kdata.key)t=t-lchild;/查左子树 else t=t-rchild;
18、/查右子树 return t;/查找失败 (6)二叉排序树的删除n在二叉排序树中删除一个结点时,必须将因删除结点而断开的二叉链表重新链接起来,同时确保二叉排序树的性质不会失去。n为保证在删除节点后二叉排序树的性质不会丢失:只需将其双亲结点指向它的指针置空,再释放它即可。可以用被删节点的右子树(或左子树)顶替它的位置,再释放它。可以在它的右子树中寻找中序下的第一个结点(关键值最小),用它的值填补到被删结点中,再来处理这个结点的删除问题。5378651787092345删除45缺右子树,用左子树顶替53786517870923_站在顾客的立场,一切以人为本,以诚待客,为顾客排忧解难,提供各类专项、
19、特约服务;超越顾客期望,给顾客意外的惊喜。(15)在本合同期限内,指定并保持一名业主代表,全权负责与承包方的联络。C、乡镇利用中心药店,包装、宣传(宣传、包装由中心药店人员完成布货,收款由OTC代表负责)。4人事政策中国有句古诗“宝剑锋从磨砺出,梅花香自苦寒来”。因此,企业利用海豚理论来对员工进行恰当的激励,用象征性的方式鼓励员工向上发展。发展并不是口头的表达,而需要好好研究,下苦功夫学习。服务也是一样,只有不断地演练与学习,才能更成熟、更精致。1、团(总)支部每年向企业团委推荐名额不少于两名,但不超过青年人数的5%。(1)使用伪造、变造的许可证件;35.3 接受最终审查的中标候选人,必须如实
20、回答和受理有关询问或考察,并提供所需的有关资料。26.2 根据现行税法规定向卖方征收的与本合同有关的一切税费均由卖方负责。2、优秀团干部的推荐,由上级团委召开团委委员会议,拟出推荐入选,在征得团干部所在企业党组织的同意后,填写重庆机电控股(集团)公司优秀青年人才上岗工作推荐表;8853788817940923删除78缺左子树,用右子树顶替53948817092353788117940945删除78在右子树上找中序下第一个结点填补2365538188179409452365(7)查找性能分析 最好情况最好情况(为满二叉树)n+1 ASL=-log2(n+1)-1=O(log2 n)n 最坏情况最
21、坏情况(为单枝树):ASL=(1+2+.+n)/n=(n+1)/2 平均值平均值:ASLO(log2 n)5828493045581519101811488697964756560满二叉树满二叉树单枝树单枝树ASL=(15+1)/15*log2(15+1)-13.3 ASL=(1+2+3+4)/4=2.52.2.平衡二叉树平衡二叉树(高度平衡二叉树)高度平衡二叉树)AVL树:由和提出。结点的平衡因子:结点的左右子树的深度之差。平衡二叉树:任意结点的平衡因子的绝对值 小于等于1的二叉树。T1 T2 T3 T4 T5 0102-1000-112100-2(1)AVL树的定义(2)AVL树的存储结构
22、:typedef int DataType;/结点数据类型typedef struct node /AVL树结点定义 DataType data;/结点数据域 int balance;/结点平衡因子域 struct node*leftChild,*rightChild;/结点左、右子树指针域 AVLNode;typedef AVLNode*AVLTree;/AVL树n如果在一棵平衡的二叉搜索树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡化。n平衡化旋转有两类:u 单旋转(左旋和右旋)u 双旋转(左平衡和右平衡)n每插入一个新结点时,AVL 树中相关结点的平衡状态会发生改变。因
23、此,在插入一 个新结点后,需要从插入位置沿通向根的路径回溯,检查各结点的平衡因子。(3)平衡化旋转n如果在某一结点发现高度不平衡,停止回溯。从发生不平衡的结点起,沿刚才回溯的路径取直接下两层的结点。n如果这三个结点处于一条直线上,则采用单旋转进行平衡化。单旋转可按其方向分为左单旋转和右单旋转,其中一个是另一 个的镜像,其方向与不平衡的形状相关。n如果这三个结点处于一条折线上,则采用双旋转进行平衡化。双旋转分为先左后右和先右后左两类。n在子树E中插入新结点,该子树高度增1导致结点A的平衡因子变成-2,出现不平衡。n沿插入路径检查三个结点A、C和E。它们处于方向为“”的直线上,需做左单旋转。n以结
24、点C为旋转轴,让结点A逆时针旋转。(a)左单旋转(RotateLeft)hhhACEBDhhh+1BACEDhhh+1CEABDn在子树D中插入新结点,该子树高度增1导致结点A的平衡因子变成+2,出现不平衡。n沿插入路径检查三个结点A、B和D。它们处于方向为“/”的直线上,需做右单旋转。n以结点B为旋转轴,让结点A顺时针旋转。(b)右单旋转(RotateRight)hhhACEBDhh+1BACEDhhh+1CEABDhn在子树F或G中插入新结点,该子树的高度增1。结点A的平衡因子变为+2,发生了不平衡。(c)先左后右双旋转(RotationLeftRight)插入插入hhACEDh-1hhA
25、hBCEDBFGFGh-1h-1插入插入hhACEDh-1hhAhBCEDBFGFGn从结点A起沿插入路径选取3个结点A、B和E,它们位于一条形如“”的折线上,因此需要进行先左后右的双旋转。n以结点E为旋转轴,将结点B逆时针旋转。h-1h-1hhACEDhhhAhBCEDBFGFGh-1h-1n再以结点E为旋转轴,将结点A顺时针旋转。n右左双旋转是左右双旋转的镜像n在子树F或G中插入新结点,该子树高度增1,A的平衡因子变为+2,发生了不平衡。(d)先右后左双旋转(RotationRightLeft)hhACEDBFGhhACEhBFGDh-1h-1h-1n从结点A起沿插入路径选取3个结点A、C
26、和D,它们位于一条形如“”的折线上,因此需要进行先右后左的双旋转。n以结点D为旋转轴,将结点C顺时针旋转。hhACEDBFGhhACEhBFGDh-1h-1h-1n再以结点D为旋转轴,将结点A逆时针旋转。hhACEhhhAhBCEDBFGFGDh-1h-1n在向一棵本来是高度平衡的AVL树中插入一个新结点时,如果树中某个结点的平衡因子的绝对值|balance|1,则出现了不平衡,需要做平衡化处理。n算法从一棵空树开始,通过输入一系列对象关键码,逐步建立AVL树。在插入新结点时使用平衡旋转方法进行平衡化处理。(3)AVL树的插入1616输入关键码序列为 16,3,7,11,9,26,18,14,
27、15,插入和调整过程如下。3163316311316161193169311269161118183163167391826117326161199716147112626911151831816731171491615112626149从空树开始的建树过程从空树开始的建树过程 平衡二叉树、二叉排序树、平衡二叉排序树的区别:平衡二叉树、二叉排序树、平衡二叉排序树的区别:4850351020414560平衡二叉排序树6870651020414580平衡二叉树68807510414585二叉排序树-2-1-101-1-11-110000000000000静态和动态查找表查找方法 静态查找表和动态查
28、找表通过比较关键字进行查找:(1)顺序表,对数据元素的存储一般有两种形式:(a)是按到来次序连续存放,查找时顺序比较查找;(b)按关键字的相对关系整理后以递增或递减形式连续存放,则查找时使用顺序法或二分法比较查找。(2)二叉排序树,从根开始进行比较查找。不足:查找时无法根据关键字的值估计数据元素可能在的位置。9.3 哈希(Hash)表和哈希法 存储数据元素时,利用一个Hash函数根据数据元素的关键字计算出该数据元素的存储位置,查找时,也是根据给定的数据元素的关键字计算出该数据元素可能存储位置,这样一来,存储和查找的效率相当高,哈希表也称为散列表,其数据元素的存储一般是不连续的。通过Hash函数
29、计算出的地址称为哈希地址或散列地址。HashHash函数函数实现的是将一组关键字映象到一个有限的地址区间上,理想的情况是不同的关键字得到不同的地址。设K1和K2为关键字,若K1K2,H(K1)=H(K2),则称 K1,K2为同义词同义词,K2与K1发生了冲突冲突例 设 H(k)=k%17 k1=5 k2=22 H(5)=5%17=5 H(22)=22%17=5 H(5)=H(22)=5 5和22是同义词,5和22发生冲突采用哈希表进行存储和查找需要着重考虑两个问题:(a)选择一个好的哈希(散列)函数;(b)选择一种解决冲突(碰撞)的方法。例1 人口统计表 1 10.5 2 12.6 3 11.
30、0 4 20.8.150.序号(地址)年 龄 人 数(万)1 2 3 4 150H(key)=key=H(key)=key=地址地址H(H(年龄)年龄)=年龄年龄 key构造哈希函数的方法构造哈希函数的方法 1.直接定址法直接定址法 取关键字或关键字的某个线性函数值为哈希地址 H(key)=key H(key)=a.key+b例2 学生成绩表200041刘大海 男 80 75200042王 伟 男 90 83 200043吴晓英 女 82 88200044 王 伟 女 80 90.1234 nkey 序号(地址)学 号 姓 名 性别 数学 外语H(key)=key-200040=H(key)=
31、key-200040=地址地址H(H(学号学号)=)=学号学号-200040-200040 例3 标识符表 ABC ABC CAD CAD DAT DAT FOX FOX YAB YAB ZOO ZOO1234 562526序号 标识符(key)H(key)=keykey的第一个字母在的第一个字母在 字母表中的序号字母表中的序号key =ABC CAD DAT FOX YAB ZOO H(key)=1 3 4 6 25 26 2.除留余数法除留余数法 设哈希表HT0.m-1的表长为m,哈希地址为key除以p所的的余数:H(key)=key MOD pH(key)=key MOD p /PASC
32、AL语言 H(key)=key%pH(key)=key%p /C语言 其中:MOD,%为“取模”或“求余”p=m p=m,p p为接近为接近m m的质数的质数(素数素数),如:3,5,7,11,13,17,19,23,29,31,37.或不包含小于或不包含小于2020的质因子的合数的质因子的合数,如:713(=23*31)例1 设 m=130,取p=127,H(key)=key%127H(key)=key%127 0 1 2 .129例2 设 m=256 取 p=251 H(key)=key%251H(key)=key%2510 1 2 .255例 设哈希表的地址范围为020,哈希函数为 H(
33、K)=K%19 输入关键字序列:39,22,21,37,36,38,19,解决冲突的方法为线性探测再散列线性探测再散列(哈希哈希),构造哈希表HT0.20。关键字K H(K)=K%19 39 39%19=1 22 22%19=3 21 21%19=2 37 37%19=18 36 36%19=17 38 38%19=0 19 19%19=01919与与3838冲突冲突,再与再与39,21,39,21,2222冲突冲突,存入HT4 0 1 2 3 4 5 17181920HT0.20HT0.2039222137383619 38 39 21 22 19 55 36 37 17 56再输入17,5
34、6,55 17%19=171717与与3636冲突冲突,再与再与3737冲突冲突,存入HT19。56%19=185656与与3737冲突冲突,再与再与1717冲突冲突,存入HT20。55%19=175555与与3636冲突冲突,再与再与37,17,5637,17,56冲突冲突,再与再与38,39,21,22,1938,39,21,22,19冲突冲突,存入HT5。对于H(k)=k%19,所有的19a+b为同义词,0b19 如:5,24,43,62,81,.0 1 2 3 4 517181920HT0.20HT0.20keykey3.平方取中法平方取中法-取关键字平方后的中间某几位为哈希地址,即:
35、H(k)=取k2的中间某几位数字例.设哈希表为HT0.99,哈希函数为:H(K)=H(K)=取取k k2 2的中间的中间2 2位数位数,输入关键字序列:39,21,6,36,38,13,用线性探测再散列法解决冲突,构造HT0.99。K k2 H(K)39 1521 52 21 0441 44 6 0036 03 36 1296 29 38 1444 44 13 0169 16 6 6 13 13 36 36 21 21 38 38 39 39 0 3 162944455299keykey4.折叠法折叠法 将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为哈希地址。(1)边界折叠法边界折
36、叠法 设表地址范围为0999 k1=056439527056439527 650+439+725=1814 650+439+725=1814 H(k1)=814 H(k1)=814 k2=123486790123486790 321+486+097=907 321+486+097=907 H(k2)=907 H(k2)=907 k3=300600007300600007 003+600+700=1303 003+600+700=1303 H(k2)=303 H(k2)=303300600007056439527123486790 0 1 303814907999HT0.999HT0.9994.
37、折叠法折叠法 将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为哈希地址。(2)移位折叠法移位折叠法(移位法移位法)设表地址范围为0999 k1=056439527056439527 056+439+527=1022 056+439+527=1022 H(k1)=022 H(k1)=022 k2=123486790123486790 123+486+790=1399 123+486+790=1399 H(k2)=399 H(k2)=399 k3=300600007300600007 300+600+007=907 300+600+007=907 H(k2)=907 H(k2)=9070
38、56439527123486790300600007 0 1 22399907999HT0.999HT0.9995.数字分析法数字分析法 设哈希表中可能出现的关键字都是事先知道的,则可取关键字的若干分布均匀的位组成哈希地址。若干分布均匀的位组成哈希地址。k H(k)902 2006067 206 904 4431313 431901 1345456 145 904 4432326 432 905 5324243 524906 6179791 679901345690200679044313904432690532439061791145206431 432524679HT0.999HT0.99
39、96.随机数法随机数法 H(key)=random(key)random(key)为产生伪随机数的函数7.灵活构造哈希函数灵活构造哈希函数例.设哈希表为HT0.40HT0.40,哈希函数为:H(K)=H(K)=取取k k2 2的中间的中间2 2位数位数*40/9940/99 其中40/99将其0099压缩到0040之内,输入关键字序列:39,21,6,36,38,13,用线性探测再散列线性探测再散列法解决冲突。K k2 H(K)39 1521 52*40/99=21 21 0441 44*40/99=17 6 0036 03*40/99=1 77 5929 92*40/99=37 38 144
40、4 44*40/99=17 13 0169 16*40/99=6 6 13 21 38 39 77 0 0 1 3 617 18 21374040keykey1.开放地址法开放地址法(开式寻址法开式寻址法)假定记录Ri,RX的关键字Ki,KX为同义词,散列地址为q q,Ri已存入HT0.m-1中的HTq中,则RX 存入HT中的某个空位上。依次在地址:q+1,q+2,.,m-1,0,1,.,q-1q+1,q+2,.,m-1,0,1,.,q-1 中寻找一个空位,叫做线性探测再散列。(1)线性探测再散列线性探测再散列 Ki.HT0.m-1 0 1 q-1 qq+1m-1RiRX课堂练习:设 H(k)
41、=k的首字母在字母表中的序号的首字母在字母表中的序号,用线性探测再散列法解决冲突,依次用下列关键字,构造哈希表 HT0.28。k H(k)A 1 DEC 4 ZMN 26 DAB 4 ZE 26 ANT 1 YY 25 ZOO 26 CAD 3 YES 25 ZY 26 LL 12 DE 4 0 1 2 3 4 5 6 7 121325262728HT0.28HT0.28 1 2 3 4 5 6 7 8 910111213例 设 H(k)=k k的首字母在字母表中的序号的首字母在字母表中的序号,用线性探测再散列 法解决冲突,依次用下列关键字,构造哈希表HT0.28。YES A ANT CAD
42、DEC DAB ZY DE LL YY ZMN ZE Z00 k H(k)k H(k)1 A 11 A 1 2 DEC 4 2 DEC 4 3 ZMN 26 3 ZMN 26 4 DAB 4 4 DAB 4 5 ZE 26 5 ZE 26 6 ANT 1 6 ANT 1 7 YY 25 7 YY 25 8 ZOO 26 8 ZOO 26 9 CAD 3 9 CAD 310 YES 2510 YES 2511 ZY 2611 ZY 2612 LL 12 12 LL 12 13 DE 4 13 DE 4 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 121225252626272
43、72828HT0.28HT0.28(2)二次探测再散列二次探测再散列 假定记录Ri和Rj的关键字Ki和Kj为同义词,散列地址为q,Ri已存入HT0.m-1中的HTq中。若依次在地址q+1q+12 2,q-1,q-12 2,q+2,q+22 2,q-2,q-22 2,.,q+i,.,q+i2 2,q-i,q-i2 2,.,.中寻找一个空位,叫做二次探测再散列。例:设记录X和A为同义词,散列地址为50,二次探测再散列的地址序列为:51,49,54,46,59,41,66,34,75,.HT0.99G GE EC C A A B BD DF F0 34 41 46 49 50 51 54 59 66
44、 75 99XXXXXXXXGE EC C A A B BD DF FX X0 34 41 46 49 50 51 54 59 66 75 992.2.链地址法链地址法 将关键字为同义词的所有记录存入同一链表中。(表头插入)例 设设H(k)=kH(k)=k的首字母在字母表中的序号的首字母在字母表中的序号,用下列关键字造哈希表 HT1.26 k H(k)A 1 DEC 4 ZMN 26 DAB 4 ZE 26 ANT 1 YY 25 ZOO 26 CAD 3 YES 25 ZY 26 LL 12 DE 4 1 2 3 4 5 6 7 8 910111213HT1.26ZEZOOZYZMN DEY
45、ESYYCAD ANT ADABDEC LL 1 2 3 41225262.链地址法链地址法 将关键字为同义词的所有记录存入同一链表中。(表尾插入)例 设H(k)=kH(k)=k的首字母在字母表中的序号的首字母在字母表中的序号,用下列关键字造哈希表 HT1.26 k H(k)A 1 DEC 4 ZMN 26 DAB 4 ZE 26 ANT 1 YY 25 ZOO 26 CAD 3 YES 25 ZY 26 LL 12 DE 4 1 2 3 4 5 6 7 8 910111213HT1.26ZOOZEZMNZYDECYYYES CAD A ANT DABDELL 1 2 3 41225263.建
46、立公共溢出区建立公共溢出区 将发生冲突的所有记录存入一个公共溢出表公共溢出表OT0.vOT0.v中。例 设H(k)=kH(k)=k的首字母在字母表中的序号的首字母在字母表中的序号,用下列关键字生成基本表HT1.26和溢出表OT0.50 k H(k)1 A 1 2 DEC 4 3 ZMN 26 4 DAB 4 5 ZE 26 6 ANT 1 7 YY 25 8 ZOO 26 9 CAD 310 YES 2511 ZY 2612 LL 12 13 DE 4 ACADDECLLYYZMNHT1.26 1 2 3 4122526DABZEANTZOOYESZYDEOT0.50 1 2 3 4 5 6
47、750 4.再哈希法再哈希法 发生冲突时,使用下一个哈希函数计算哈希地址:j1=H1(K)j1=H1(K);j2=H2(K)j2=H2(K);j3=H3(K)j3=H3(K);.哈希表的查找及其分析ZEZOOZYZMNDEYESYYCADANT ADABDECLL例1(链地址法链地址法)假定每个记录的查找概率相等,查找成功时的平均查找长度:ASL=(1+2+1+1+2+3+1+1+2+1+2+3+4)/13 =24/13 1.85例2(给定线性探测再散列得到的哈希表如右所示)假定每个记录的查找概率相等,查找成功时的平均查找长度.关键字关键字K H(K)K H(K)比较次数比较次数 YES 25
48、 5 A 1 1 ANT 1 2 CAD 3 1 DEC 4 1 DAB 4 2 ZY 26 10 DE 4 4 LL 12 1 YY 25 1 ZMN 26 1 ZE 26 2 Z00 26 3 合计 34 YES A ANT CAD DEC DAB ZY DE LL YY ZMN ZE Z00HT0.28 0 1 2 3 4 5 6 7 121325262728ASLsucc=34/132.62 YES A ANT CAD DEC DAB ZY DE LL YY ZMN ZE Z00HT0.28 0 1 2 3 4 5 6 7 121325262728ASLunsucc=108/28 3.857例2(续)(线性探测再散列)查找不成功时的平均查找长度.需统计不成功时比较次数H(K)比较次数 H(K)比较次数0 91 8 15 12 7 16 13 6 17 14 5 18 15 4 19 16 3 20 17 2 21 18 1 22 19 1 23 110 1 24 111 1 25 1312 2 26 12 1 27 11 128 10
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。