rou*_*ter 6 python sorting algorithm time-complexity data-structures
我知道有两种方法。第一个:文档在这里
heapq.nlargest(n, iterable, key=None)
Run Code Online (Sandbox Code Playgroud)
以及使用 sorted 的第二种传统方法
sorted(iterable, key=key, reverse=True)[:K]
Run Code Online (Sandbox Code Playgroud)
文档提到这两个是等效的。但是,我只是想知道两者的复杂度是否相同,或者第一种方法是否以较小的时间复杂度实现。
我记得在我的算法课程中,与对整个列表进行排序然后选择顶部 K 相比,从列表中获取前 K 个元素可以以较少的操作顺序完成。如果我错了,请纠正我
编辑:哪些标准 python 库可以在 O(N) 操作中执行此任务,或者我们可以从 python 中获得的最佳复杂度是多少?
小智 1
我不是一个伟大的数学家,但我想这主要取决于两件事:
一般来说,你是对的,快速测试显示了数字上的差异:
>>> timeit(stmt='sorted(i)[-100:]', setup='from random import seed,random;seed(666);i=[random() for _ in range(10000)]', number=1000)
2.086820379132405
>>> timeit(stmt='heapq.nlargest(n, i)', setup='from random import seed,random;import heapq;seed(666);n=100;i=[random() for _ in range(10000)]', number=1000)
0.5397011679597199
Run Code Online (Sandbox Code Playgroud)