为什么摊销树的摊销分析仅关注摊销操作而不考虑向下搜索

问题描述

展开树中的每个字典操作都使用展开操作将节点带到树的根。通常使用潜在方法来分析此展开操作的摊销效率,并在许多在线资源(包括Wikipedia)页面中进行了描述。然后将此扩展操作的摊销时间报告为O(m lg n)。

但是,我在任何地方都找不到对完整字典操作(例如插入,删除,...)的实际分析。 这些操作中的每一个除了使用splay操作外,还使用向下搜索树的方式来找到要插入或删除的节点的正确位置。只有找到该节点之后,您才能启动splay操作。

人们倾向于发表如下声明:

我有两个问题:

  • 如何能够得出这样的结论:执行搜索的时间与展开的时间成正比?这种暗示意味着向下遍历节点的时间也与展开的关系成正比?
  • 向下遍历的摊销时间效率是多少?它是一个常数,仅仅是因为您不通过简单地进行向下遍历来改变树的结构(因此您的潜力保持不变)吗?这个常数不是= N,因为这是最坏的情况吗?

一个人如何得出这个结论?

解决方法

如何能够得出这样的结论:执行搜索的时间与展开的时间成正比?这种暗示意味着向下遍历节点的时间也与展开的关系成正比?

展开阶段对搜索阶段中遍历的每个节点进行操作。由于搜索阶段在每个节点上所做的工作是恒定的,因此我们可以推断出,在任何操作序列中,search = O(splay),因此O(search + splay)= O(splay)。

向下遍历的摊销时间效率是多少?它是一个常数,仅仅是因为您不通过简单地进行向下遍历来更改树的结构(因此您的潜力保持不变)吗?这个常数不是= N,因为这是最坏的情况吗?

是的,如果可以搜索而无需随后展开。由于前面讨论的原因,我们将它们视为不可分割的,因此有效地我们将一个冗长的花销用来覆盖该搜索的摊销额乘以一个常数。