2

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

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

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

我有两个问题:

  • 怎样才能得出这样的结论,即执行搜索的时间与展开的时间成正比?这种暗示向下遍历到节点的时间也与splay的平局成正比?
  • 向下遍历的摊销时间效率是多少?它是一个常数吗,仅仅是因为你没有通过简单地向下遍历来改变树的结构(所以你的潜力保持不变)?这个常数不是比= N,因为这是最坏的情况吗?

一个人怎么能得出这个结论?

4

1 回答 1

1

怎样才能得出这样的结论,即执行搜索的时间与展开的时间成正比?这种暗示向下遍历到节点的时间也与splay的平局成正比?

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

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

是的,如果可以在不张开之后进行搜索。由于前面讨论过的原因,我们将它们视为不可分割的,因此我们有效地乘以一个常数,用于覆盖搜索的冗长展开所使用的摊销信用。

于 2020-08-13T19:33:25.630 回答