แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜

แƒ™แƒฃแƒ แƒกแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ” "แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก" แƒ›แƒแƒแƒ›แƒ–แƒแƒ“แƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ›แƒแƒกแƒแƒšแƒ˜แƒก แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜.

Huffman แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒงแƒแƒšแƒ˜แƒ‘แƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒ˜แƒ“แƒ”แƒแƒก. แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ— แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ”, แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ“แƒ”แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒแƒ“ แƒ™แƒแƒ“แƒ”แƒ‘แƒ–แƒ”, แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒฎแƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒแƒ–แƒ”.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ 0 แƒ“แƒ 1-แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒ˜แƒฆแƒ”แƒ‘แƒก 8 แƒ‘แƒ˜แƒขแƒก. แƒแƒ›แƒแƒก แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“.

แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ›แƒแƒ’แƒ•แƒชแƒ”แƒก แƒขแƒ”แƒฅแƒกแƒขแƒ˜. แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ•แƒแƒ›แƒชแƒ˜แƒ แƒแƒ— แƒ”แƒ แƒ—แƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ?

แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ˜แƒ“แƒ”แƒ แƒแƒ แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ˜แƒก แƒคแƒแƒฅแƒขแƒ˜, แƒ แƒแƒ› แƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ แƒฃแƒคแƒ แƒ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒ•แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒกแƒฎแƒ•แƒ”แƒ‘แƒ˜ (แƒกแƒ›. ะทะดะตััŒ) แƒจแƒ”แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒแƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒจแƒ˜. แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒฉแƒ•แƒ”แƒœ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒก แƒ•แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒ— แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก, แƒ˜แƒ›แƒ˜แƒกแƒ“แƒ แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒฉแƒœแƒ“แƒ”แƒ‘แƒ˜แƒแƒœ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜. แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒก 1 แƒ‘แƒ˜แƒขแƒ˜, แƒฎแƒแƒšแƒ แƒ–แƒแƒ’แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒก 2 แƒ‘แƒ˜แƒขแƒ˜, 3 แƒแƒœ แƒ›แƒ”แƒขแƒ˜. แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒแƒ.

แƒ แƒแƒ’แƒแƒ , แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒก แƒชแƒแƒ“แƒœแƒ˜แƒ—, แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ?

แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒฎแƒแƒ–แƒ˜ "แƒแƒ‘แƒแƒ“แƒแƒ‘แƒ˜". แƒ›แƒแƒก แƒแƒฅแƒ•แƒก 8 แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ แƒ“แƒ แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ 64 แƒ‘แƒ˜แƒขแƒ˜. แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ” "แƒ", "แƒ‘", "แƒ’" ะธ "แƒ“" แƒฃแƒ“แƒ แƒ˜แƒก 4, 2, 1, 1 แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“. แƒจแƒ”แƒ•แƒ”แƒชแƒแƒ“แƒแƒ— แƒฌแƒแƒ แƒ›แƒแƒ•แƒ˜แƒ“แƒ’แƒ˜แƒœแƒแƒ— "แƒแƒ‘แƒแƒ“แƒแƒ‘แƒ˜" แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜ แƒ‘แƒ˜แƒขแƒ˜, แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— "to" แƒฎแƒ“แƒ”แƒ‘แƒ แƒฃแƒคแƒ แƒ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ•แƒ˜แƒ“แƒ แƒ” "แƒ‘"แƒฎแƒแƒšแƒ "แƒ‘" แƒฎแƒ“แƒ”แƒ‘แƒ แƒฃแƒคแƒ แƒ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ•แƒ˜แƒ“แƒ แƒ” "c" ะธ "แƒ“". แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ— "to" แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒ˜แƒขแƒ˜แƒ— 0-แƒ˜แƒก แƒขแƒแƒšแƒ˜, "แƒ‘" แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒ— แƒแƒ แƒ‘แƒ˜แƒขแƒ˜แƒแƒœ แƒ™แƒแƒ“แƒก 11, แƒฎแƒแƒšแƒ แƒกแƒแƒ›แƒ˜ แƒ‘แƒ˜แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— 100 แƒ“แƒ 011 แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒจแƒ˜แƒคแƒ แƒแƒ•แƒ— "c" ะธ "แƒ“".

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ—:

