Algorithm 范围最小查询,动态数组,区间树,treap
我需要一个在Python中具有某种数据结构的算法,当给定两个新元素e1、e2时,每一步都需要该算法:Algorithm 范围最小查询,动态数组,区间树,treap,algorithm,data-structures,b-tree,segment-tree,rmq,Algorithm,Data Structures,B Tree,Segment Tree,Rmq,我需要一个在Python中具有某种数据结构的算法,当给定两个新元素e1、e2时,每一步都需要该算法: 查找第一个和第二个给定元素的插入位置(保持顺序) 查找两个插入位置之间间隔内元素的最大值 在先前找到的第二个给定元素的插入位置插入,第二个给定元素与间隔中找到的最大值加上一个常量配对。除非第二个给定元素已经存在,在这种情况下,我们只需要在新值更大时更新它的值 这一步必须在不超过对数的时间内完成,因为当这一步重复N次时,总体最坏情况下的时间复杂度不能远离O(NlogN) -- 例如: 我的清单
- 查找第一个和第二个给定元素的插入位置(保持顺序)
- 查找两个插入位置之间间隔内元素的最大值
- 在先前找到的第二个给定元素的插入位置插入,第二个给定元素与间隔中找到的最大值加上一个常量配对。除非第二个给定元素已经存在,在这种情况下,我们只需要在新值更大时更新它的值
这非常相似,但与我关于插入元素的索引的问题不同。在这个问题中,元素被添加到末尾(追加),在我的例子中,插入必须以保持元素顺序的方式进行,以便可以在对数时间内找到下一个任意间隔的开始和结束。这就是为什么我认为,除了使用范围最小查询,我还需要使用一些高级数据结构,如区间树或treap。对于这种类型的作业,我通常使用扩展的B+树。请参见此处了解B+树的含义: 从B+树开始,我将扩展所有内部节点,以便与指向子节点的每个指针一起,存储与该子节点所在子树中的所有键相关联的最大值 这些额外的信息使得计算O(logn)中任何时间间隔的最大值变得容易,并且在树中插入、删除和修改项目时易于维护,而无需更改这些操作的O(logn)复杂性
对于内存中的B+树,通常每个节点最多执行8个左右的键。如果必须找到最大值的间隔为空,则可以跳过该步骤。您是否正在寻找实现,或者您的具体要求是什么,我不确定是否理解您的意思。:)@梅瑟姆-我希望有人能给我一个暗示。使用什么样的数据结构,是否一定可以用范围最小查询解决,等等。您需要在线算法还是可以接受批处理?@PetarPetrovic每个步骤中任意给定的两个元素从整个过程开始就不知道,如果这是您的意思的话。虽然它们可能可以预先计算。谢谢你的回答!我正在阅读关于B树和B+树的文章,然后我将尝试用Python实现它。Python中是否有一段基本的代码或框架,我可以修改以满足我的需要?我发现的唯一一个是GitHub上的“纯python B树和B+树实现”,但它有500多行代码,语法非常高级。我几乎不使用python,但如果你是说这个:那么它看起来是正确的。去掉B+树,保留B+树。摆脱删除/收缩/合并的东西,因为你只需要添加。只剩下几百行了