数组中前k个频繁元素的时空复杂度

时间:2019-05-19 03:40:31

标签: arrays algorithm time-complexity big-o space-complexity

对于给定问题,时间和空间的复杂性存在一些困惑:

给出大小为 N 的数组,返回前 K 个常见元素的列表。

基于最受欢迎的解决方案:

  1. 使用大小为 K 的HashMap,并将每个条目的计数作为值。
  2. 遍历上面生成的HashMap,构建大小为 K 的MaxHeap。
  3. 将MaxHeap中的元素放入列表中,然后返回列表。

K是输入中唯一元素的数量。

时空复杂度为:O(K)和O(K * log(K)

现在混乱从这里开始。我们知道在上述分析中我们正在处理最坏情况的复杂性。因此,当数组中的所有元素都是唯一的时,K可以取的最差值是N。

因此K <=N。因此O(K)表示为O(N)??

因此,对于上述问题,时空复杂度不应该是O(N)和O(N * log(N))吗?

我知道这是一种技术,但它困扰了我一段时间。请指教。

1 个答案:

答案 0 :(得分:1)

是的,自K<N以来,您是对的,哈希映射部分的时间复杂度应为O(N)

但是堆中仅包含K个元素,并且其时间复杂度为O(Klog(K)),如果渐近地考虑,其时间复杂度远大于O(N)的线性复杂度,因此最终的时间复杂度为{{1} }。