學習伸展樹差不多有兩個多星期了吧!慢慢地也領悟到了它最基本的實現,都不敢說是:初窺門庭!最先看的是楊思雨的**《伸展樹的基本操作與應用》。現在回頭看確實寫得挺清晰易懂,但是可能是自己看書沒仔細看,或許是悟性太差吧!一直沒看懂,特別是結點旋轉的那幾張圖,即把x旋轉到樹的根結點!
後來也不知道是看到哪篇部落格,講想看懂伸展樹,最好先學習一下sbt(陳啟峰《size balanced tree》),當然了解線段樹是必須的,重點是線段樹的懶操作!我就是看sbt(
size balanced tree(sbt)平衡二叉樹
)才明白旋轉是怎麼回事的!
建議學習的同學自己畫畫圖,一般畫畫可能就懂了!如果明白旋轉了,基本上伸展樹也就看懂了一半了!
但是呢,看sbt又容易進入乙個誤區,那就是把思維固定到:伸展樹與sbt一樣,是一種二叉查詢樹。sbt一般是以key為關鍵值來組織資料,最後樹的中序遍歷保證儲存的值是按從小到大順序排列。比如陣列:a=,把a[i]放入sbt中後,中序遍歷的結果就變成了:1 2 3 4 5!我個人覺得伸展樹是不一樣的,伸展樹中序遍歷能保證陣列的下標從小到大輸出,但不能保證資料是從小到大輸出的。它維護的是區間,動態的區間,這與線段樹更相似。而且伸展樹與線段樹相比,多了以下幾個功能:插入一組資料到指定區間,刪除一段區間的資料,反轉區間等(參見poj3580)。
:楊思雨:《伸展樹的基本操作與應用》
crash: 《運用伸展樹解決數列維護問題》
mashuo: 《伸展樹操作詳解》
伸展樹splay學習小記
splay是基本操作,rotate是splay的基本操作。splay now,root 把now splay到root的下面。單旋和雙旋就不說了。我們可以簡化操作,如果是一字型 方向相同 則先旋father,否則先旋now。然後再旋now。rotate now是指將now繞father rotate...
nginx 學習的前提
在nginx 中,需要學會的是如何安裝 基礎的命令 看懂配置那麼這時候才是一切的剛剛開始。安裝可以去看菜鳥驛站的 對了,這個最好去看官網,因為配置總是過時的。好的介紹一些基本命令 檢視nginx 的版本 nginx v結果如上 檢視nginx 執行狀態 上面這個命令其實就是查程序中有沒有nginx的...
伸展樹的學習(四) 在已知的序列中任何位置插入資料
前面講解了伸展樹的原始姿態 二叉搜尋樹!這篇文章呢就講解一下伸展樹的兩種操作 右旋 zag 和左旋 zig 操作 伸展樹右旋的圖示 旋轉的結果就是 使結點t的位置向上移動 人往高處走嘛 右旋有乙個前提 結點t是結點f的左孩子!根據二叉搜尋樹的性質 各結點滿足以下不等式 a旋轉後,這個等式也不能變!這...