簡體   English   中英

Python中的段樹實現

[英]Segment tree implementation in Python

我正在嘗試編寫我在Python中學習的新數據結構,以下函數是段樹的一部分。

def query(root,interval,xy=ref_ll([False,False])):
    print interval,root
    if root.interval == interval or point(root.interval):
        return root.quadrant.reflect(root.xy * xy) #Is always gonna be of the form [a,b,c,d]
    a = q_list([0,0,0,0])
    if interval[0] < root.r.interval[0]:
        a = query(root.l,[interval[0],min(interval[1],root.l.interval[1])],root.xy * xy)
    if interval[1] > root.l.interval[1]:
        a = query(root.r,[max(interval[0],root.r.interval[0]), interval[1]],root.xy * xy)
    return a

我希望這能在O(h)時間運行(h是樹的高度),但事實並非如此,有人可以指出我做的錯誤。 謝謝。

編輯有關分段樹的概念,請查看http://community.topcoder.com/i/education/lca/RMQ_004.gif

函數的終止條件是如果區間是(1,1)的形式,即它是一個點而不是一個范圍。 所有功能都已實施。 工作輸入: http//pastebin.com/LuisyYCY

這是整個代碼。 http://pastebin.com/6kgtVWAq

這可能是因為您正在為樹的每個級別擴展列表 擴展列表的平均時間復雜度是O(k),其中k是右側列表的大小。 右側列表的大小為O(h),因此平均總時間復雜度為O(h 2 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM