資料結構中虛擬樹中的伸展樹
在虛擬樹中,一些邊被視為實線,一些被視為虛線。通常的伸展操作只在實線樹中執行。為了在虛擬樹中的節點 y 上執行伸展操作,實現了以下方法。
該演算法檢視樹三次,每次遍歷一次,並對其進行更改。在第一次遍歷中,僅在實線樹中執行伸展操作,從節點 y 開始,從 y 到整個樹根的路徑變為虛線。這條路徑透過拼接變為實線。現在,在節點 y 上進行最終的伸展操作將使 y 成為樹的根。非正式地說,該演算法解釋如下
伸展(y) 演算法
第一遍 沿著虛擬樹向上遍歷,但伸展操作僅在實線子樹內執行。在這一遍結束時,從 y 到根的路徑變為虛線。
第二遍 從節點 y 向上遍歷,在 y 的每個真祖先節點處進行拼接。在這一步結束時,從 y 到根的路徑變為實線。除此之外,節點 y 及其在原始樹(第一遍之前的樹)中的所有子節點現在都成為左子節點。
第三遍 從節點 y 向上遍歷到根,以正常方式執行伸展操作。
這使我們能夠利用先驗知識來改進我們的機率估計。對於給定的葉子集。因此,目標是構建一個具有最小外部路徑權重的樹。
下面給出一個例子
字母頻率表
| 字母 | z | k | m | c | u | d | l | e |
| 頻率 | 2 | 7 | 24 | 32 | 37 | 42 | 42 | 120 |
霍夫曼編碼
| 字母 | 頻數 | 編碼 | 位元數 |
|---|---|---|---|
| e | 120 | 0 | 1 |
| d | 42 | 101 | 3 |
| l | 42 | 110 | 3 |
| u | 37 | 37 100 | 3 |
| c | 32 | 1110 | 4 |
| m | 24 | 11111 | 5 |
| k | 7 | 111101 | 6 |
| z | 2 | 111100 | 6 |
霍夫曼樹(以上例為例)如下所示

廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP