๐ง Encoding
์ํ๋ฒณ $\Sigma$ ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ ๋ํ์ฌ
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง binary string(ํน์ binary code, codeword) ์ผ๋ก ํํํ๋ ๊ฒ
๊ฐ๋จํ ์์๋ฅผ ํ๋ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Binary code | |
A | 00 |
B | 01 |
C | 10 |
D | 11 |
์ ํ์ ์ฃผ์ด์ง๋๋ก ๋ค์ ๋ฌธ์์ด (ABBCCDA) ์ ์ธ์ฝ๋ฉ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
A | B | B | C | C | D | A |
00 | 01 | 01 | 10 | 10 | 11 | 00 |
๐ง Decoding
Encoding ๋ binary string์ ๋ค์ original string์ผ๋ก ๋ํ๋ด๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์์ ์์์์ ๋์ฝ๋ฉ ์์๋ ์ธ์ฝ๋ฉ๋ binary string์ ๋ character์ฉ ํ์ธํ๋ฉด์ ํด๋น codeword์ ๋์๋๋ ์ํ๋ฒณ์ผ๋ก ๋ฐ๊พธ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
๐ง Prefix-Free Code
๊ฐ code์ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ๋ํ์ฌ ์ธ์ฝ๋ฉ์ ์๊ฐํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Binary code | |
A | 0001 |
B | 00 |
C | 01 |
D | 001 |
์ฃผ์ด์ง ๋ฌธ์์ด์ ABBCCDA ์ ๋๋ค.
์ด๋ ์ธ์ฝ๋ฉ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
A | B | B | C | C | D | A |
0001 | 00 | 00 | 01 | 01 | 001 | 0001 |
์ธ์ฝ๋ฉ ์์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง, ๋์ฝ๋ฉ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์๋๋ string์ธ 0001์ ๋ณด๋ฉด, ์ด๊ฒ์ด A์ธ์ง BC์ธ์ง ๊ตฌ๋ถํ ์๊ฐ ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ด๋ค codeword๋ ๋ค๋ฅธ codeword์ prefix๊ฐ ๋์ง ์์์ผ ํฉ๋๋ค.
๋ค๋ฅด๊ฒ ํํํ๋ฉด ์ด๋ค codeword๋ ๋ค๋ฅธ codeword์ prefix๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ decoding์ ํ๋ ๋ฐฉ๋ฒ์ด ์ ์ผํฉ๋๋ค.
์ด์ ๊ฐ์ codeword๋ฅผ prefix-free code๋ผ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ codeword๊ฐ ์์ต๋๋ค.
Binary code | |
A | 0 |
B | 100 |
C | 101 |
D | 11 |
๐ง Prefix-free code์ Full Binary Tree
Prefix-free code์ ๊ฒฝ์ฐ codeword table์ Full Binary Tree(๊ฐ ๋ ธ๋์ child๊ฐ 0๊ฐ ํน์ 2๊ฐ๋ก๋ง ์ด๋ฃจ์ด์ง ํธ๋ฆฌ)๋ก ๋ํ๋ด๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ฐ์ ํธ๋ฆฌ๋ฅผ ๋ณด๋ฉฐ ์ค๋ช ์ ์ด์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
1. Tree์ ๊ฐ leaf node๋ ๊ธฐ์กด ๋ฌธ์์ด์ ๊ฐ ์ํ๋ฒณ์ ๋์ํฉ๋๋ค
2. ์ํ๋ฒณ A์ ๋ํ codeword๋ tree์ root์์ A๊น์ง์ path์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
3. root์์ leftchild๋ก ๊ฐ ๊ฒฝ์ฐ cordword ์ 0, rightchild๋ก ๊ฐ ๊ฒฝ์ฐ 1์ concatnation ํด์ฃผ๋ ๊ณผ์ ์ ํตํด codeword๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
4. ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก decoding ๋ํ tree๋ง์ ์ด์ฉํ์ฌ ๊ฐ๋ฅํฉ๋๋ค.
โญ๏ธ Fixed-length encoding
๊ฐ ์ํ๋ฒณ์ ํด๋นํ๋ codeword์ ๊ธธ์ด๊ฐ ๋ชจ๋ ๋์ผํ ์ธ์ฝ๋ฉ์ ์๋ฏธํฉ๋๋ค.
Fixed-length encoding์ ์ฌ์ฉํ๋ฉด codeword์ ๊ธธ์ด ๋จ์๋ก ํ๋ฒ์ ํ ๋จ์ด์ฉ ๋์ฝ๋ฉํ ์ ์์ผ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฅด๊ณ ๊ฐํธํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์์ ์๊ฐ ๋ง์์ง๋ฉด codeword์ ๊ธธ์ด๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์ encoding๋ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๋งค์ฐ ๊ธธ์ด์ง ์ ์์ต๋๋ค.
โญ๏ธ Variable-length encoding
๊ฐ ์ํ๋ฒณ์ ํด๋นํ๋ codeword์ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ์ธ์ฝ๋ฉ์ ์๋ฏธํฉ๋๋ค.
encoding๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ธธ์ด๋ ์งง์์๋ก ์ข์ผ๋ฉฐ prefix-free code๋ฅผ ์ด์ฉํ์ฌ encoding์ ํ์ ๋ encoding๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ธธ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์์ต๋๋ค.
$$\Sigma^{n}_{i=1}f_i \cdot (\;depth \; of \; alphabet\; i \; in \;tree\;)$$
์ด๋ $f_i$ ๋ ๊ธฐ์กด ๋ฌธ์์ด์ ์ํ i์ ๊ฐ์๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ํ root node์ depth๋ 0์ ๋๋ค.
๐ง Huffman Encoding
ํํ๋ง ์ธ์ฝ๋ฉ์ ๋ชฉ์ ์ Encoding ๊ฒฐ๊ณผ๋ฌผ์ ๊ธธ์ด๊ฐ ์ต์๊ฐ ๋๋๋ก ํ๋ tree๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค.
ํํ๋ง ์ธ์ฝ๋ฉ์ ๋์ํ๋ Full Binary Tree๋ฅผ Huffman tree ๋ผ ํฉ๋๋ค.
ํํ๋ง ์ธ์ฝ๋ฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฑ์ฅํ๋ ๋ฌธ์์ ๋น๋์๊ฐ ํด์๋ก ๋์ํ๋ codeword์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ ์ฒด ๊ฒฐ๊ณผ๋ฌผ์ ๊ธธ์ด๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค.
โญ๏ธ Key Lemma
๋น๋์(frequency)๊ฐ ์ ์ผ ์์ ๋ leaf node(= alphabet)๋ ๋ฐ๋์ Huffman tree ์์ ์ ์ผ ํฐ depth๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
์ฆ๋ช ์ ๊ท๋ฅ๋ฒ์ ํตํด ๊ฐ๋ฅํฉ๋๋ค.
Depth๊ฐ ๊ฐ์ฅ ํฐ ๋ leaf node $i, j$ ๋ณด๋ค ๋น๋์๊ฐ ์์ ๋ค๋ฅธ leaf node $k$ ๋ฅผ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
$i$ ์ $k$ ๋ฅผ Huffman tree์์ ๊ต์ฒด ์ encoding ๊ฒฐ๊ณผ๊ฐ ์ค์ด๋ญ๋๋ค.
๋ฐ๋ผ์ Huffman encoding์ด ์ต์ ํด๋ผ๋ ์ฌ์ค์ ๋ชจ์๋ฉ๋๋ค.
๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๊ธฐ์กด ๋ฌธ์์ด์์ ๊ฐ ์ํ๋ฒณ์ ๋น๋๋ฅผ ๊ตฌํฉ๋๋ค.
2. ๊ฐ๊ฐ์ ์ํ๋ฒณ์ ํด๋นํ๋ Leaf Node๋ฅผ ์์ฑํฉ๋๋ค.
3. ๋ฑ์ฅ ๋น๋์๊ฐ ๊ฐ์ฅ ์์ leaf node ๋๊ฐ๋ฅผ ์ ํํ์ฌ ์ด ๋์ left, right child๋ก ๊ฐ์ง๋ parent node๋ฅผ ์์ฑํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ ธ๋์ ๋น๋์๋ left์ right subtree์ ๋น๋์์ ํฉ์ ๋๋ค.
4. node๊ฐ ํ๋๋ง ๋จ์ ๋๊น์ง ๋จ์์๋ node๋ค์ ๋ํ์ฌ (3)์ ๋ฐ๋ณตํฉ๋๋ค.
โญ๏ธ ์์
์์ ๋ฌธ์์ด์ ์๋์ ๊ฐ์ต๋๋ค.
BDBBEACDEEAEEDBDCD
์ฐ์ ํด๋น ๋ฌธ์์ด์์ ๊ฐ ๋จ์ด๋ณ ๋น๋์๋ฅผ ๊ตฌํฉ๋๋ค.
$f_A$ | $f_B$ | $f_C$ | $f_D$ | $f_E$ |
2 | 4 | 2 | 5 | 5 |
์ด์ ๊ฐ๊ฐ์ ์ํ๋ฒณ์ ํด๋นํ๋ leaf node๋ฅผ ์์ฑํฉ๋๋ค.
๋น๋์๊ฐ ๊ฐ์ฅ ์์ leafnode ๋๊ฐ๋ฅผ ์ ํํ์ฌ ์ด ๋์ left์ right child๋ก ๊ฐ์ง๋ ์ด์ง ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
$f_{A+C}$ | $f_B$ | $f_D$ | $f_E$ | |
4 | 4 | 5 | 5 |
์ ๊ณผ์ ์ node๊ฐ ํ๋๋ง ๋จ์ ๋๊น์ง ๊ณ์ํด์ ๋ฐ๋ณตํฉ๋๋ค.
$f_{A+C+B}$ | $f_D$ | $f_E$ | ||
8 | 5 | 5 |
$f_{A+C+B}$ | $f_{D+E}$ |
8 | 10 |
$f_{A+C+B+D+E}$ |
18 |
๋ ธ๋๊ฐ ํ๋๋ง ๋จ์์ผ๋ฏ๋ก ์ข ๋ฃํ ๋ค, ์ผ์ชฝ edge๋ฅผ ๊ฑฐ์น๋ฉด 0, ์ค๋ฅธ์ชฝ edge๋ฅผ ๊ฑฐ์น๋ฉด 1๋ก ์ค์ ํ์ฌ ๊ฐ ์ํ๋ฒณ์ ๋ํ์ฌ binary code๋ฅผ ์ค์ ํฉ๋๋ค.
Binary Code | |
A | 000 |
B | 01 |
C | 001 |
D | 10 |
E | 11 |
์ด๋ฅผ ํตํด ์ธ์ฝ๋ฉ์ ์งํํ๋ฉด ์๋ฃ๋ฉ๋๋ค.
๐ง Priority Queue๋ฅผ ํตํ ๊ตฌํ
์ ๊ณผ์ ์ ๋น๋์๋ฅผ ์ฐ์ ์์๋ก ๊ฐ์ง๋ ์ฐ์ ์์ ํ๋ฅผ ํตํด ๊ตฌํํ ์ ์์ต๋๋ค.
1. ๋น๋์๊ฐ ๊ฐ์ฅ ์์ ๋ ์ํ๋ฒณ์ ์ ํํ๊ธฐ : deletemin
2. 1์์ ์ ํํ ๋ alphabet์ ํด๋นํ๋ node๋ฅผ left์ right๋ก ๊ฐ์ง๋ tree ์์ฑ
3. 1์์ ์ ํํ ๋ alphabet์ ํฉ์น ์๋ก์ด alphabet์ ์์ฑ ํ ์ถ๊ฐ : insert
๐ง ์๋์ฝ๋
โญ๏ธ ์๊ฐ ๋ณต์ก๋
๊ธฐ์กด ๋ฌธ์์ด์์ ๊ฐ alphabet์ ๋น๋์๋ฅผ ์ธก์ : $O(n)$
๋น๋์ ์ ๋ณด๋ฅผ ๋ด์ node ์์ฑํ์ฌ Priority queue์ ์ฝ์ (insert n ๋ฒ) : $O(n \; log\; n)$
Priority Queue์์ deletemin 2(n-1) ๋ฒ๊ณผ insert n-1 ๋ฒ : $O(n\;log\;n)$
๋ฐ๋ผ์ ์ด ์๊ฐ ๋ณต์ก๋๋ $O(n\;log\;n)$ ์ ๋๋ค.
'๐ฅ Computer Science > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DP (1) - LIS(์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด) (0) | 2022.11.10 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] DP (0) - DP ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ (0) | 2022.11.09 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (2) - Interval scheduling (0) | 2022.10.21 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (1) - ์ต์ ์ ์ฅ ํธ๋ฆฌ (Minimum Spanning Tree) (0) | 2022.10.21 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (0) -๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.13 |