繁体   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