基于子树生成的堆枚举算法

来源 :华东师范大学 | 被引量 : 0次 | 上传用户:q372245556
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
二叉树是树型数据结构中最基本也最重要的一种,在计算机学科的众多领域中有着广泛的应用。对于二叉树的枚举的研究,无论在算法理论上还是在实际应用中,都具有重要的意义。 本文首先介绍了现有的四种基于编码的二叉树枚举生成算法,分别是基于树排列的编码生成算法、基于旋转的编码生成算法、广义模式下的编码生成算法、和基于文法的编码生成算法。 堆是一种重要的二叉树,它被广泛应用于数据排序、最短路径、任务调度、最小生成树等与优先级队列相关的领域。所以,对于堆的枚举算法的研究对相关应用领域会有很大的帮助。堆的枚举有两种含义,一种是计数,即计算出具有某种特性的堆的总数目;另一种是生成,即一个一个地产生具有某种特性的所有具体堆。 本文介绍了各种类型的堆的结构及其发展,然后介绍了新近发现的最大值堆的一种性质,以及基于这一性质提出的一种最大值堆的生成算法。这种采用单个数判断法和层次判断法的生成算法避免了生成过程中下层节点的冗余回溯,提高了生成堆的效率。 最后,本文提出一种基于子树生成的堆枚举算法。基于子树生成的算法的思想是将生成一个堆的过程分为:先将堆中最大的节点作为堆的根,然后分别生成根的左子树的一个堆(以下称为左子堆)和根的右子树的一个堆(以下称为右子堆),再将根、左子堆、右子堆组合成一个完整堆的过程。 由于将堆分成左右两个子堆来生成,也就将生成整个堆的过程从生成层数为k(k为整个堆的最大层数)的堆,降低到了生成两个k-1层的堆,可以有效的减少生成整个堆所花费的时间,提高枚举算法的效率。 在基于子树生成的堆枚举算法的基础上,本文进一步提出了多层的子树生成堆的枚举新算法,以及多层子树生成堆的新算法的非递归实现方法。多层子树生成算法是将基于子树生成的算法分别在原有的左右子堆中再次运用,分成更多个更小规模的子堆,进一步提高生成堆的效率。并且,在程序实现过程中可以运用循环的方法来代替递归,减少堆栈所占用的系统开销。 经过C程序的对比实验得出:同文献提到的堆的生成算法相比,多层子树生成算法在嵌套层数为2、堆的节点数n=14~17时可以将枚举生成堆的效率提高80%以上。
其他文献
本文对TSP中计划跟踪和度量方法进行了研究。主要工作如下: 1对小组软件过程开发流程进行了分析与研究。针对其循环迭代的特点,提出了一个针对TSP的改进的软件项目计划和跟
随着计算机网络的快速发展,计算机网络的安全问题变得越来越重要。身份认证是网络安全技术的一个重要组成部分,它限制非法用户访问网络资源。本文详细讨论了“一次性口令”认
随着数字电路、无线通信等技术的发展,无线传感器网络技术已在许多应用领域获得越来越广泛和深入的应用。无线传感器网络可以使人们在任何时间、地点和任何环境条件下获取大量
图像拼接技术有效地解决了高分辨率与宽视野之间的矛盾,已经成为数字图像研究领域的一个技术前沿。本文在深入研究和学习图像配准和图像融合技术的基础上,针对现有的图像配准与
本文对P2P文件共享系统中的恶意代码防治策略进行了研究。文章通过分析这些P2P恶意代码的传播方式,提出了一种应用于P2P文件共享系统的恶意代码防治策略。防治策略的核心是一
Web日志挖掘是W曲挖掘的分支之一,也是发展前景及应用价值最高的部分之一,是传统数据挖掘的延伸,与传统数据挖掘对象是结构化数据不同的是,Web日志挖掘的对象是半结构化的日志文
本文的重点在于研究如何解决OGSA-DAI的访问控制管理的瓶颈问题、在分析和研究了OGSA-DAI以及与其相关的访问控制技术的基础之上,结合基于角色的访问控制理论模型,提出了一种解
随着计算机技术、通讯技术、控制技术的发展,促使控制系统向数字式、分布式、开放可互操作和面向开放式互连网络发展。与此同时,作为位于控制系统上层的软件系统也具有更好的开
在信息时代的今天,随着通信技术和网络技术的高速发展和广泛应用,越来越多的信息在网络上传输,信息的安全与保护问题显得愈发重要,使得密码学理论与技术成为信息科学与技术中的一
由于Java作为当前一种主流的面向对象编程语言,具有其它语言不可比拟的优点。它的可移植性、安全性、开发效率高等特点能够保证应用项目得到快速的开发和部署。在嵌入式系统开