我的堆工作太慢了

时间:2013-02-25 04:43:23

标签: python runtime heap

所以这是我的min-heap代码。这是我作业的一部分:

def heapify(i):
    global end,a
    l=2*i+1        
    if l>end:
        return None
    r=2*i+2
    minarg=i        
    if a[i]>a[l]:
        minarg=l
    if r<=end:
        if a[minarg]>a[r]: minarg=r
    if a[i]==a[minarg]:
        return None
    else:
        a[i],a[minarg]=a[minarg], a[i]
        heapify(minarg)

def buildHeap(start):
    global end,a
    if start*2+1>end:
        return None
    buildHeap(start*2+1)
    buildHeap(start*2+2)
    heapify(start)

应该可以正常工作,但是对于大型测试用例,我的时间限制已超出限制。我做错了吗?

1 个答案:

答案 0 :(得分:0)

Python中的函数调用需要时间,递归占用空间

保存递归的时间,通常会将其转换为循环。这通常需要使用日期的专门“内存管理”来处理安全空间。你已经使用数组/列表(使用... ehem ...全局变量)完成了这项工作。

如果这是你的功课,请继续 - 可行,但不重要。