collection.Counter("bcdefffaa")
返回输出:
Counter({'f': 3, 'a': 2, 'c': 1, 'b': 1, 'e': 1, 'd': 1})
由于结果是按值的降序排序,这是否意味着构建计数器的成本为O(nlogn)
而不是O(n)
?
此外,Java中的collections.Counter相当于什么?
答案 0 :(得分:10)
正如source code所示,Counter只是dict的一个子类。构造它是O(n),因为它必须迭代输入,但对单个元素的操作仍为O(1)。
另请注意,该来源并未在内部保留订单,而只是按照__repr__
方法对输出中的最常见排序进行排序。
答案 1 :(得分:1)
显然取决于实现,但重要的因素是需要触摸原始列表的每个元素,这意味着O(n)是下限,并且需要将元素插入到字典和/或更新一个字典。 输出中元素的显示与构建计数器的成本无关。