a
0

b
11

c
100

d
011

แƒแƒกแƒ” แƒ แƒแƒ› แƒฎแƒแƒ–แƒ˜ "แƒแƒ‘แƒแƒ“แƒแƒ‘แƒ˜" แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒจแƒ˜แƒคแƒ แƒแƒ•แƒ— แƒ แƒแƒ’แƒแƒ แƒช 00110100011011 (0|0|11|0|100|011|0|11)แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ—แƒฃแƒ›แƒชแƒ, แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ“แƒ”แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒ แƒแƒชแƒ แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ— แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒแƒก 00110100011011, แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒแƒ แƒแƒ–แƒ แƒแƒ•แƒแƒœ แƒจแƒ”แƒ“แƒ”แƒ’แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒ แƒแƒ’แƒแƒ แƒช:

0|011|0|100|011|0|11    adacdab
0|0|11|0|100|0|11|011   aabacabd
0|011|0|100|0|11|0|11   adacabab 

...
แƒ.แƒจ.

แƒแƒ› แƒ’แƒแƒฃแƒ แƒ™แƒ•แƒ”แƒ•แƒšแƒแƒ‘แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒก แƒ˜แƒกแƒ”แƒ— แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒ˜, แƒ แƒแƒช แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒฎแƒ แƒ˜แƒ• แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒก, แƒ แƒแƒ› แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒ–แƒ˜แƒ—. แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก, แƒ แƒแƒ› แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒ™แƒแƒ“แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜. แƒ™แƒแƒ“แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒ— แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒฌแƒแƒ แƒ›แƒแƒกแƒแƒฉแƒ”แƒœแƒแƒ“. แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ 0 แƒแƒ แƒ˜แƒก แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜ 011, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒฆแƒ•แƒ”แƒ•แƒก แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒก. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒก แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ (แƒ“แƒ แƒžแƒ˜แƒ แƒ˜แƒฅแƒ˜แƒ—).

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก. แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒงแƒแƒคแƒ— แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒก "แƒ", "แƒ‘", "แƒ’" ะธ "แƒ“" แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ”แƒœ แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒก.

a
0

b
10

c
110

d
111

แƒแƒ› แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ "แƒแƒ‘แƒแƒ“แƒแƒ‘แƒ˜" แƒ“แƒแƒจแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช 00100100011010 (0|0|10|0|100|011|0|10). แƒ›แƒแƒ’แƒ แƒแƒ› 00100100011010 แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒ•แƒซแƒšแƒ”แƒ‘แƒ— แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒแƒก แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒแƒก "แƒแƒ‘แƒแƒ“แƒแƒ‘แƒ˜".

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ

แƒแƒฎแƒšแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฌแƒ”แƒกแƒ˜, แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒแƒ— แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒแƒ–แƒ”.

แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก. แƒ›แƒแƒกแƒจแƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒแƒœ แƒจแƒ˜แƒ“แƒ. แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“, แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ แƒคแƒแƒ—แƒšแƒ”แƒ‘แƒแƒ“ (แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒ”แƒ‘แƒ˜), แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ—แƒแƒ•แƒแƒ“ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒ“แƒ แƒ›แƒ˜แƒก แƒฌแƒแƒœแƒแƒก (แƒแƒœแƒฃ แƒ’แƒแƒฉแƒ”แƒœแƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ”แƒก). แƒจแƒ˜แƒ“แƒ แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒฌแƒแƒœแƒแƒก แƒ“แƒ แƒ”แƒฎแƒ”แƒ‘แƒ แƒแƒ  แƒจแƒ—แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒš แƒ™แƒ•แƒแƒœแƒซแƒก. แƒกแƒแƒ”แƒ แƒ—แƒ แƒจแƒ”แƒ—แƒแƒœแƒฎแƒ›แƒ”แƒ‘แƒ˜แƒ—, แƒชแƒแƒขแƒ ยซ0ยป แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ›แƒแƒ แƒชแƒฎแƒ”แƒœแƒ แƒจแƒขแƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒ ยซ1ยป - แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ•. แƒกแƒ แƒฃแƒš แƒฎแƒ”แƒจแƒ˜ N แƒคแƒแƒ—แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ N-1 แƒจแƒ˜แƒ“แƒ แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜. แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒฎแƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ’แƒแƒ›แƒแƒฃแƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒฃแƒš แƒ แƒ˜แƒ’แƒก แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒฎแƒ˜แƒก แƒแƒกแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒกแƒแƒ“แƒแƒช แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒ™แƒ•แƒแƒœแƒซแƒก แƒ›แƒ˜แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒฃแƒ›แƒแƒฆแƒšแƒ”แƒกแƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ˜. แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒฅแƒ•แƒ”แƒ›แƒแƒ—:

  1. แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒคแƒแƒ—แƒšแƒ˜แƒก แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒฃแƒš แƒ แƒ˜แƒ’แƒจแƒ˜.
  2. แƒกแƒแƒœแƒแƒ› แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ”แƒ แƒ—แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒคแƒฃแƒ แƒชแƒ”แƒšแƒ˜แƒ, แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:
    • แƒแƒ›แƒแƒ˜แƒฆแƒ”แƒ— แƒแƒ แƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒฃแƒ›แƒแƒฆแƒšแƒ”แƒกแƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ˜แƒก (แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒก) แƒ แƒ˜แƒ’แƒ˜แƒ“แƒแƒœ;
    • แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒจแƒ˜แƒ“แƒ แƒ™แƒ•แƒแƒœแƒซแƒ˜, แƒกแƒแƒ“แƒแƒช แƒ”แƒก แƒแƒ แƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ‘แƒแƒ•แƒจแƒ•แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒฉแƒ”แƒœแƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ” แƒขแƒแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒแƒ› แƒแƒ แƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ”แƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒ›แƒ˜แƒก.
    • แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒฃแƒš แƒ แƒ˜แƒ’แƒจแƒ˜.
  3. แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒ แƒฉแƒ”แƒœแƒ˜แƒšแƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒคแƒ”แƒกแƒ•แƒ˜ แƒ“แƒ แƒ”แƒก แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒฎแƒ˜แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก.

แƒฌแƒแƒ แƒ›แƒแƒ˜แƒ“แƒ’แƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒขแƒ”แƒฅแƒกแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ "แƒ แƒ‘ แƒ’ แƒ“" ะธ "แƒ“แƒ"แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ”แƒ 15, 7, 6, 6 แƒ“แƒ 5, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“. แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ˜แƒšแƒฃแƒกแƒขแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒกแƒแƒฎแƒแƒ•แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒก.

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜

แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜ แƒคแƒ”แƒกแƒ•แƒ˜แƒ“แƒแƒœ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ‘แƒแƒšแƒ แƒ™แƒ•แƒแƒœแƒซแƒแƒ›แƒ“แƒ” แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒ™แƒแƒ“แƒก (แƒแƒกแƒ”แƒ•แƒ” แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒฐแƒฃแƒคแƒ›แƒแƒœแƒ˜แƒก แƒ™แƒแƒ“แƒ˜), แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒแƒ› แƒ‘แƒแƒšแƒ แƒ™แƒ•แƒแƒœแƒซแƒ—แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก.

แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜
แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒฎแƒ”

แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒœแƒแƒฎแƒแƒ•แƒ— แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒแƒก C++-แƒกแƒ แƒ“แƒ Java-แƒจแƒ˜:

#include <iostream>
#include <string>
#include <queue>
#include <unordered_map>
using namespace std;

// A Tree node
struct Node
{
	char ch;
	int freq;
	Node *left, *right;
};

// Function to allocate a new tree node
Node* getNode(char ch, int freq, Node* left, Node* right)
{
	Node* node = new Node();

	node->ch = ch;
	node->freq = freq;
	node->left = left;
	node->right = right;

	return node;
}

// Comparison object to be used to order the heap
struct comp
{
	bool operator()(Node* l, Node* r)
	{
		// highest priority item has lowest frequency
		return l->freq > r->freq;
	}
};

