数据结构第9章2011.pptVIP

  • 1
  • 0
  • 约8.7千字
  • 约 52页
  • 2018-05-04 发布于四川
  • 举报
二叉排序树中删除结点算法: * CH.9 * 情况一:删除叶结点 二叉排序树中删除结点算法: 情况二:删除只有一个子树的分支结点 * CH.9 * 二叉排序树中删除结点算法: 情况三:删除有两个子树的分支结点 * CH.9 * 平衡二叉树 有关结论 在随机的情况下,二叉排序树的平均查找长度与log2n是等数量级的。 在相当多的情况下,二叉排序树经反复插入删除操作后,形态会“变坏”,特别是先后插入有序序列后,二叉排序树会蜕变成“单支树”,此时的平均查找长度与n是等数量级的。 优化二叉排序树的形态,可提高查找的时间效率。 丰满的二叉排序树和平衡的二叉排序树,是形态较好的排序树,其平均查找长度与log2n是等数量级的。 * CH.9 * 平衡二叉树 平衡二叉树(Balanced Binary Tree) 或者是一棵空树,或者具有下特性的二叉树: 它的左、右子树都是平衡树 且左、右子树的深度之差的绝对值不超过1,即平衡因子只能为:-1、0、1 平衡因子(BF:Balance Factor): 结点的左子树深度-右子树深度 平衡二叉排序树(BBST:Balanced Binary Sort Tree) 同时满足:平衡、排序的二叉树 * CH.9 * 平衡二叉树 丰满二叉排序树与平衡二叉排序树的比较 丰满二叉排序树的最大比较次数为log2n。 平衡二叉排序树的最大比较次数为3/2log2n 对丰满二叉排序树,当插入、删除结点后,要保持“丰满”较困难。 对平衡二叉排序树,当插入、删除结点使得二叉树不再是平衡二叉树时,可以动态地将它重新调整成平衡二叉树。 “平衡”比 “丰满”的维护工作较简单些 。 插入了一个结点后的平衡维护操作参见P235-。 * CH.9 * 9.2.2 B-树和B+树 有关要点 平衡二叉排序树是一种平衡的2路查找树。 B-树是一种平衡的多路查找树。 在频繁进行插入和删除操作时,B-树的平衡维护工作较平衡二叉排序树简单。 B+树是一种B-树的变型树 B+树更适用于文件系统中的索引和查找操作,曾用于一些数据库系统中。 * CH.9 * 9.2.3 键树(P247-) 基本概念 键树又称数字查找树(Digital Search Trees)。 它是一棵度≥2的树,树中每个结点包含组成关键字的符号。 若关键字为数值,则每个结点包含一个数位。 若关键字为单词,则每个结点包含一个字符。 键树适用于词法分析,例如,可用键树构建一个保留词的词法分析表,用于判断给定的单词是否为一个保留字。 * CH.9 * 9.3 哈希表 基本概念: 哈希(Hash)又称散列或杂凑,是一种重要的存储结构,也是一种常见的查找方法。 散列的基本思想是通过建立结点关键字K与结点的存储地址的联系,来快速求出结点地址,而不是通过与表中各结点关键字比较来确定具体位置和范围。 散列体现了“按内容访问”的思想。 * CH.9 * 9.3.1 什么是哈希表 哈希表比喻 假定某报告厅有100个座位,为方便查找入座的学生,现作如下规定: 学生座位的编号应与其学号的末两位相同,则学号为993605的学生应坐编号为05的座位,015427的学生应坐编号为27的座位。 上述规定就是一个哈希函数。由学生学号(关键字)就快速找到学生所在的座位(结点)。 如有两个不同班学生的学号末两位恰好相同,这就发生了所谓的“冲突”,此时可再按某一规则,按排在其他座位,来解决冲突。 一般情况下,如来听报告的学生少,则发生冲突的概率就较小,而学生多,则发生冲突的概率就较大。 * CH.9 * 9.3.1 什么是哈希表 哈希函数 将结点的关键字key作为自变量,按某种规则转换为该结点存储单元地址的函数,称为哈希函数或叫散列函数,记为H(key)。 对上例,学生的学号为关键字key,座位的编号相当于存储单元地址,H(key)= (key的末2位数字)。 哈希表: 通过哈希函数建立起来的线性表称为哈希表或叫散列表。 对上例,报告厅则为一个哈希表,根据H(key)很容易确定学生应入座的位置,以及根据学生学号在报告厅中可快速找到该学生。 * CH.9 * 9.3.1 什么是哈希表 哈希表及其查找 哈希的查找方法,其平均比较次数和表中所含结点的个数无关。 哈希查找的时间复杂度主要与构建的哈希函数和解决冲突的方法有关。 装填因子 设哈希表的空间大小为m,填入表中的结点数为n,则称α=n/m为哈希表的装填因子。 在一般情况下,哈希的空间必须比结点的集合大,此时虽然浪费了一定的空间,但换取的是查找效率。 * CH.9 * 9.3.2 哈希函数的构造方法 哈希函数的选取原则 理想情况 H(key)是关于Key一对一的函数,在查找时,只需根据散列函数对给定值进行某种运算,即可得到待查结点的存储位置。 实际情况 没有一个H(k

文档评论(0)

1亿VIP精品文档

相关文档