Python中对象most_common
提供的功能的复杂性是什么collections.Counter
?
更具体地说,是否Counter
在计数时保留某种排序列表,以使其most_common
比O(n)
在n
计数器中添加(唯一)项的数量更快地执行操作?仅供参考,我正在处理大量文本数据,以尝试找到第n个最频繁的标记。
我检查了CPython
Wiki上的官方文档和TimeComplexity文章,但找不到答案。
从collections.py的源代码中,我们看到,如果不指定返回的元素数,则most_common
返回计数的排序列表。这是一种O(n log n)
算法。
如果使用most_common
返回k > 1
元素,则使用heapq.nlargest
。这是一个O(k) + O((n - k) log k) + O(k log k)
算法,对于一个很小的常量非常有用k
,因为它本质上是线性的。这一O(k)
部分来自对初始k
计数进行堆放,第二部分来自n - k
对heappushpop
方法的调用,第三部分来自对k
元素的最终堆进行排序。既然k <= n
我们可以得出结论,复杂度是:
O(n log k)
如果k = 1
这样的话,很容易表明复杂度是:
上)
问题内容: ES6规范为键集合(Set,Map,WeakSet和WeakMap)提供什么时间复杂度(大O表示)? 我的期望,我期望的大多数开发人员,是规范和实现将使用被广泛接受的高性能算法,在这种情况下,并在平均情况下都是O(1)。这同样适用于和等效物。 对我来说,实现的时间复杂性是否在例如ECMAScript 2015 Language Specification-6th Edition — 2
是查找所有r项组合的强大工具,但是,我想知道它的计算复杂性。 假设我想知道n和r的复杂性,当然它会给出n个项列表中所有r项的组合。 根据官方文件,这是粗略的实施。
我有一种情况,我需要根据一个数组值执行一个group by操作,该数组值将字段值的出现次数相加。然后对计数进行过滤,并准备结果,以便根据条件显示结果。从本质上讲,文档被转换回如果您只使用find函数就会呈现的方式。由于matchedDocuments数组中收集的项的数量,我遇到了临时文档太大的问题。任何关于如何改进这一点的建议都将是有益的。 以下是一些示例文档和基于上述标准的预期结果:
如果是,我该怎么做?
我在考虑如何正确计算这个函数的时间复杂度: 我假设它是 O(n),其中 n 是列表的长度。我们的 while 循环是 O(n),for 循环也是 O(n), 这意味着我们得到了 2*O(n),等于 O(n)。 我说的对吗?
在最近的一次测试中,我们得到了一个函数来计算未排序的ArrayList中出现了多少个double(不是原语double,而是一个项目出现了两次)。 我正确地确定了Big O复杂度为O(N^2),但由于我错误地确定了全部复杂度,因此只获得了部分学分。函数如下: 在他刚刚发布的考试解决方案中,他给出了这样的解释: 输入集合中有N个项,该方法通过一个缩减步骤反复调用自己,该步骤生成一个新索引N次,直到达