Algorithm d堆删除算法
二进制堆非常简单,几乎总是在需要时使用它们 需要优先级队列。一个简单的泛化是d堆,它 与二进制堆完全相同,只是所有节点都有d个子节点 (因此,二进制堆是2-堆) 请注意,d堆比二进制堆浅得多, 将insert的运行时间提高到O(log(base(d)n))。然而, delete_min操作成本更高,因为即使 树较浅,必须找到最小的d个孩子,这 使用标准算法进行d-1比较。这引起了争议 此操作到O(d logdn)的时间。如果d是常数,则 运行时间当然是O(logn) 我的问题是d-Children我们应该有d个比较,作者如何使用标准算法得出d-1比较的结论Algorithm d堆删除算法,algorithm,Algorithm,二进制堆非常简单,几乎总是在需要时使用它们 需要优先级队列。一个简单的泛化是d堆,它 与二进制堆完全相同,只是所有节点都有d个子节点 (因此,二进制堆是2-堆) 请注意,d堆比二进制堆浅得多, 将insert的运行时间提高到O(log(base(d)n))。然而, delete_min操作成本更高,因为即使 树较浅,必须找到最小的d个孩子,这 使用标准算法进行d-1比较。这引起了争议 此操作到O(d logdn)的时间。如果d是常数,则 运行时间当然是O(logn) 我的问题是d-Childre
谢谢 你比孩子少做一次比较 例如,对于两个孩子
a1
和a2
,您只需比较一次a1a2
,即可找到较小的孩子
对于三个孩子a1
,a2
,a3
比较一次,找出a1
和a2
中较小的一个,第二次比较较小的一个和a3
通过归纳,您可以看到,对于每个额外的子项,您需要进行额外的比较,将上一个列表中的最小值与新添加的子项进行比较
因此,一般来说,对于d
儿童,您需要进行d-1
比较以找到最小值