【发布时间】:2019-02-21 19:22:20
【问题描述】:
假设我们尝试使用 2-3 棵树来维护一个列表结构,并希望有高效的操作来创建列表、连接、拆分和获取索引处的值。我尝试这样做的第一次尝试是将列表元素视为 2-3 树中的叶子,每个内部节点都存储左侧的叶子数。这样,如果您想搜索索引,那么如果您搜索的索引小于任何内部节点的值,它将向左看,否则向右看。如果找不到叶子,则索引超出范围。
但是,我不确定在连接列表时如何以有效的方式保持此不变量。我可以将 L2 的树表示添加到 L1 的树中最右边的可用位置,然后尝试更新计数,然后尝试为 2-3 棵树实现一些插入算法……但至少我的直觉告诉我,我将无法提高效率(即 O(log(n)) )。
我是应该继续努力完成这项工作,还是我最初决定将计数存储在我应该考虑重新设计树的节点上?
【问题讨论】:
-
如果您不需要良好的最坏情况时间复杂度,splay 树会容易得多。只是说。