iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Software Development

資料結構 - 我好想懂阿!30 天系列系列 第 16

資料結構 - 我好想懂阿!30 天系列 (16) - Huffman Algo

  • 分享至 

  • xImage
  •  

前言

上一章節介紹完 Extended BT,那這邊我們要準備做個延伸,簡短的說明就是把外部節點加上權重,並且定義 WEPL 賦予權重的外部路徑長之加總,而我們想找出最小的 WEPL,即為本章節的 Huffman algo

WEPL (Weight External Path Length)

將 External path 乘上加權後加總,以下圖為例
https://ithelp.ithome.com.tw/upload/images/20220930/20151910Da9S4lvQrt.png
WEPL = 2*(6+15+20) + 3*(1+2) = 91

Huffman Algo

當我們有一個 n 個節點的 BT,可以形成 https://chart.googleapis.com/chart?cht=tx&chl=%20(1%2Fn%2B1)C%5E%7B2n%7D_%7Bn%7D 種 BT,而這些 BT 之中必定會出現具有最小 WEPL 的二元樹,找出他使用的方法就是 Huffman Algo,步驟如下

  1. 從加權值集合 W 之中,挑出兩個最小的權重
  2. 建立 B.T,並將兩權重加起來放回 W 之中
  3. Repeat 1, 2 直到只剩 1 個權值在 W 中 (因此做 n-1次)

如此一來可以建立一棵 Huffman Tree

以下圖來操作

https://ithelp.ithome.com.tw/upload/images/20220930/20151910qjDCyGDgUf.png

演算法

// 假設 node structure [left|weight|right]
huffman(w){
    for i=1 to n-1{
        new(t);
		t->lchild = delete_min(w); // 挑出權重集合W內的最小權重放入左子點
		t->rchild = delete_min(w); // 挑出權重集合W內的最小權重放入右子點
        t->weight = (t->lchild->weight) + (t->rchild)->weight;
        insert(w,t);
    }
}

上一篇
資料結構 - 我好想懂阿!30 天系列 (15) - Extended Binary Tree
下一篇
資料結構 - 我好想懂阿!30 天系列 (17) - m-way Search Tree
系列文
資料結構 - 我好想懂阿!30 天系列30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言