我对python比较陌生(使用v3.x语法),我会很欣赏有关heapq与sorted的复杂性和性能的注释。
我已经为贪婪的“查找最佳作业调度”算法实现了一个基于HeapQ的解决方案。但是,我已经了解了将“sorted”与operator.itemgetter()一起使用的可能性,并且reverse=true。
遗憾的是,我找不到任何关于“排序”与heapq的预期复杂性和/或性能的解释。

最佳答案

如果您使用二进制堆按顺序弹出所有元素,那么您所做的基本上就是heapsort。它比sorted function中的sort algorightm慢,但它的实现是纯Python。
如果需要动态添加元素,即添加和插入可能以未指定的顺序进行,则heapqsorted更快。在任何堆中添加保持内部顺序的新元素比在每次插入后重新使用数组要快。
如果以后需要按顺序检索所有元素,sorted会更快。
它们可以竞争的唯一问题-如果您需要集合中最小(或最大)元素的某些部分。尽管there are special algorigthms for that case,这里的heapqsorted是否更快取决于初始数组的大小和需要提取的部分。

关于python - Python heapq与排序的复杂性和性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24666602/

10-10 15:02