เดนเดซเตเดฎเดพเตป เด•เด‚เดชเตเดฐเดทเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚

เด•เต‹เดดเตโ€Œเดธเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต "เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เตเดณเตเดณ เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เตพ" เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏ เดฎเดฑเตเดฑเตŠเดฐเต เดฎเต†เดฑเตเดฑเต€เดฐเดฟเดฏเดฒเดฟเดจเตเดฑเต† เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟ.

เดซเดฏเตฝ เด•เด‚เดชเตเดฐเดทเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เด†เดถเดฏเด‚ เดฐเต‚เดชเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจ เด’เดฐเต เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด†เดฃเต เดนเดซเตเดฎเดพเตป เด•เต‹เดกเดฟเด‚เด—เต. เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดซเดฟเด•เตเดธเดกเต, เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฒเต†เด™เตเดคเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต, เด…เดฆเตเดตเดฟเดคเต€เดฏเดฎเดพเดฏเดฟ เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด•เต‹เดกเตเด•เตพ, เดชเตเดฐเดฟเดซเดฟเด•เตเดธเต เดจเดฟเดฏเดฎเด™เตเด™เตพ, เด’เดฐเต เดนเดซเตเดฎเดพเตป เดŸเตเดฐเต€ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตฝ เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฎเตเดฎเตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เด“เดฐเต‹ เดชเตเดฐเดคเต€เด•เดตเตเด‚ 0 เดฏเตเดŸเต†เดฏเตเด‚ 1 เดจเตเดฑเต†เดฏเตเด‚ เด’เดฐเต เด•เตเดฐเดฎเดฎเดพเดฏเดฟ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ 8 เดฌเดฟเดฑเตเดฑเตเด•เตพ เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเตเดตเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เดฑเดฟเดฏเดพเด‚. เด“เดฐเต‹ เดชเตเดฐเดคเต€เด•เดตเตเด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป เด’เดฐเต‡ เดจเดฟเดถเตเดšเดฟเดค เดŽเดฃเตเดฃเด‚ เดฌเดฟเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ เด‡เดคเดฟเดจเต† เดซเดฟเด•เตเดธเดกเต เดฒเต†เด™เตเดคเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฎเตเด•เตเด•เต เดตเดพเดšเด•เด‚ เดจเตฝเด•เดฟเดฏเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚. เด’เดฐเต เดชเตเดฐเดคเต€เด•เด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดธเตเดฅเดฒเดคเตเดคเดฟเดจเตเดฑเต† เด…เดณเดตเต เดŽเด™เตเด™เดจเต† เด•เตเดฑเดฏเตเด•เตเด•เดพเด‚?

เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฒเต†เด™เตเดคเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เดพเดฃเต เดชเตเดฐเดงเดพเดจ เด†เดถเดฏเด‚. เดตเดพเดšเด•เดคเตเดคเดฟเดฒเต† เดšเดฟเดฒ เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเตฝ เดคเดตเดฃ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เดจเดฎเตเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ (เด‡เดตเดฟเดŸเต† เด•เดพเดฃเตเด•) เด•เตเดฑเดšเตเดšเต เดฌเดฟเดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเตเดŸเต† เด…เดคเต‡ เดถเตเดฐเต‡เดฃเดฟเดฏเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต. เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฒเต†เด™เตเดคเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เดฟเตฝ, เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเดพเดšเด•เดคเตเดคเดฟเตฝ เดŽเดคเตเดฐ เดคเดตเดฃ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดŽเดฃเตเดฃเด‚ เดฌเดฟเดฑเตเดฑเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเต. เด†เดคเตเดฏเดจเตเดคเดฟเด•เดฎเดพเดฏเดฟ, เดšเดฟเดฒ เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ 1 เดฌเดฟเดฑเตเดฑเต เดตเดฐเต† เดŽเดŸเตเดคเตเดคเต‡เด•เตเด•เดพเด‚, เดฎเดฑเตเดฑเตเดณเตเดณเดตเตผ 2 เดฌเดฟเดฑเตเดฑเตเด•เดณเต‹ 3 เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเดฟเตฝ เด•เต‚เดŸเตเดคเดฒเต‹ เดŽเดŸเตเดคเตเดคเต‡เด•เตเด•เดพเด‚. เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฒเต†เด™เตเดคเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เดฟเดจเตเดฑเต† เดชเตเดฐเดถเตเดจเด‚ เดธเต€เด•เตเดตเตปเดธเดฟเดจเตเดฑเต† เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดกเต€เด•เต‹เดกเดฟเด‚เด—เต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต.

เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต, เดฌเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต† เด•เตเดฐเดฎเด‚ เด…เดฑเดฟเดฏเตเดจเตเดจเดคเต, เด…เดคเต เด…เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต?

