擅长:python、mysql、java
<p>heapq的要点是使用一个<a href="https://en.wikipedia.org/wiki/Heap_(data_structure)" rel="nofollow noreferrer">heap</a>结构——一个二进制堆,具体来说,其中每个节点小于或等于其所有子节点。<a href="https://en.wikipedia.org/wiki/Binary_heap#Extract" rel="nofollow noreferrer">pop operation</a>总是围绕O(logn)元素移动,因此从这个意义上讲,列表的顺序并不重要(它不像<code>.pop(0)</code>,它会移动O(n)元素–请注意,在操作之后,列表是如何<code>[2, 3, 3, 10, 5, 5]</code>,而不是<code>[2, 3, 10, 3, 5, 5]</code>)。剩下的考虑只是使树结构易于从列表中生成,这是通过最简单的方式实现的,在开始时有根,其中索引<em>i</em>处的每个节点的子节点都在索引2i+1和2i+2处</p>