Python中collections.Counter()的时间复杂度是多少?

时间:2017-02-25 21:31:38

标签: java python time-complexity

collection.Counter("bcdefffaa")

返回输出:

Counter({'f': 3, 'a': 2, 'c': 1, 'b': 1, 'e': 1, 'd': 1})

由于结果是按值的降序排序,这是否意味着构建计数器的成本为O(nlogn)而不是O(n)

此外,Java中的collections.Counter相当于什么?

2 个答案:

答案 0 :(得分:10)

正如source code所示,Counter只是dict的一个子类。构造它是O(n),因为它必须迭代输入,但对单个元素的操作仍为O(1)。

另请注意,该来源并未在内部保留订单,而只是按照__repr__方法对输出中的最常见排序进行排序。

答案 1 :(得分:1)

显然取决于实现,但重要的因素是需要触摸原始列表的每个元素,这意味着O(n)是下限,并且需要将元素插入到字典和/或更新一个字典。 输出中元素的显示与构建计数器的成本无关。