Splay Tree(伸展樹)

來源:互聯網
上載者:User

假設想要對一個二叉尋找樹執行一系列的尋找操作。為了使整個尋找時間更小,被查頻率高的那些條目就應當經常處於靠近樹根的位置。於是想到設計一個簡單方法,在每次尋找之後對樹進行重構,把被尋找的條目搬移到離樹根近一些的地方。splay tree應運而生。splay tree是一種自調整形式的二叉尋找樹,它會沿著從某個節點到樹根之間的路徑,通過一系列的旋轉把這個節點搬移到樹根去。

重構方法

1、單旋:在尋找完位於節點x中的條目i之後,旋轉連結x和其父節點的邊。(除非x就是樹根)
2、搬移至樹根:在尋找完位於節點x中的條目i之後,旋轉連結x和其父節點的邊,然後重複這個操作直至x成為樹根。
splay tree的重構方法和搬移至樹根的方法相似,它也會沿著尋找路徑做自底向上的旋轉,將被尋找條目移至樹根。但不同的是,它的旋轉是成對進行的,順序取決於尋找路徑的結構。為了在節點x處對樹進行splay操作,我們需要重複下面的步驟,直至x成為樹根為止:
1、第一種情況:如果x的父節點p(x)是樹根,則旋轉串連x和p(x)的邊。(這種情況是最後一步)
2、第二種情況:如果p(x)不是樹根,而且x和p(x)本身都是左孩子或者都是右孩子,則先旋轉串連p(x)和x的祖父節點g(x)的邊,然後再旋轉串連x和p(x)的邊。
3、第三種情況:如果p(x)不是樹根,而且x是左孩子,p(x)是右孩子,或者相反,則先旋轉串連x和p(x)的邊,再旋轉串連x和新的p(x)的邊。
在節點x處進行splay操作的時間是和尋找x所需的時間成比例的。splay操作不單是把x搬移到了樹根,而且還把尋找路徑上的每個節點的深度都大致減掉了一半。

splay tree支援的操作

1、access(i,t):如果i在樹t中,則返回指向它的指標,否則返回null 指標。為了實現access(i,t),可以從樹t的根部向下尋找i。如果尋找操作遇到了一個含有i的節點x,就在x處進行splay操作,並返回指向x的指標,訪問結束。如果遇到了null 指標,表示i不在樹中,此時就在最後一個非空節點處進行splay操作,然後返回null 指標。如果樹是空的,將忽略掉splay操作。
2、insert(i,t):將條目i插入樹t中(假設其尚不存在)。為了實現insert(i,t),首先執行split(i,t),然後把t換成一個由新的包含有i的根節點組成的樹,這個根節點的左右子樹分別是split返回的樹t1和t2。
3、delete(i,t):從樹t中刪除條目i(假設其已經存在)。為了實現delete(i,t),首先執行access(i,t),然後把t換成其左子樹和右子樹join之後的新樹。
4、join(t1,t2):將樹t1和t2合并成一棵樹,其中包含之前兩棵樹的所有條目,並返回合并之後的樹。這個操作假設t1中的所有條目都小於t2中的條目,操作完成之後會銷毀t1和t2。為了實現join(t1,t2),首先訪問t1中最大的條目i。訪問結束之後,t1的根節點中包含的就是i,它的右孩子顯然為空白。於是把t2作為這個根節點的右子樹並返回完成之後的新樹即可實現join操作。
5、split(i,t):構建並返回兩棵樹t1和t2,其中t1包含t中所有小於等於i的條目,t2包含t中所有大於i的條目。操作完成之後銷毀t。為了實現split(i,t),首先執行access(i,t),然後根據新根節點中的值是大於還是小於等於i來切斷這個根節點的左連結或右連結,並返回形成的兩棵樹。

Splay Tree的優勢所在

由於Splay Tree僅僅是不斷調整,並沒有引入額外的標記,因而樹結構與標準BST沒有任何不同,從空間角度來看,它比Treap、Red-Black Tree、AVL要高效得多。因為結構不變,因此只要是通過左旋和右旋進行的操作對Splay Tree性質都沒有絲毫影響,因而它也提供了BST中最豐富的功能,包括快速的拆分和合并(這裡指的是將原樹拆分成兩棵子樹,其中一棵子樹所有節點都比另一子樹小,以及它的逆過程),並且實現極為便捷。這一點是其它結構較難實現的。其時間效率也相當穩定,和Treap基本相當。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.