Python的PriorityQueue调用get方法时会每次执行sorted排序吗?
关于queue.PriorityQueue的get方法效率疑问解答
完全不是你想的那样——官方文档里用sorted(list(entries))[0]只是给你解释**“最低值条目”到底指的是什么**,并不是说每次调用get()时真的会把所有元素重新排序一遍。
PriorityQueue底层是用**堆(heap)**这种数据结构实现的,堆的特性就是能高效维护集合中的最值:
- 调用
put()插入元素时,会自动做堆化调整,时间复杂度是O(log n) - 调用
get()取出优先级最高的元素时,只是把堆顶的最值拿出来,再对剩下的元素做一次小规模的堆调整,时间复杂度同样是O(log n)
这种实现比每次排序要高效太多,完全不用担心性能问题。
最低值的条目会被优先取出(最低值条目即
sorted(list(entries))[0]返回的元素)。
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

