展开树中的每个字典操作都使用展开操作将节点带到树的根部。这种展开操作的摊销效率通常使用潜在方法进行分析,并在许多在线资源(包括维基百科)页面中进行了描述。然后将该展开操作的摊销时间报告为 O(m lg n)。
但是,我在任何地方都找不到完整字典操作的实际分析,例如插入,删除,......这些操作中的每一个都使用除了展开操作之外,还通过树向下搜索以找到要插入的节点的正确位置或删除。只有找到该节点后,才能开始展开操作。
人们倾向于发表如下声明:
- “展开树操作的复杂度与关联展开的复杂度相同”
- [“对于我们的分析,我们注意到执行搜索、插入或删除的时间与相关张开的时间成正比”],p。Goodrich 的书的 456 题为“C++ 中的数据结构和算法”
我有两个问题:
- 怎样才能得出这样的结论,即执行搜索的时间与展开的时间成正比?这种暗示向下遍历到节点的时间也与splay的平局成正比?
- 向下遍历的摊销时间效率是多少?它是一个常数吗,仅仅是因为你没有通过简单地向下遍历来改变树的结构(所以你的潜力保持不变)?这个常数不是比= N,因为这是最坏的情况吗?
一个人怎么能得出这个结论?