- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* (2)RR型:做左单旋转调整 B h a h E c D h 0 -1 x B h a E c D h h+1 -2 -1 x E h+1 c D a B h+1 0 0 a.插入前 b.插入后,调整前 c.调整后 【调整策略】 调整策略:对失衡的子树做左旋转,即将结点c做为新的根结点,结点a作为结点c的左孩子,a的左子树B不变,将c的左子树D做为a的右子树,c的右子树E不变。调整后的二叉树如上图c所示。各平衡且仍是排序树。 * * (3)LR型:做先左后右双向旋转调整 右图为插入前的子树,根结点a的左子树比右子树高度高1,待插入结点x将插入到结点b的右子树上,并使结点b的右子树高度增1,从而使结点a的平衡因子的绝对值大于1,导致结点a为根的子树平衡被破坏。 h D b h-1 G c F h-1 h E a 0 0 1 * 2 h-1 G c h E a D h b F x h 0 2 h D b h-1 G c F h-1 h E a x 1 2 -1 h-1 G h E a c D h b F x h 0 0 -1 1型: a.插入后,调整前 b.先左旋转 c.再右旋转 * 2型: d.插入后调整前 e.先左旋转 f.再右旋转 h-1 c G h E a D h b F x h 0 0 1 h-1 G c h E a D h b F x h 1 1 2 h D b h-1 G c F h-1 h E a x 2 -1 -1 调整策略:无论将结点x插入到c的左子树还是右子树,只要使得c的高度增加,调整的方法都是一样的。先对以b为根的子树进行RR型调整,然后再对以a为根的树进行LL型调整。 * * (4) RL型:做先右后左双向旋转 这种失衡是因为在失衡结点的右孩子的左子树上插入结点造成的。 b h D 1 E h-1 x a c -2 1 F h-1 h-1 G h b h D -1 E h-1 x a c -1 G h F h-1 h-1 -2 h D E h-1 x G h F h-1 h-1 b -1 a c 0 0 a.插入后,调整前 b.先右旋转 c.再左旋转 * * 6.4 散列表查找 散列是一种存储策略,散列表也叫哈希(hash)表、杂凑表,是基于散列存储策略建立的查找表。基本思想是确定一个函数,求得每个关键码相应的函数值并以此作为存储地址,直接将该数据元素存入到相应的地址空间去,因此它的查找效率很高。 * 6.4.1 散列表 哈希表、哈希方法、哈希函数: 按照一定规则确定关键码的某个函数f(key),依该函数求得每个数据元素关键码的函数值,依此函数值作为该元素的存储位置,并按此存放在查找表中,按这个思想构造的查找表称为散列表(哈希表)。 查找时,由同一个函数对给定值kx计算地址,将kx与计算出的地址单元中数据元素的关键码进行比较,确定查找是否成功,这就是哈希方法(散列法)。 散列方法中使用的转换函数称为散列函数(哈希函数)。 6.4 散列表查找 * 【例6-4】11个元素的查找表其关键码分别为: 18,27,1,20,22,6,10,13,41,15,25 选取关键码与元素位置间的函数为:f(key)=key mod 11 0 1 2 3 4 5 6 7 8 9 10 22 1 13 25 15 27 6 18 41 20 10 (2)查找时,对给定值kx依然通过这个函数计算出地址,再将kx与该地址单元中元素的关键码比较,若相等,查找成功。 (1) 通过这个函数对11个元素建立查找表如下: 18 27 1 20 22 6 10 13 41 15 25 7 5 1 9 0 6 10 2 8 4 3 * 哈希方法需要解决以下两个问题: 1. 构造好的哈希函数 (1)所选函数尽可能简单,以便提高转换速度。 (2)所选函数对关键码计算出的地址,应在哈希地址集中大致均匀分布,以减少空间浪费。 2. 制定解决冲突的方案 * 6.4.2 常用的哈希函数 1. 直接定址法(线性函数) Hash(key)=a·key+b (a、b为常数) 即取关键码的某个线性函数值为哈希地址,这类函数是一一对应函数,不会产生冲突,但要求地址空间与关键码涉及到的地址空间大小相同,因此,对于较大的关键码分布范围大的不适用。 * 2. 除留余数法 Hash(key)=key
文档评论(0)