编写一个程序,可以处理一个有K个子节点的堆



我已经研究了二进制堆,我仍然很困惑该为这个程序做些什么,如果我能得到一些指导,我真的很感激它,我仍然在学习java,这样做有很多麻烦。

k元堆类似于二进制堆(其中k = 2),但是(有一个可能)(例外)非叶节点有k个子节点,而不是2个子节点。实现k元堆作为任意k≥2的最小优先级队列,支持以下操作:

•insert (x):将元素x插入堆中。

•extract-min():移除并返回堆中键值最小的元素。

k元堆将使用预定义大小的数组来实现。还要研究对于不同k值的数据结构的相对效率,通过测量时间在给定k = 2,4,6,8的输入文件中,需要执行一系列操作,10. 在输入文件中,"In"代表插入,"EX"代表提取最小操作。

二进制堆被实现为一个几乎满的(=完整的)二叉树。对于k元堆,您可能需要生成almost full k-ary tree[树中的所有级别都满了,除了最后一个,您从左到右填充树],并重复原始堆所做的相同操作,但每个节点有两个以上的子节点。

了解堆操作,特别是heapify,以及上面的技巧,实现k元堆应该不会太难。

要将其实现为数组,只需遵循二叉树作为数组的实现方式,并在将完整的k元树实现为数组时遵循这些思想。

相关内容

最新更新