Python中分段树的实现

2024-04-24 22:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python编写新的数据结构,下面的函数是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

我期待这个在O(h)时间内运行(h是树的高度),但它不是,有人能指出我的错误吗。谢谢。

编辑段树的概念,请看http://community.topcoder.com/i/education/lca/RMQ_004.gif

函数的终止条件是区间是(1,1)的形式,即它是一个点而不是一个范围。所有的功能都实现了。 工作输入: http://pastebin.com/LuisyYCY

这是全部代码。http://pastebin.com/6kgtVWAq


Tags: 函数comfalsetreehttp数据结构returnif
1条回答
网友
1楼 · 发布于 2024-04-24 22:16:51

这可能是因为你对树的每一层都是extending a list。扩展一个列表的平均时间复杂度是O(k),其中k是右侧列表的大小。右侧列表的大小为O(h),因此平均总体时间复杂度为O(h2)。在

相关问题 更多 >