เดฒเตˆเตป เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด• "abacdab". เด‡เดคเดฟเดจเต 8 เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเตเดฃเตเดŸเต, เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดฆเตˆเตผเด˜เตเดฏเด‚ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เด…เดคเต เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป 64 เดฌเดฟเดฑเตเดฑเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดšเดฟเดนเตเดจ เด†เดตเตƒเดคเตเดคเดฟ เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด• "เดŽ", "เดฌเดฟ", "เดธเดฟ" ะธ "เดกเดฟ" เดฏเดฅเดพเด•เตเดฐเดฎเด‚ 4, 2, 1, 1 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต. เดจเดฎเตเด•เตเด•เต เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚ "abacdab" เด•เตเดฑเดšเตเดšเต เดฌเดฟเดฑเตเดฑเตเด•เตพ, เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต "เดŸเต" เดŽเดจเตเดจเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เดชเดคเดฟเดตเดพเดฏเดฟ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต "เดฌเดฟ"เด’เดชเตเดชเด‚ "เดฌเดฟ" เดŽเดจเตเดจเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เดชเดคเดฟเดตเดพเดฏเดฟ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต "เดธเดฟ" ะธ "เดกเดฟ". เดจเดฎเตเด•เตเด•เต เด•เต‹เดกเดฟเด‚เด—เดฟเดฒเต‚เดŸเต† เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚ "เดŸเต" 0 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏ เด’เดฐเต เดฌเดฟเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, "เดฌเดฟ" เดžเด™เตเด™เตพ เดฐเดฃเตเดŸเต-เดฌเดฟเดฑเตเดฑเต เด•เต‹เดกเต 11 เดจเตฝเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เดฎเต‚เดจเตเดจเต เดฌเดฟเดฑเตเดฑเตเด•เตพ 100, 011 เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเด‚ "เดธเดฟ" ะธ "เดกเดฟ".

เดซเดฒเดฎเดพเดฏเดฟ, เดจเดฎเตเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚:

a
0

b
11

c
100

d
011

เด…เด™เตเด™เดจเต† เดฒเตˆเตป "abacdab" เดžเด™เตเด™เตพ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเด‚ 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

เดˆ เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดธเตเดŸเตเดฐเดฟเด‚เด—เต "abacdab" เด†เดฏเดฟ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚ 00100100011010 (0|0|10|0|100|011|0|10). เด‡เดตเดฟเดŸเต†เดฏเตเด‚ 00100100011010 เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดตเตเดฏเด•เตเดคเดคเดฏเดฟเดฒเตเดฒเดพเดคเต† เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เดฏเดฅเดพเตผเดคเตเดฅ เดธเตโ€ŒเดŸเตเดฐเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚ "abacdab".

เดนเดซเตเดฎเดพเตป เด•เต‹เดกเดฟเด‚เด—เต

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเดฎเตพ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฒเต†เด™เตเดคเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เตเด‚ เดชเตเดฐเดฟเดซเดฟเด•เตเดธเต เดฑเต‚เดณเตเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดคเต, เดจเดฎเตเด•เตเด•เต เดนเดซเตเดฎเดพเตป เดŽเตปเด•เต‹เดกเดฟเด‚เด—เดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเด‚.

เดฌเตˆเดจเดฑเดฟ เดฎเดฐเด™เตเด™เดณเตเดŸเต† เดธเตƒเดทเตเดŸเดฟเดฏเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเดพเดฃเต เดฐเต€เดคเดฟ. เด…เดคเดฟเตฝ, เดจเต‹เดกเต เด…เดจเตเดคเดฟเดฎเดฎเต‹ เด†เดจเตเดคเดฐเดฟเด•เดฎเต‹ เด†เด•เดพเด‚. เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ, เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เด‡เดฒเด•เดณเดพเดฏเดฟ (เดŸเต†เตผเดฎเดฟเดจเดฒเตเด•เตพ) เด•เดฃเด•เตเด•เดพเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต, เด…เดคเต เดšเดฟเดนเตเดจเดคเตเดคเต†เดฏเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดญเดพเดฐเดคเตเดคเต†เดฏเตเด‚ เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต (เด…เดคเดพเดฏเดคเต, เดธเด‚เดญเดตเดคเตเดคเดฟเดจเตเดฑเต† เด†เดตเตƒเดคเตเดคเดฟ). เด†เดจเตเดคเดฐเดฟเด• เดจเต‹เดกเตเด•เดณเดฟเตฝ เดชเตเดฐเดคเต€เด•เดคเตเดคเดฟเดจเตเดฑเต† เดญเดพเดฐเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เด•เต‚เดŸเดพเดคเต† เดฐเดฃเตเดŸเต เดกเดฟเดธเต†เตปเดกเดจเตเดฑเต เดจเต‹เดกเตเด•เดณเต† เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดชเตŠเดคเต เด‰เดŸเดฎเตเดชเดŸเดฟ เดชเตเดฐเด•เดพเดฐเด‚, เดฌเดฟเดฑเตเดฑเต ยซ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(เดฒเต‹เด—เต(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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•