据我所知,存在二项式堆或所谓的可合并堆,用于合并两个堆。我的问题是,如果我将这两个堆复制到一个大数组中,然后执行一个堆构建过程,而不是将这些堆动态合并到一个堆中,那是一个好的方法吗?

因为我不知道如何仅通过堆操作使用两个堆来创建一个堆。请告诉我这是否不是一个好方法,或者如果可以的话,请给我一些链接,其中实现了具有合并操作的二项式堆。

最佳答案

如果您考虑一下,通过丢弃嵌入在其他堆的顺序中的所有信息来创建一个堆可能不是最佳选择。最坏的情况是,您应该将堆2中的所有项目添加到堆1中,这只是从头开始创建全新堆的工作的一半。

但实际上,您可以做得更好。合并两个格式良好的堆涉及的工作仅是在另一个堆的树中找到一个根的插入点,然后在该点插入。无需进一步的工作,您所做的仅是ln N工作!有关详细算法,请参见here

关于c++ - 合并两个堆的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9753432/

10-10 05:03