考虑我的树就像这样
5
/ \
3 7
/ \ / \
2 4 6 8
当我们搜索元素2
时,将执行zigzig操作,所以首先
我们轮换parent and ancestor of 2
,然后轮换parent and 2
。
在相同的情况下,考虑我们正在搜索4
,那时将执行之字形操作。首先,我们轮换4 and its parent
,然后4 and its ancestor
将会轮换。
为什么我们这样做,在曲折中,为什么我们不旋转parent and ancestor
而不是searching node and parent
。
请解释一下?在此先感谢。
答案 0 :(得分:1)
轮换顺序很重要。这就是使得每次操作的分析产生O(lg n)
时间在一系列m次操作中摊销的原因。 splay(x)
启发式将节点x移动到树的根,但不是仅旋转x直到它成为根,zigzig步骤首先旋转x的父级然后旋转x。例如,如果我们只是旋转x直到它成为根,那么分析将不会产生有用的东西。
你在这里描述不同的东西。您希望始终先旋转父级,然后旋转子级。你需要正式证明这种启发式方法如果你认为是好的,但要回答这个问题:splay树中的旋转顺序保证O(m lg n)
限制在一系列m次操作中。