算法 – 在O(K * log(K))中打印给定堆中最大的K个元素?

鉴于以下问题,我不完全确定我目前的解决方案:

题 :

给定存储在数组A中的n个元素的最大堆,是否可以在O(K * log(K))中打印所有最大的K个元素?

我的答案 :

是的,因为搜索元素需要O(log(K)),因此这样做

对于K元素,将采用O(K * log(K))运行时间.

最佳答案
这是可能的最大堆,因为您只打印树中的元素,而不是提取它们.

首先确定位于根节点的最大元素.形成指向节点的指针,并将其添加到另一个空的“最大值”列表.然后,对于每个k值,循环中执行以下步骤.

>从列表中弹出最大元素,取O(1).
>打印其值,取O(1).
>将此最大元素的每个子项插入到列表中.在插入它们时,保持排序,取O(日志(列表的大小))时间.该列表的最大大小,因为我们执行这个循环k次,是分支大小* k.因此,此步骤需要O(log(k))时间.

总之,根据需要,运行时间为O(klog(k)).

转载注明原文:算法 – 在O(K * log(K))中打印给定堆中最大的K个元素? - 代码日志