【发布时间】:2019-01-15 01:40:37
【问题描述】:
def heapify(A):
for root in xrange(len(A)//2-1, -1, -1):
rootVal = A[root]
child = 2*root+1
while child < len(A):
if child+1 < len(A) and A[child] > A[child+1]:
child += 1
if rootVal <= A[child]:
break
A[child], A[(child-1)//2] = A[(child-1)//2], A[child]
child = child *2 + 1
这是 python heapq.heapify() 的类似实现。在文档中说这个函数在 O(n) 中运行。但看起来对于 n/2 个元素,它执行 log(n) 操作。为什么是 O(n)?
【问题讨论】:
-
在循环内,child = child * 2 + 1 直到它到达 len(A)
标签: python python-3.x python-2.7 heap heapq