- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]高级数据结构1
JYP 高级数据结构 代价分摊(1.5.4) 两个字符串的最长公共子序列(2.4.3) 机场模拟(2.9) 二叉树计数(4.9) 最小最大堆 (5.2) 5.2.2 插入操作 5.2.3 删除最小元素操作 双堆 (5.3) 5.3.2 插入操作 5.3.3 删除最小元素 左偏树 (5.4) 二项式堆 (5.5) 5.5.1 二项式堆定义 5.5.2 插入操作 5.5.3 合并操作 5.5.4 删除最小元素 5.5.5 分析 斐波纳契堆 (5.6) 5.6.2 删除操作 5.6.3 关键字减少操作 5.6.4 瀑布修剪 5.6.5 分析 5.6.1 斐波纳契堆定义 斐波纳契堆是一种数据结构,该结构不仅支持二项式堆的插入、删除最小(最大)元素与合并这三个操作,而且支持下列新操作: (1) 减少key:将指定结点的key减去一个正值。 (2) 删除:删除指定结点的元素。 这两个新操作的第一个可用O(1)的分摊代价完成,第二个操作可用O(log n) 的分摊代价完成。其余操作的渐进时间与在二项式堆中的相同。 又由于shortest(结点5) = 2 shortest(结点7) = 1,需要交换结点2的左、右子树,最终得到下一页所示的最小左偏树。 经过交换的指针用虚线表示。 实现最小左偏树合并操作的函数: template class Type void MinLeftistTreeType::MinCombine (MinLeftistTreeType b) { // 合并最小左偏树b和 // *this,并将b设置为空最小左偏树 if (!root) root = b.root; else if (b.root) root = MinUnion(root, b.root); b.root = 0; } template class Type LeftistNodeType* MinLeftistTreeType::MinUnion (LeftistNodeType*a, LeftistNodeType*b) { // 合并以a和b为根的非空最小左偏树,并返回 // 所得最小左偏树的根。 if (a?data.key b?data.key) { // 令a指向根结点中key值 LeftistNodeType*t = a; // 较小的最小左偏树 a = b; b = t; } // 构建最小二叉树 if (!a?RightChild) a?RightChild = b; else a?RightChild = MinUnion(a?RightChild, b); // 维护左偏树性质 if (!a?LeftChild) { // 左子树为空,交换左、右子树 a?LeftChild = a?RightChild; a?RightChild = 0; } else if (a?LeftChild?shortest a?RightChild ?shortest) { LeftistNodeType* t = a?LeftChild; // 交换左、右子树 a?LeftChild = a?RightChild; a?RightChild = t; } // 设置shortest 数据成员 if (!a?RightChild) a?shortest = 1; else a?shortest = a?RightChild?shortest + 1; return a; } 分析:设两棵被合并的左偏树共有n个元素,由于MinUnion沿着两棵被合并的左偏树的最右路径下移,每棵左偏树的最右路径长度不超过O(log n),因此合并操作的时间复杂性为O(log n)。 二项式堆支持与左偏树相同的功能(即插入、删除最小元素以及合并)。 但左偏树的各个操作需要O(log n)时间。 在二项式堆中,插入与合并操作可用O(1)时间完成,而一次单独的删除最小元素可能需要O(n)时间。 然而,如果将删除最小元素操作的代价分摊到插入操作上,则插入操作的分摊代价仍然是O(1),合并操作的分摊代价与其实际代价相同,而删除最小元素操作的分摊代价变为O(log n)。 定义:度为k的二项式树(记作Bk)定义为:若k
文档评论(0)