2013-02-25 55 views
0

所以這裏是我最小的代碼。這是我功課的一部分:我的堆工作太慢

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) 

它應該是工作,但我得到超過大型測試案件的時間限制。難道我做錯了什麼?

+0

您可以提出問題鏈接 – 2013-02-25 04:54:07

+1

您可以將'buildHeap()'轉換爲循環而不是遞歸函數調用。 – 2013-02-25 05:07:21

+0

另外,這與您的速度問題無關,但您不應該真正使用全局變量。 – 2013-02-25 05:07:46

回答

0

Python中的函數調用需要時間,遞歸需要空間

保存遞歸的時間通常會將其轉換爲循環。這通常需要使用日期的專用「內存管理」來工作到安全空間。你已經使用一個數組/列表來做到這一點(使用... ehem ...全局變量)。

如果這是您的功課,請繼續 - 可行,但不平凡。