我已经研究了二进制堆,我仍然对如何为这个程序做些事感到困惑如果我能得到一些指导我真的很感激它我还在学习java并且在这方面遇到了很多麻烦。
k-ary堆就像二进制堆(其中k = 2),但是(有一种可能 例外)非叶子节点有k个孩子而不是2个孩子。实现k-ary堆 作为任意k≥2的最小优先级队列,以支持以下操作:
•insert(x):将元素x插入堆中。
•extract-min():删除并返回具有最小键的堆元素。
k-ary heap将使用预定义大小的数组来实现。还研究了 通过测量时间来改变k值的数据结构的相对效率 在给定k = 2,4,6,8的输入文件的情况下执行操作序列所需的, 10.在输入文件中,“IN”表示插入,“EX”表示提取 - 最小操作。
答案 0 :(得分:3)
二进制堆实现为almost full (=complete)二叉树。对于你的k-ary堆,你可能需要生成almost full k-ary tree
[树中的所有级别都已满,除了最后一个,从左到右填充树],并重复相同的操作堆do,但每个节点有2个以上的子节点。
有了heap ops的一些知识,特别是heapify
以及上面的提示,实现你的k-ary堆应该不会太难。
要将其实现为数组,只需按照binary tree is implemented as an array的方式进行操作,并在将完整的k-ary树实现为数组时遵循这些想法。