// traverse the Huffman Tree and store Huffman Codes
// in a map.
void encode(Node* root, string str,
			unordered_map<char, string> &huffmanCode)
{
	if (root == nullptr)
		return;

	// found a leaf node
	if (!root->left && !root->right) {
		huffmanCode[root->ch] = str;
	}

	encode(root->left, str + "0", huffmanCode);
	encode(root->right, str + "1", huffmanCode);
}

// traverse the Huffman Tree and decode the encoded string
void decode(Node* root, int &index, string str)
{
	if (root == nullptr) {
		return;
	}

	// found a leaf node
	if (!root->left && !root->right)
	{
		cout << root->ch;
		return;
	}

	index++;

	if (str[index] =='0')
		decode(root->left, index, str);
	else
		decode(root->right, index, str);
}

// Builds Huffman Tree and decode given input text
void buildHuffmanTree(string text)
{
	// count frequency of appearance of each character
	// and store it in a map
	unordered_map<char, int> freq;
	for (char ch: text) {
		freq[ch]++;
	}

	// Create a priority queue to store live nodes of
	// Huffman tree;
	priority_queue<Node*, vector<Node*>, comp> pq;

	// Create a leaf node for each character and add it
	// to the priority queue.
	for (auto pair: freq) {
		pq.push(getNode(pair.first, pair.second, nullptr, nullptr));
	}

	// do till there is more than one node in the queue
	while (pq.size() != 1)
	{
		// Remove the two nodes of highest priority
		// (lowest frequency) from the queue
		Node *left = pq.top(); pq.pop();
		Node *right = pq.top();	pq.pop();

		// Create a new internal node with these two nodes
		// as children and with frequency equal to the sum
		// of the two nodes' frequencies. Add the new node
		// to the priority queue.
		int sum = left->freq + right->freq;
		pq.push(getNode('', sum, left, right));
	}

	// root stores pointer to root of Huffman Tree
	Node* root = pq.top();

	// traverse the Huffman Tree and store Huffman Codes
	// in a map. Also prints them
	unordered_map<char, string> huffmanCode;
	encode(root, "", huffmanCode);

	cout << "Huffman Codes are :n" << 'n';
	for (auto pair: huffmanCode) {
		cout << pair.first << " " << pair.second << 'n';
	}

	cout << "nOriginal string was :n" << text << 'n';

	// print encoded string
	string str = "";
	for (char ch: text) {
		str += huffmanCode[ch];
	}

	cout << "nEncoded string is :n" << str << 'n';

	// traverse the Huffman Tree again and this time
	// decode the encoded string
	int index = -1;
	cout << "nDecoded string is: n";
	while (index < (int)str.size() - 2) {
		decode(root, index, str);
	}
}

// Huffman coding algorithm
int main()
{
	string text = "Huffman coding is a data compression algorithm.";

	buildHuffmanTree(text);

	return 0;
}

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

// A Tree node
class Node
{
	char ch;
	int freq;
	Node left = null, right = null;

	Node(char ch, int freq)
	{
		this.ch = ch;
		this.freq = freq;
	}

	public Node(char ch, int freq, Node left, Node right) {
		this.ch = ch;
		this.freq = freq;
		this.left = left;
		this.right = right;
	}
};

class Huffman
{
	// traverse the Huffman Tree and store Huffman Codes
	// in a map.
	public static void encode(Node root, String str,
							  Map<Character, String> huffmanCode)
	{
		if (root == null)
			return;

		// found a leaf node
		if (root.left == null && root.right == null) {
			huffmanCode.put(root.ch, str);
		}


		encode(root.left, str + "0", huffmanCode);
		encode(root.right, str + "1", huffmanCode);
	}

	// traverse the Huffman Tree and decode the encoded string
	public static int decode(Node root, int index, StringBuilder sb)
	{
		if (root == null)
			return index;

		// found a leaf node
		if (root.left == null && root.right == null)
		{
			System.out.print(root.ch);
			return index;
		}

		index++;

		if (sb.charAt(index) == '0')
			index = decode(root.left, index, sb);
		else
			index = decode(root.right, index, sb);

		return index;
	}

