简体   繁体   中英

Segment tree implementation in Python

I am trying to code new data structures I learn in Python, and the following function is part of segment tree.

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

I am expecting this to run in O(h) time (h is the height of the tree), but it does not, can someone point out the mistake I did. Thanks.

EDIT For an idea of the segment tree, look at http://community.topcoder.com/i/education/lca/RMQ_004.gif

The function's termination condition is if the interval is form of (1,1), ie it is a point and not a range. All the functions are implemented. Working Input: http://pastebin.com/LuisyYCY

Here is the whole code. http://pastebin.com/6kgtVWAq

It's probably because you are extending a list for every level of the tree. The average time complexity of extending a list is O(k) where k is the size of the list on the right hand side. The size of the list on the right hand side is O(h) so the average overall time complexity is then O(h 2 ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM