Udi Manber的着名着作“算法导论”中提到了这个问题,其中指出
算法* Insert_To_Heap *可以在堆上多次交换。修改算法,以便最多执行一次交换。 O(log n)比较仍然是允许的。
我想不出任何这样的算法,我甚至认为这是不可能的(如果你在最大堆中插入最大元素它似乎没有任何方式工作)。有些答案甚至存在,表明这是不可能的。但是考虑到这个问题来自一个好的来源,我再问一下你是否可以给出一些好的想法并找出作者试图提出的问题?
答案 0 :(得分:0)
我认为如果我们使用二叉树来实现Heap,并且每个子节点都包含指向其父节点的指针,我们可以在一次插入操作和O(logN)比较操作中完成Insert_To_Heap。但是,这可能会生成一个只有一个子节点的节点,这将导致更高的树。