使用堆排序可以在Θ(log n)时间内对多少个元素进行排序?

Unn*_*nni 4 sorting algorithm time-complexity heapsort

使用堆排序可以在Θ(log n)时间内对多少个元素进行排序?

当我们进行堆操作时,为了构建堆,我们需要Θ(n)复杂度,然后执行heapsort O(nlog n).我理解这个概念.但是当谈到我们的问题时,我们甚至无法在Θ(log n)时间内构建一堆n个元素.答案是O(1)考虑输入大小n?

我还看到了一个不同的解释,它将复杂度推导为考虑输入大小logn的Θ(log n/log log n).我也不太关注这种方法.那么哪个是正确的答案?为什么?

tem*_*def 10

我认为问题是"假设某个地方有一个已知值n,数组大小的渐近界限是什么,作为n的函数,用heapsort对数组进行排序需要时间Θ(log n)? "

当k增长时,用k个元素对数组进行排序需要时间Θ(k log k).您希望选择k使得Θ(k log k)=Θ(log n).选择k =Θ(log n)不一定有效,因为Θ(k log k)=Θ(log n log log n)≠θ(log n).另一方面,如果选择k =Θ(log n/log log n),那么排序的运行时间将是

Θ((log n/log log n)log(log n/log log n))

=Θ((log n/log log n)(log log n - log log log n))

=Θ(log n - log n log log log n/log log n)

=Θ(log n(1 - log log log n/log log n))

请注意,1 - log log log n/log log n趋向于1,因为n变为无穷大,因此上述表达式实际上是Θ(log n),根据需要.

因此,如果您尝试使用堆排序对大小为Θ(log n/log log n)的数组进行排序,则作为n的函数,运行时为Θ(log n).

希望这可以帮助!

  • @templatetypedef 我没有得出任何东西。我只是使用单一方法,即如果 X 单位采用 Y 时间单位,则 Z 单位将采用 (ZY)/X 时间单位,这在这里不起作用。我无法找到原因。 (2认同)
  • 好吧,我现在明白为什么这种简单的除法不起作用了。仅当图形(或函数)的斜率为 1(或与 x 轴成 45 度),例如 y=x 或 y=2x 时,此方法才有效。如果假设一个算法需要 2n 个时间单位,其中 n 作为输入数量,那么我们可以应用此方法,但这里 nlogn 中的 logn 部分会破坏一切。 (2认同)