Professional Documents
Culture Documents
ch11 Part2 HuffmanCode STD
ch11 Part2 HuffmanCode STD
อ่านข้อความอีกครั้ง เพื่อเข้ารหัสตัวอักษรในข้อความตามรหัสฮัฟฟ์แมน
7 8
Huffman Coding Building a Huffman tree
A letter
Traversal of tree to determine all code words
การสร้างต้นไม้ฮัฟฟ์แมน 7 freq
0
1.0
1
ท่องไปในต้นไม้ฮัฟฟ์แมน เพื่อกําหนดรหัสฮัฟฟ์แมน o Step 1: สร้างโหนดในต้นไม้ฮัฟฟ์แมน children
ของแต่ละตัวอักษร โดยกําหนดให้ กิ่งซ้ายมีค่า 0 แต่ละโหนดเก็บตัวอักษร และความถี่ของตัวอักษร(weight/frequency)
0.35 0.65
1 กิ่งขวามีค่า 1 o Step 2: เก็บโหนดทั้งหมดใน Priority Queue (สร้างโดยใช้ MinHeap)
0 1 0 ตัวอักษร ความถี่
0.15 c d e a 000 o Step 3: นําโหนดที่มีความถี่น้อยที่สุด 2 โหนด ออกจากคิว (Dequeue)
0 1
0.20 0.31 0.34 b 001 o Step 4: สร้างต้นไม้ย่อย โดยรวมโหนดทั้งสองเข้าด้วยกัน โหนดแม่เก็บค่าความถี่
a b รวมของโหนดทั้งสอง
0.05 0.10
Encode: “bead” c 01
d 10
o Step 5: นําต้นไม้ย่อยที่สร้างขึ้น ใส่กับเข้าไปในคิว (Enqueue)
001 11 000 10
e 11 ทําซ้ํา step 3-5 ตราบเท่าที่จํานวนโหนดคิวมากกว่า 1
อัตราการบีบอัด: 10/(4*8) = 31.25%
9 10
⑤
9
A B
14 11 7 14 18 9
null null null null
18
11 12
Building a Huffman tree Building a Huffman tree
Dequeue: ลบโหนดรากออกจากฮีพ (Node 11,14) Dequeue: ลบโหนดรากออกจากฮีพ (Node 16,18)
14 -
25 สร้างต้นไม้ย่อย โดยรวมโหนดทั้ง - สร้ า งต้ น ไม้ ย่ อ ย โดยรวมโหนดทั้ ง
16 18 34
สอง (Node 11 และ 14) เข้า สอง (Node 16 และ 18) เข้าด้วยกัน
C D
16
11 14 ด้วยกัน - E
Enqueue ต้นไม้ย่อย (เพิ่มในฮีพ)
18 null null null null 16 18
null null
Enqueue ต้นไม้ย่อย (เพิ่มในฮีพ)
16
A B
7 9
18 25 null null null null
13 14
15 16
Print code from Huffman tree Print code from Huffman tree
การเข้ารหัสตัวอักษรจากต้นไม้ฮัฟฟ์แมน - printCodes(HeapNode t, array arr, top)
59 1. if t->left is not null
o ท่องไปในต้นไม้ จากโหนดราก จนถึงโหนดใบ 0 1
set arr[top]=0
- - printCodes(t->left, arr, top + 1)
o มีอาเรย์ใช้เก็บรหัสของแต่ละกิ่งในต้นไม้ที่ท่องผ่าน 25 34
0 1 0 2. if t->right is not null
กิ่งซ้ายใส่ค่า 0 ในอาเรย์ C D
1
set arr[top]=1
- E
11 14
กิ่งขวาใส่ค่า 1 ในอาเรย์ nullnull nullnull
16 18
null null
printCodes(t->right, arr, top + 1)
0 1
o ถ้าเป็นโหนดใบ ให้แสดงค่าโหนด และค่าในอาเรย์ A B
3. if t is Leaf
7 9 print t->letter
null null nullnull Loop for printing arr
17 18
·
-
% ·
#
#ooooooo
M
4) : &7.5 Y
17 /( 5*