	// Builds Huffman Tree and huffmanCode and decode given input text
	public static void buildHuffmanTree(String text)
	{
		// count frequency of appearance of each character
		// and store it in a map
		Map<Character, Integer> freq = new HashMap<>();
		for (int i = 0 ; i < text.length(); i++) {
			if (!freq.containsKey(text.charAt(i))) {
				freq.put(text.charAt(i), 0);
			}
			freq.put(text.charAt(i), freq.get(text.charAt(i)) + 1);
		}

		// Create a priority queue to store live nodes of Huffman tree
		// Notice that highest priority item has lowest frequency
		PriorityQueue<Node> pq = new PriorityQueue<>(
										(l, r) -> l.freq - r.freq);

		// Create a leaf node for each character and add it
		// to the priority queue.
		for (Map.Entry<Character, Integer> entry : freq.entrySet()) {
			pq.add(new Node(entry.getKey(), entry.getValue()));
		}

		// do till there is more than one node in the queue
		while (pq.size() != 1)
		{
			// Remove the two nodes of highest priority
			// (lowest frequency) from the queue
			Node left = pq.poll();
			Node right = pq.poll();

			// Create a new internal node with these two nodes as children 
			// and with frequency equal to the sum of the two nodes
			// frequencies. Add the new node to the priority queue.
			int sum = left.freq + right.freq;
			pq.add(new Node('', sum, left, right));
		}

		// root stores pointer to root of Huffman Tree
		Node root = pq.peek();

		// traverse the Huffman tree and store the Huffman codes in a map
		Map<Character, String> huffmanCode = new HashMap<>();
		encode(root, "", huffmanCode);

		// print the Huffman codes
		System.out.println("Huffman Codes are :n");
		for (Map.Entry<Character, String> entry : huffmanCode.entrySet()) {
			System.out.println(entry.getKey() + " " + entry.getValue());
		}

		System.out.println("nOriginal string was :n" + text);

		// print encoded string
		StringBuilder sb = new StringBuilder();
		for (int i = 0 ; i < text.length(); i++) {
			sb.append(huffmanCode.get(text.charAt(i)));
		}

		System.out.println("nEncoded string is :n" + sb);

		// traverse the Huffman Tree again and this time
		// decode the encoded string
		int index = -1;
		System.out.println("nDecoded string is: n");
		while (index < sb.length() - 2) {
			index = decode(root, index, sb);
		}
	}

	public static void main(String[] args)
	{
		String text = "Huffman coding is a data compression algorithm.";

		buildHuffmanTree(text);
	}
}

แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ: แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก 47 * 8 = 376 แƒ‘แƒ˜แƒขแƒ˜, แƒฎแƒแƒšแƒ แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ 194 แƒ‘แƒ˜แƒขแƒ˜, แƒ”.แƒ˜. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒฃแƒšแƒ˜แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 48%-แƒ˜แƒ—. แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš C++ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒšแƒแƒกแƒก แƒ“แƒแƒจแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“, แƒ แƒแƒ—แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒแƒ“แƒ”แƒก.

แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒฃแƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ”แƒœ แƒ—แƒ˜แƒ—แƒ แƒฉแƒแƒกแƒ›แƒแƒก O(log(N)) แƒ“แƒ แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒ แƒฃแƒš แƒแƒ แƒแƒ‘แƒ˜แƒ— แƒฎแƒ”แƒจแƒ˜ N แƒคแƒแƒ—แƒšแƒ”แƒ‘แƒ˜ แƒ˜แƒ›แƒงแƒแƒคแƒ”แƒ‘แƒ 2N-1 แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒฎแƒ” แƒแƒ แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก O(Nlog(N)) แƒ“แƒ แƒ, แƒกแƒแƒ“ N - แƒžแƒ”แƒ แƒกแƒแƒœแƒแƒŸแƒ”แƒ‘แƒ˜.

แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜:

en.wikipedia.org/wiki/Huffman_coding
en.wikipedia.org/wiki/Variable-length_code
www.youtube.com/watch?v=5wRPin4oxCo

แƒจแƒ”แƒ˜แƒขแƒงแƒ•แƒ”แƒ— แƒ›แƒ”แƒขแƒ˜ แƒ™แƒฃแƒ แƒกแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