二进制堆非常简单,几乎总是在使用时使用 需要优先级队列。一个简单的概括是一个d堆,它 就像二进制堆一样,除了所有节点都有d个子节点 (因此,二进制堆是2堆)。
请注意,d-heap比二进制堆浅得多, 将插入物的运行时间改善为O(log(base(d)n))。然而, delete_min操作比较贵,因为即使是 树较浅,必须找到d儿童的最小值 使用标准算法进行d-1比较。这提高了 此操作的时间为O(d logdn)。如果d是常数,两者都是 运行时间当然是O(log n)。
我的问题是d dilderen我们应该进行比较,作者如何使用标准算法得出d-1比较。
谢谢!
答案 0 :(得分:3)
你有一个比孩子少的比较。
E.g。对于两个孩子a1
和a2
,您只需比较一次a1<=>a2
即可找到较小的一个。
对于三个孩子a1
,a2
,a3
,您比较一次以找到较小的a1
和a2
,并再次比较较小的a3
和d
一到d-1
。
通过归纳,您会看到每增加一个孩子,您需要进行额外的比较,将之前列表的最小值与新添加的孩子进行比较。
因此,一般情况下,对于{{1}}个孩子,您需要{{1}}次比较才能找到最低限度。