เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป

เดŽเตปเดŸเตเดฐเดฟ

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดžเดพเตป เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเดจเดฟเตฝ เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเดฏเต‹เด—เดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด†เตผเด•เตเด•เตˆเดตเตผ เดŽเดดเตเดคเตเด‚. เด‡เดคเต เด‡เดคเดฟเดจเด•เด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต เดนเดฌเตเดฐเต†เดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด‚, เดŽเดจเตเดจเดพเตฝ เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดคเต†. เดจเดฟเดฒเดตเดฟเดฒเต† เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดธเตˆเดฆเตเดงเดพเดจเตเดคเดฟเด• เดตเดธเตเดคเตเด•เตเด•เตพ เดธเตเด•เต‚เตพ เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเตผ เดธเดฏเตปเดธเต เดชเดพเด เด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดฑเต‹เดฌเตผเดŸเตเดŸเต เดฒเดพเดซเต‹เดฑเต†เดฑเตเดฑเดฟเดจเตเดฑเต† "เดกเดพเดฑเตเดฑ เดธเตเดŸเตเดฐเด•เตเดšเดฑเตเด•เดณเตเด‚ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚เดธเต เด‡เตป เดœเดพเดต" เดŽเดจเตเดจ เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดŽเดŸเตเดคเตเดคเดคเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ, เดŽเดฒเตเดฒเดพเด‚ เดตเต†เดŸเตเดŸเดฟเด•เตเด•เตเดฑเดšเตเดšเดคเดพเดฃเต!

เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดชเตเดฐเดคเดฟเดซเดฒเดจเด‚

เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเดฟเตฝ, เด’เดฐเต เดชเตเดฐเดคเต€เด•เด‚ 8 เดฌเดฟเดฑเตเดฑเตเด•เตพ (ASCII เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต) เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ 16 (เดฏเต‚เดฃเดฟเด•เต‹เดกเต เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดžเด™เตเด™เตพ ASCII เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, s1 = "SUSIE SAYS IT IS EASYn" เดŽเดจเตเดจ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดŽเดŸเตเด•เตเด•เตเด•. เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เดณเตเด‚ เดชเตเดคเดฟเดฏ เดฒเตˆเตป เดชเตเดฐเดคเต€เด•เด‚ - 'n' เด‰เตพเดชเตเดชเต†เดŸเต†, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดตเดฐเดฟเดฏเดฟเตฝ 22 เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เด‰เดฃเตเดŸเต. เดˆ เดฒเตˆเตป เด…เดŸเด™เตเด™เดฟเดฏ เดซเดฏเดฒเดฟเดจเตเดฑเต† เดญเดพเดฐเด‚ 22*8 = 176 เดฌเดฟเดฑเตเดฑเตเด•เตพ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดšเต‹เดฆเตเดฏเด‚ เด‰เดŸเดจเดŸเดฟ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต: 8 เดชเตเดฐเดคเต€เด•เด‚ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดŽเดฒเตเดฒเดพ 1 เดฌเดฟเดฑเตเดฑเตเด•เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฃเต‹? เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ ASCII เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เด…เดตเดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดชเต‹เดฒเตเด‚, เดเดฑเตเดฑเดตเตเด‚ เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏ เด…เด•เตเดทเดฐเด‚ - S - เดธเดพเดงเตเดฏเดฎเดพเดฏ เดเดฑเตเดฑเดตเตเด‚ เดšเต†เดฑเดฟเดฏ เด•เต‹เดกเต, เด…เดชเต‚เตผเดตเดฎเดพเดฏ เด…เด•เตเดทเดฐเดคเตเดคเดฟเดจเต - T (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ U, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ 'n') - เด•เต‹เดกเต เด•เต‚เดŸเตเดคเตฝ เด†เดงเดฟเด•เดพเดฐเดฟเด•เดฎเดพเดฏเดฟ เดจเตฝเด•เตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เด‡เดคเดพเดฃเต เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเดคเตเดคเดฟเดจเตเดฑเต† เดธเดพเดฐเดพเด‚เดถเด‚: เดฎเดฟเด•เดšเตเดš เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เด“เดชเตเดทเตป เด•เดฃเตเดŸเต†เดคเตเดคเต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเตฝ เดซเดฏเดฒเดฟเดจเต เด•เตเดฑเดžเตเดž เดญเดพเดฐเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเตเดฐเดคเต€เด•เด™เตเด™เตพเด•เตเด•เต เดตเตเดฏเดคเตเดฏเดธเตเดค เด•เต‹เดกเต เดฆเตˆเตผเด˜เตเดฏเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดคเดฟเด•เดšเตเดšเตเด‚ เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฃเต - เด‡เดคเดพเดฃเต เด…เตฝเด—เต‹เดฐเดฟเดคเดคเตเดคเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเด‚.

เด•เต‹เดกเดฟเด‚เด—เต

เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต 'S' เดŽเดจเตเดจ เด…เด•เตเดทเดฐเดคเตเดคเดฟเดจเต เด’เดฐเต เด•เต‹เดกเต เดจเตฝเด•เดฐเตเดคเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, 1 เดฌเดฟเดฑเตเดฑเต เดจเต€เดณเด‚: 0 เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ 1. เด…เดคเต 1 เด†เดฏเดฟเดฐเดฟเด•เตเด•เดŸเตเดŸเต†. เด…เดชเตเดชเต‹เตพ เดเดฑเตเดฑเดตเตเด‚ เด•เต‚เดŸเตเดคเตฝ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจ เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดชเตเดฐเดคเต€เด•เด‚ - ' ' (เดธเตเดชเต‡เดธเต) - เดžเด™เตเด™เตพ 0 เดจเตฝเด•เตเด‚. เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เตเด•, เดจเดฟเด™เตเด™เตพ เดคเตเดŸเด™เตเด™เดฟ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเดจเตเดฆเต‡เดถเด‚ เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเด• - เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดค เดธเตเดŸเตเดฐเดฟเด‚เด—เต s1 - เด•เต‹เดกเต 1-เตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต. เด…เดชเตเดชเต‹เตพ, เดŽเดจเตเดคเตเดšเต†เดฏเตเดฏเดฃเด‚: เด‡เดคเต S เดŽเดจเตเดจ เด…เด•เตเดทเดฐเดฎเดพเดฃเต‹ เด…เดคเต‹ A เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตเดฐเดคเต€เด•เดฎเดพเดฃเต‹? เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดจเดฟเดฏเดฎเด‚ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต:

เด’เดฐเต เด•เต‹เดกเตเด‚ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเดจเตเดฑเต† เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเต เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฐเตเดคเต

เดˆ เดจเดฟเดฏเดฎเด‚ เด…เตฝเด—เต‹เดฐเดฟเดคเดคเตเดคเดฟเดจเตเดฑเต† เดคเดพเด•เตเด•เต‹เดฒเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ, เด•เต‹เดกเดฟเดจเตเดฑเต† เดธเตƒเดทเตเดŸเดฟ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต เด’เดฐเต เดซเตเดฐเต€เด•เตเดตเตปเดธเดฟ เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต, เด‡เดคเต เด“เดฐเต‹ เดšเดฟเดนเตเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด†เดตเตƒเดคเตเดคเดฟ (เดธเด‚เดญเดตเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚) เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต:

เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป เดเดฑเตเดฑเดตเตเด‚ เด•เต‚เดŸเตเดคเตฝ เดธเด‚เดญเดตเด™เตเด™เดณเตเดณเตเดณ เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดšเตเดšเต เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดฏเดฃเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฃเต เดฌเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚. เดธเดพเดงเตเดฏเดฎเดพเดฏ เด•เต‹เดกเต เดชเดŸเตเดŸเดฟเด•เด•เดณเดฟเดฒเตŠเดจเตเดจเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เดžเดพเตป เดจเตฝเด•เตเด‚:

เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป เด…เดคเดฟเดจเดพเตฝ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดค เดธเดจเตเดฆเต‡เดถเด‚ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

10 01111 10 110 1111 00 10 010 1110 10 00 110 0110 00 110 10 00 1111 010 10 1110 01110

เด“เดฐเต‹ เด•เดฅเดพเดชเดพเดคเตเดฐเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด•เต‹เดกเต เดžเดพเตป เด’เดฐเต เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต. เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดค เดซเดฏเดฒเดฟเตฝ เด‡เดคเต เดถเดฐเดฟเด•เตเด•เตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เดฟเดฒเตเดฒ!
เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต: เดˆ เดฑเต‚เด•เตเด•เดฟ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เด’เดฐเต เด•เต‹เดกเต เดŸเต‡เดฌเดฟเตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด’เดฐเต เด•เต‹เดกเต เด•เตŠเดฃเตเดŸเตเดตเดจเตเดจเดคเต? เด‡เดคเต เดคเดพเดดเต† เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเด‚.

เด’เดฐเต เดนเดซเตเดฎเดพเตป เดŸเตเดฐเต€ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต

เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เดฌเตˆเดจเดฑเดฟ เดธเต†เตผเดšเตเดšเต เดฎเดฐเด™เตเด™เตพ เดฐเด•เตเดทเดพเดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเต เดŽเดคเตเดคเตเดจเตเดจเดคเต. เดตเดฟเดทเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดตเดฟเดŸเต† เดคเดฟเดฐเดฏเตฝ, เดคเดฟเดฐเตเด•เตฝ, เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตฝ เดฐเต€เดคเดฟเด•เตพ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ. เดœเดพเดตเดฏเดฟเดฒเต† เดŸเตเดฐเต€ เด˜เดŸเดจ เด‡เดคเดพ:

public class Node {
    private int frequence;
    private char letter;
    private Node leftChild;
    private Node rightChild;
    ...
}

class BinaryTree {
    private Node root;

    public BinaryTree() {
        root = new Node();
    }
    public BinaryTree(Node root) {
        this.root = root;
    }
    ...
}

เด‡เดคเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เด•เต‹เดกเต เด…เดฒเตเดฒ, เดฎเตเดดเตเดตเตป เด•เต‹เดกเตเด‚ เดคเดพเดดเต† เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

เดฎเดฐเด‚ เดจเดฟเตผเดฎเตเดฎเดพเดฃ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‡เดคเดพ:

  1. เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด“เดฐเต‹ เดชเตเดฐเดคเต€เด•เดคเตเดคเดฟเดจเตเด‚ เด’เดฐเต เดจเต‹เดกเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด• (เดฒเตˆเตป s1). เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, 9 เดจเต‹เดกเตเด•เตพ (เดจเต‹เดกเต เด’เดฌเตเดœเด•เตเดฑเตเดฑเตเด•เตพ) เด‰เดฃเตเดŸเดพเด•เตเด‚. เด“เดฐเต‹ เดจเต‹เดกเดฟเดฒเตเด‚ เดฐเดฃเตเดŸเต เดกเดพเดฑเตเดฑ เดซเต€เตฝเดกเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต: เดšเดฟเดนเตเดจเดตเตเด‚ เด†เดตเตƒเดคเตเดคเดฟเดฏเตเด‚
  2. เด“เดฐเต‹ เดจเต‹เดกเต เดจเต‹เดกเตเด•เตพเด•เตเด•เตเด‚ เด’เดฐเต เดŸเตเดฐเต€ เด’เดฌเตเดœเด•เตเดฑเตเดฑเต (เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€) เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•. เดจเต‹เดกเต เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต† เดตเต‡เดฐเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต.
  3. เดฎเตเตปเด—เดฃเดจเดพ เด•เตเดฏเต‚เดตเดฟเดฒเต‡เด•เตเด•เต เดˆ เดฎเดฐเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด•. เด•เตเดฑเดžเตเดž เด†เดตเตƒเดคเตเดคเดฟ, เด‰เดฏเตผเดจเตเดจ เดฎเตเตปเด—เดฃเดจ. เด…เด™เตเด™เดจเต†, เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เด†เดตเตƒเดคเตเดคเดฟเดฏเดฟเดฒเตเดณเตเดณ เดตเตƒเด•เตเดทเด‚ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพ เดšเดพเด•เตเดฐเดฟเด•เดฎเดพเดฏเดฟ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

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

เดตเดฐเดฟ s1-เดฒเต† เดˆ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•:

เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป

เด‡เดตเดฟเดŸเต† "lf" (linefeed) เดŽเดจเตเดจ เดšเดฟเดนเตเดจเด‚ เด’เดฐเต เดชเตเดคเดฟเดฏ เดตเดฐเดฟเดฏเต† เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต, "sp" (เดธเตเดชเต†เดฏเตเดธเต) เด’เดฐเต เดธเตเดชเต‡เดธเต เด†เดฃเต.

เด…เดŸเตเดคเตเดคเดคเต เดŽเดจเตเดคเต?

เดžเด™เตเด™เตพเด•เตเด•เต เดนเดซเตเดฎเดพเตป เดฎเดฐเด‚ เดฒเดญเดฟเดšเตเดšเต. เดถเดฐเดฟ. เดชเดฟเดจเตเดจเต† เดŽเดจเตเดคเต เดšเต†เดฏเตเดฏเดฃเด‚? เด…เดตเตผ เด…เดคเต เดธเต—เดœเดจเตเดฏเดฎเดพเดฏเดฟ เดŽเดŸเตเด•เตเด•เดฟเดฒเตเดฒ, เดคเตเดŸเตผเดจเตเดจเต, เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต† เดตเต‡เดฐเต เดฎเตเดคเตฝ เด‡เดฒเด•เตพ เดตเดฐเต† เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดตเดดเดฟเด•เดณเตเด‚ เดจเดฟเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดŸเดคเตเดตเดถเดคเตเดคเต† เด•เตเดŸเตเดŸเดฟเดฏเดฟเดฒเต‡เด•เตเด•เดพเดฃเต เดจเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต†เด™เตเด•เดฟเตฝ เดŽเดกเตเดœเต 0 เด‰เด‚ เดตเดฒเดคเต เด•เตเดŸเตเดŸเดฟเดฏเดฟเดฒเต‡เด•เตเด•เดพเดฃเต†เด™เตเด•เดฟเตฝ 1 เด‰เด‚ เดฒเต‡เดฌเตฝ เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เตพ เดธเดฎเตเดฎเดคเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เดˆ เดจเตŠเดŸเตเดŸเต‡เดทเดจเตเด•เดณเดฟเตฝ, เดˆ เดชเตเดฐเดคเต€เด•เด‚ เด…เดŸเด™เตเด™เดฟเดฏ เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต† เดตเต‡เดฐเดฟเตฝ เดจเดฟเดจเตเดจเต เด‡เดฒเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดคเดฏเดพเดฃเต เดชเตเดฐเดคเต€เด• เด•เต‹เดกเต.

เดนเดซเตเดฎเดพเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป

เด…เด™เตเด™เดจเต†, เด•เต‹เดกเตเด•เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด• เดฎเดพเดฑเดฟ. เดˆ เดชเดŸเตเดŸเดฟเด• เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด“เดฐเต‹ เดชเตเดฐเดคเต€เด•เดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ "เดญเดพเดฐเด‚" เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เดจเดฟเด—เดฎเดจเด‚ เดšเต†เดฏเตเดฏเดพเด‚ - เด‡เดคเดพเดฃเต เด…เดคเดฟเดจเตเดฑเต† เด•เต‹เดกเดฟเดจเตเดฑเต† เดฆเตˆเตผเด˜เตเดฏเด‚. เดคเตเดŸเตผเดจเตเดจเต, เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดค เดฐเต‚เดชเดคเตเดคเดฟเตฝ, เดธเต‹เดดเตเดธเต เดซเดฏเดฒเดฟเดจเตเดฑเต† เดญเดพเดฐเด‚: 2 * 3 + 2 * 4 + 3 * 3 + 6 * 2 + 1 * 4 + 1 * 5 + 2 * 4 + 4 * 2 + 1 * 5 = 65 เดฌเดฟเดฑเตเดฑเตเด•เตพ . เด†เดฆเตเดฏเด‚ เด…เดคเดฟเดจเตเดฑเต† เดญเดพเดฐเด‚ 176 เดฌเดฟเดฑเตเดฑเตเด•เตพ เด†เดฏเดฟเดฐเตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพ เด‡เดคเต 176/65 = 2.7 เดฎเดŸเด™เตเด™เต เด•เตเดฑเดšเตเดšเต! เดŽเดจเตเดจเดพเตฝ เด‡เดคเตŠเดฐเต เด‰เดŸเตเดŸเต‹เดชเตเดฏเดฏเดพเดฃเต. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด…เดจเตเดชเดพเดคเด‚ เดฒเดญเดฟเด•เตเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเดฟเดฒเตเดฒ. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต? เด‡เดคเต เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเด‚.

เดกเต€เด•เต‹เดกเดฟเด‚เด—เต

เดถเดฐเดฟ, เด’เดฐเตเดชเด•เตเดทเต‡ เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดพเดฐเตเดฏเด‚ เดกเต€เด•เต‹เดกเดฟเด‚เด—เต เด†เดฃเต. เด’เดฐเต เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดค เดซเดฏเตฝ เดŽเด™เตเด™เดจเต† เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดคเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดธเต‚เดšเดจเด•เดณเดฟเดฒเตเดฒเดพเดคเต† เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เด’เดฐเต เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดค เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดจเดฟเด™เตเด™เดณเดฟเตฝ เดชเดฒเดฐเตเด‚ เดŠเดนเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต - เดžเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ! เด…เดคเต†, เด…เดคเต†, เด‡เดคเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดŽเดจเดฟเด•เตเด•เต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดŽเดจเดฟเด•เตเด•เต เด’เดฐเต เด•เด‚เดชเตเดฐเดทเตป เดŸเต‡เดฌเดฟเตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต table.txt เดŽเดจเตเดจ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

01110
 00
A010
E1111
I110
S10
T0110
U01111
Y1110

'เด•เดฅเดพเดชเดพเดคเตเดฐเด‚' "เดชเตเดฐเดคเต€เด• เด•เต‹เดกเต" เดŽเดจเตเดจ เดซเต‹เดฎเดฟเดฒเต† เดชเดŸเตเดŸเดฟเด• เดŽเตปเดŸเตเดฐเดฟ. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต 01110 เด’เดฐเต เดšเดฟเดนเตเดจเดฎเดฟเดฒเตเดฒเดพเดคเต†? เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เด‡เดคเต เด’เดฐเต เดšเดฟเดนเตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต, เด’เดฐเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดžเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดœเดพเดต เดŸเต‚เดณเตเด•เตพ, เดจเตเดฏเต‚เดฒเตˆเตป เดชเตเดฐเดคเต€เด•เด‚ - 'n' - เด’เดฐเต เดจเตเดฏเต‚เดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต (เด…เดคเต เดŽเดคเตเดฐ เดฎเดฃเตเดŸเดคเตเดคเดฐเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟเดฏเดพเดฒเตเด‚). เด…เดคเดฟเดจเดพเตฝ, เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดตเดฐเดฟ เด•เต‹เดกเต 01110-เดจเตเดฑเต† เดชเตเดฐเดคเต€เด•เดฎเดพเดฃเต. เด•เต‹เดกเต 00-เดจเต, เดชเตเดฐเดคเต€เด•เด‚ เดตเดฐเดฟเดฏเตเดŸเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เด’เดฐเต เดธเตเดชเต†เดฏเตเดธเดพเดฃเต. เดชเดŸเตเดŸเดฟเด• เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดˆ เดฐเต€เดคเดฟ เดžเด™เตเด™เดณเตเดŸเต† เด–เดพเตป เด•เต‹เดซเดฟเดซเดฟเดทเตเดฏเดจเตเดฑเดฟเดจเต เดเดฑเตเดฑเดตเตเด‚ เดฏเตเด•เตเดคเดฟเดฐเดนเดฟเดคเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด‰เดŸเตป เดคเดจเตเดจเต† เดชเดฑเดฏเดฃเด‚. เดŽเดจเตเดจเดพเตฝ เด…เดคเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเดจเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดจเตเด‚ เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต. เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดชเดพเตผเดถเด•เตพ เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดธเดจเตเดคเต‹เดทเดฎเตเดฃเตเดŸเต.

เดˆ เดชเดŸเตเดŸเดฟเด• เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเดพเตป เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต. เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดเดคเต เดจเดฟเดฏเดฎเดฎเดพเดฃเต เดžเด™เตเด™เดณเต† เดจเดฏเดฟเดšเตเดšเดคเต†เดจเตเดจเต เด“เตผเด•เตเด•เตเด•:

เด’เดฐเต เด•เต‹เดกเตเด‚ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเดจเตเดฑเต† เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเต เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฐเตเดคเต

เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เด‡เดคเต เด’เดฐเต เดธเตเด—เดฎเดฎเดพเดฏ เดชเด™เตเด•เต เดตเดนเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดžเด™เตเด™เตพ เดฌเดฟเดฑเตเดฑเต เดฌเตˆ เดฌเดฟเดฑเตเดฑเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต, เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดธเตเดŸเตเดฐเดฟเด‚เด—เต d, เดฑเต€เดกเต เดฌเดฟเดฑเตเดฑเตเด•เตพ เด…เดŸเด™เตเด™เตเดจเตเดจ, เดชเตเดฐเดคเต€เด• เดชเตเดฐเดคเต€เด•เดคเตเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดŽเตปเด•เต‹เดกเดฟเด‚เด—เตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดฎเตเดชเต‹เตพ, เดชเตเดฐเดคเต€เด• เดชเตเดฐเดคเต€เด•เด‚ (เด…เดคเต เดฎเดพเดคเตเดฐเด‚!) เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตโ€Œเดคเดคเดพเดฏเดฟ เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดŸเดจเดŸเดฟ เด…เดฑเดฟเดฏเดพเด‚. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดžเด™เตเด™เตพ เดกเต€เด•เต‹เดกเต เดธเตเดŸเตเดฐเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดคเต€เด•เด‚ เดŽเดดเตเดคเตเดจเตเดจเต (เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดค เดธเดจเตเดฆเต‡เดถเด‚ เด…เดŸเด™เตเด™เดฟเดฏ เดธเตเดŸเตเดฐเดฟเด‚เด—เต), d เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดชเตเดจเดƒเดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดŽเตปเด•เต‹เดกเต เดšเต†เดฏเตเดค เดซเดฏเตฝ เด•เต‚เดŸเตเดคเตฝ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ

เด’เดฐเต เด†เตผเด•เตเด•เตˆเดตเตผ เดŽเดดเตเดคเดฟ เดŽเดจเตเดฑเต† เด•เต‹เดกเดฟเดจเต† เด…เดชเดฎเดพเดจเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต. เดจเดฎเตเด•เตเด•เต เด…เดคเดฟเดจเต† เด•เด‚เดชเตเดฐเดธเตผ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดพเด‚.

เดตเต€เดฃเตเดŸเตเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•. เด’เดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดžเด™เตเด™เตพ เดจเต‹เดกเต เด•เตเดฒเดพเดธเต เดŽเดดเตเดคเตเดจเตเดจเต:

public class Node {
    private int frequence;//ั‡ะฐัั‚ะพั‚ะฐ
    private char letter;//ะฑัƒะบะฒะฐ
    private Node leftChild;//ะปะตะฒั‹ะน ะฟะพั‚ะพะผะพะบ
    private Node rightChild;//ะฟั€ะฐะฒั‹ะน ะฟะพั‚ะพะผะพะบ

   

    public Node(char letter, int frequence) { //ัะพะฑัั‚ะฒะตะฝะฝะพ, ะบะพะฝัั‚ั€ัƒะบั‚ะพั€
        this.letter = letter;
        this.frequence = frequence;
    }

    public Node() {}//ะฟะตั€ะตะณั€ัƒะทะบะฐ ะบะพะฝัั‚ั€ัƒั‚ะพั€ะฐ ะดะปั ะฑะตะทั‹ะผัะฝะฝั‹ั… ัƒะทะปะพะฒ(ัะผ. ะฒั‹ัˆะต ะฒ ั€ะฐะทะดะตะปะต ะพ ะฟะพัั‚ั€ะพะตะฝะธะธ ะดะตั€ะตะฒะฐ ะฅะฐั„ั„ะผะฐะฝะฐ)
    public void addChild(Node newNode) {//ะดะพะฑะฐะฒะธั‚ัŒ ะฟะพั‚ะพะผะบะฐ
        if (leftChild == null)//ะตัะปะธ ะปะตะฒั‹ะน ะฟัƒัั‚ะพะน=> ะฟั€ะฐะฒั‹ะน ั‚ะพะถะต=> ะดะพะฑะฐะฒะปัะตะผ ะฒ ะปะตะฒั‹ะน
            leftChild = newNode;
        else {
            if (leftChild.getFrequence() <= newNode.getFrequence()) //ะฒ ะพะฑั‰ะตะผ, ะปะตะฒั‹ะผ ะฟะพั‚ะพะผะบะพะผ
                rightChild = newNode;//ัั‚ะฐะฝะตั‚ ั‚ะพั‚, ัƒ ะบะพะณะพ ะผะตะฝัŒัˆะต ั‡ะฐัั‚ะพั‚ะฐ
            else {
                rightChild = leftChild;
                leftChild = newNode;
            }
        }

        frequence += newNode.getFrequence();//ะธั‚ะพะณะพะฒะฐั ั‡ะฐัั‚ะพั‚ะฐ
    }

    public Node getLeftChild() {
        return leftChild;
    }

    public Node getRightChild() {
        return rightChild;
    }

    public int getFrequence() {
        return frequence;
    }

    public char getLetter() {
        return letter;
    }

    public boolean isLeaf() {//ะฟั€ะพะฒะตั€ะบะฐ ะฝะฐ ะปะธัั‚
        return leftChild == null && rightChild == null;
    }
}

เด‡เดชเตเดชเต‹เตพ เดฎเดฐเด‚:

class BinaryTree {
    private Node root;

    public BinaryTree() {
        root = new Node();
    }

    public BinaryTree(Node root) {
        this.root = root;
    }

    public int getFrequence() {
        return root.getFrequence();
    }

    public Node getRoot() {
        return root;
    }
}

เดฎเตเตปเด—เดฃเดจเดพ เด•เตเดฏเต‚:

import java.util.ArrayList;//ะดะฐ-ะดะฐ, ะพั‡ะตั€ะตะดัŒ ะฑัƒะดะตั‚ ะฝะฐ ะฑะฐะทะต ัะฟะธัะบะฐ

class PriorityQueue {
    private ArrayList<BinaryTree> data;//ัะฟะธัะพะบ ะพั‡ะตั€ะตะดะธ
    private int nElems;//ะบะพะป-ะฒะพ ัะปะตะผะตะฝั‚ะพะฒ ะฒ ะพั‡ะตั€ะตะดะธ

    public PriorityQueue() {
        data = new ArrayList<BinaryTree>();
        nElems = 0;
    }

    public void insert(BinaryTree newTree) {//ะฒัั‚ะฐะฒะบะฐ
        if (nElems == 0)
            data.add(newTree);
        else {
            for (int i = 0; i < nElems; i++) {
                if (data.get(i).getFrequence() > newTree.getFrequence()) {//ะตัะปะธ ั‡ะฐัั‚ะพั‚ะฐ ะฒัั‚ะฐะฒะปัะตะผะพะณะพ ะดะตั€ะตะฒะฐ ะผะตะฝัŒัˆะต 
                    data.add(i, newTree);//ั‡ะตะผ ั‡ะฐัั‚. ั‚ะตะบัƒั‰ะตะณะพ, ั‚ะพ cะดะฒะธะณะฐะตะผ ะฒัะต ะดะตั€ะตะฒัŒั ะฝะฐ ะฟะพะทะธั†ะธัั… ัะฟั€ะฐะฒะฐ ะฝะฐ 1 ัั‡ะตะนะบัƒ                   
                    break;//ะทะฐั‚ะตะผ ัั‚ะฐะฒะธะผ ะฝะพะฒะพะต ะดะตั€ะตะฒะพ ะฝะฐ ะฟะพะทะธั†ะธัŽ ั‚ะตะบัƒั‰ะตะณะพ
                }
                if (i == nElems - 1) 
                    data.add(newTree);
            }
        }
        nElems++;//ัƒะฒะตะปะธั‡ะธะฒะฐะตะผ ะบะพะป-ะฒะพ ัะปะตะผะตะฝั‚ะพะฒ ะฝะฐ 1
    }

    public BinaryTree remove() {//ัƒะดะฐะปะตะฝะธะต ะธะท ะพั‡ะตั€ะตะดะธ
        BinaryTree tmp = data.get(0);//ะบะพะฟะธั€ัƒะตะผ ัƒะดะฐะปัะตะผั‹ะน ัะปะตะผะตะฝั‚
        data.remove(0);//ัะพะฑัั‚ะฒะตะฝะฝะพ, ัƒะดะฐะปัะตะผ
        nElems--;//ัƒะผะตะฝัŒัˆะฐะตะผ ะบะพะป-ะฒะพ ัะปะตะผะตะฝั‚ะพะฒ ะฝะฐ 1
        return tmp;//ะฒะพะทะฒั€ะฐั‰ะฐะตะผ ัƒะดะฐะปะตะฝะฝั‹ะน ัะปะตะผะตะฝั‚(ัะปะตะผะตะฝั‚ ั ะฝะฐะธะผะตะฝัŒัˆะตะน ั‡ะฐัั‚ะพั‚ะพะน)
    }
}

เดนเดซเตเดฎเดพเตป เดŸเตเดฐเต€ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจ เด•เตเดฒเดพเดธเต:

public class HuffmanTree {
    private final byte ENCODING_TABLE_SIZE = 127;//ะดะปะธะฝะฐ ะบะพะดะธั€ะพะฒะพั‡ะฝะพะน ั‚ะฐะฑะปะธั†ั‹
    private String myString;//ัะพะพะฑั‰ะตะฝะธะต
    private BinaryTree huffmanTree;//ะดะตั€ะตะฒะพ ะฅะฐั„ั„ะผะฐะฝะฐ
    private int[] freqArray;//ั‡ะฐัั‚ะพั‚ะฝะฐั ั‚ะฐะฑะปะธั†ะฐ
    private String[] encodingArray;//ะบะพะดะธั€ะพะฒะพั‡ะฝะฐั ั‚ะฐะฑะปะธั†ะฐ


    //----------------constructor----------------------
    public HuffmanTree(String newString) {
        myString = newString;

        freqArray = new int[ENCODING_TABLE_SIZE];
        fillFrequenceArray();

        huffmanTree = getHuffmanTree();

        encodingArray = new String[ENCODING_TABLE_SIZE];
        fillEncodingArray(huffmanTree.getRoot(), "", "");
    }

    //--------------------frequence array------------------------
    private void fillFrequenceArray() {
        for (int i = 0; i < myString.length(); i++) {
            freqArray[(int)myString.charAt(i)]++;
        }
    }

    public int[] getFrequenceArray() {
        return freqArray;
    }

    //------------------------huffman tree creation------------------
    private BinaryTree getHuffmanTree() {
        PriorityQueue pq = new PriorityQueue();
        //ะฐะปะณะพั€ะธั‚ะผ ะพะฟะธัะฐะฝ ะฒั‹ัˆะต
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            if (freqArray[i] != 0) {//ะตัะปะธ ัะธะผะฒะพะป ััƒั‰ะตัั‚ะฒัƒะตั‚ ะฒ ัั‚ั€ะพะบะต
                Node newNode = new Node((char) i, freqArray[i]);//ั‚ะพ ัะพะทะดะฐั‚ัŒ ะดะปั ะฝะตะณะพ Node
                BinaryTree newTree = new BinaryTree(newNode);//ะฐ ะดะปั Node ัะพะทะดะฐั‚ัŒ BinaryTree
                pq.insert(newTree);//ะฒัั‚ะฐะฒะธั‚ัŒ ะฒ ะพั‡ะตั€ะตะดัŒ
            }
        }

        while (true) {
            BinaryTree tree1 = pq.remove();//ะธะทะฒะปะตั‡ัŒ ะธะท ะพั‡ะตั€ะตะดะธ ะฟะตั€ะฒะพะต ะดะตั€ะตะฒะพ.

            try {
                BinaryTree tree2 = pq.remove();//ะธะทะฒะปะตั‡ัŒ ะธะท ะพั‡ะตั€ะตะดะธ ะฒั‚ะพั€ะพะต ะดะตั€ะตะฒะพ

                Node newNode = new Node();//ัะพะทะดะฐั‚ัŒ ะฝะพะฒั‹ะน Node
                newNode.addChild(tree1.getRoot());//ัะดะตะปะฐั‚ัŒ ะตะณะพ ะฟะพั‚ะพะผะบะฐะผะธ ะดะฒะฐ ะธะทะฒะปะตั‡ะตะฝะฝั‹ั… ะดะตั€ะตะฒะฐ
                newNode.addChild(tree2.getRoot());

                pq.insert(new BinaryTree(newNode);
            } catch (IndexOutOfBoundsException e) {//ะพัั‚ะฐะปะพััŒ ะพะดะฝะพ ะดะตั€ะตะฒะพ ะฒ ะพั‡ะตั€ะตะดะธ
                return tree1;
            }
        }
    }

    public BinaryTree getTree() {
        return huffmanTree;
    }

    //-------------------encoding array------------------
    void fillEncodingArray(Node node, String codeBefore, String direction) {//ะทะฐะฟะพะปะฝะธั‚ัŒ ะบะพะดะธั€ะพะฒะพั‡ะฝัƒัŽ ั‚ะฐะฑะปะธั†ัƒ
        if (node.isLeaf()) {
            encodingArray[(int)node.getLetter()] = codeBefore + direction;
        } else {
            fillEncodingArray(node.getLeftChild(), codeBefore + direction, "0");
            fillEncodingArray(node.getRightChild(), codeBefore + direction, "1");
        }
    }

    String[] getEncodingArray() {
        return encodingArray;
    }

    public void displayEncodingArray() {//ะดะปั ะพั‚ะปะฐะดะบะธ
        fillEncodingArray(huffmanTree.getRoot(), "", "");

        System.out.println("======================Encoding table====================");
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            if (freqArray[i] != 0) {
                System.out.print((char)i + " ");
                System.out.println(encodingArray[i]);
            }
        }
        System.out.println("========================================================");
    }
    //-----------------------------------------------------
    String getOriginalString() {
        return myString;
    }
}

เดŽเตปเด•เต‹เดกเต/เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด•เตเดฒเดพเดธเต:

public class HuffmanOperator {
    private final byte ENCODING_TABLE_SIZE = 127;//ะดะปะธะฝะฐ ั‚ะฐะฑะปะธั†ั‹
    private HuffmanTree mainHuffmanTree;//ะดะตั€ะตะฒะพ ะฅะฐั„ั„ะผะฐะฝะฐ (ะธัะฟะพะปัŒะทัƒะตั‚ัั ั‚ะพะปัŒะบะพ ะดะปั ัะถะฐั‚ะธั)
    private String myString;//ะธัั…ะพะดะฝะพะต ัะพะพะฑั‰ะตะฝะธะต
    private int[] freqArray;//ั‡ะฐัั‚ะพั‚ะฐะฝะฐั ั‚ะฐะฑะปะธั†ะฐ
    private String[] encodingArray;//ะบะพะดะธั€ะพะฒะพั‡ะฝะฐั ั‚ะฐะฑะปะธั†ะฐ
    private double ratio;//ะบะพัั„ั„ะธั†ะธะตะฝั‚ ัะถะฐั‚ะธั 


    public HuffmanOperator(HuffmanTree MainHuffmanTree) {//for compress
        this.mainHuffmanTree = MainHuffmanTree;

        myString = mainHuffmanTree.getOriginalString();

        encodingArray = mainHuffmanTree.getEncodingArray();

        freqArray = mainHuffmanTree.getFrequenceArray();
    }

    public HuffmanOperator() {}//for extract;

    //---------------------------------------compression-----------------------------------------------------------
    private String getCompressedString() {
        String compressed = "";
        String intermidiate = "";//ะฟั€ะพะผะตะถัƒั‚ะพั‡ะฝะฐั ัั‚ั€ะพะบะฐ(ะฑะตะท ะดะพะฑะฐะฒะพั‡ะฝั‹ั… ะฝัƒะปะตะน)
        //System.out.println("=============================Compression=======================");
        //displayEncodingArray();
        for (int i = 0; i < myString.length(); i++) {
            intermidiate += encodingArray[myString.charAt(i)];
        }
        //ะœั‹ ะฝะต ะผะพะถะตะผ ะฟะธัะฐั‚ัŒ ะฑะธั‚ ะฒ ั„ะฐะนะป. ะŸะพัั‚ะพะผัƒ ะฝัƒะถะฝะพ ัะดะตะปะฐั‚ัŒ ะดะปะธะฝัƒ ัะพะพะฑั‰ะตะฝะธั ะบั€ะฐั‚ะฝะพะน 8=>
        //ะฝัƒะถะฝะพ ะดะพะฑะฐะฒะธั‚ัŒ ะฝัƒะปะธ ะฒ ะบะพะฝะตั†(ะผะพะถะฝะพ 1, ะฝะตั‚ ั€ะฐะทะฝะธั†ั‹)
        byte counter = 0;//ะบะพะปะธั‡ะตัั‚ะฒะพ ะดะพะฑะฐะฒะปะตะฝะฝั‹ั… ะฒ ะบะพะฝะตั† ะฝัƒะปะตะน (ะฑะฐะนั‚ะฐ ะฒ ะฟะพะปะฝะต ั…ะฒะฐั‚ะธั‚: 0<=counter<8<127)
        for (int length = intermidiate.length(), delta = 8 - length % 8; 
        		counter < delta ; counter++) {//delta - ะบะพะปะธั‡ะตัั‚ะฒะพ ะดะพะฑะฐะฒะปะตะฝะฝั‹ั… ะฝัƒะปะตะน
            intermidiate += "0";
        }
        
        //ัะบะปะตะธั‚ัŒ ะบะพะป-ะฒะพ ะดะพะฑะฐะฒะพั‡ะฝั‹ั… ะฝัƒะปะตะน ะฒ ะฑะธะฝะฐั€ะฝะพะผ ะฟั€ะตะดะฐัั‚ะฒะปะตะฝะธะธ ะธ ะฟั€ะพะผะตะถัƒั‚ะพั‡ะฝัƒัŽ ัั‚ั€ะพะบัƒ 
        compressed = String.format("%8s", Integer.toBinaryString(counter & 0xff)).replace(" ", "0") + intermidiate;
        		
        //ะธะดะตะฐะปะธะทะธั€ะพะฒะฐะฝะฝั‹ะน ะบะพัั„ั„ะธั†ะธะตะฝั‚
        setCompressionRatio();
        //System.out.println("===============================================================");
        return compressed;
    }
    
    private void setCompressionRatio() {//ะฟะพัั‡ะธั‚ะฐั‚ัŒ ะธะดะตะฐะปะธะทะธั€ะพะฒะฐะฝะฝั‹ะน ะบะพัั„ั„ะธั†ะธะตะฝั‚ 
        double sumA = 0, sumB = 0;//A-the original sum
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            if (freqArray[i] != 0) {
                sumA += 8 * freqArray[i];
                sumB += encodingArray[i].length() * freqArray[i];
            }
        }
        ratio = sumA / sumB;
    }

    public byte[] getBytedMsg() {//final compression
        StringBuilder compressedString = new StringBuilder(getCompressedString());
        byte[] compressedBytes = new byte[compressedString.length() / 8];
        for (int i = 0; i < compressedBytes.length; i++) {
                compressedBytes[i] = (byte) Integer.parseInt(compressedString.substring(i * 8, (i + 1) * 8), 2);
        }
        return compressedBytes;
    }
    //---------------------------------------end of compression----------------------------------------------------------------
    //------------------------------------------------------------extract-----------------------------------------------------
    public String extract(String compressed, String[] newEncodingArray) {
        String decompressed = "";
        String current = "";
        String delta = "";
        encodingArray = newEncodingArray;
        
        //displayEncodingArray();
        //ะฟะพะปัƒั‡ะธั‚ัŒ ะบะพะป-ะฒะพ ะฒัั‚ะฐะฒะปะตะฝะฝั‹ั… ะฝัƒะปะตะน
        for (int i = 0; i < 8; i++) 
        	delta += compressed.charAt(i);
        int ADDED_ZEROES = Integer.parseInt(delta, 2);
       
        for (int i = 8, l = compressed.length() - ADDED_ZEROES; i < l; i++) {
            //i = 8, ั‚.ะบ. ะฟะตั€ะฒั‹ะผ ะฑะฐะนั‚ะพะผ ัƒ ะฝะฐั ะธะดะตั‚ ะบะพะป-ะฒะพ ะฒัั‚ะฐะฒะปะตะฝะฝั‹ั… ะฝัƒะปะตะน
            current += compressed.charAt(i);
            for (int j = 0; j < ENCODING_TABLE_SIZE; j++) {
                if (current.equals(encodingArray[j])) {//ะตัะปะธ ัะพะฒะฟะฐะปะพ
                    decompressed += (char)j;//ั‚ะพ ะดะพะฑะฐะฒะปัะตะผ ัะปะตะผะตะฝั‚
                    current = "";//ะธ ะพะฑะฝัƒะปัะตะผ ั‚ะตะบัƒั‰ัƒัŽ ัั‚ั€ะพะบัƒ
                }
            }
        }

        return decompressed;
    }

    public String getEncodingTable() {
        String enc = "";
    	for (int i = 0; i < encodingArray.length; i++) {
        	if (freqArray[i] != 0) 
        		enc += (char)i + encodingArray[i] + 'n';
        }
    	return enc;
    }

    public double getCompressionRatio() {
        return ratio;
    }


    public void displayEncodingArray() {//ะดะปั ะพั‚ะปะฐะดะบะธ
        System.out.println("======================Encoding table====================");
        for (int i = 0; i < ENCODING_TABLE_SIZE; i++) {
            //if (freqArray[i] != 0) {
                System.out.print((char)i + " ");
                System.out.println(encodingArray[i]);
            //}
        }
        System.out.println("========================================================");
    }
    }

เด’เดฐเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเดพเตป เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เตเดฒเดพเดธเต:

import java.io.File;
import java.io.PrintWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Closeable;

public class FileOutputHelper implements Closeable {
    private File outputFile;
    private FileOutputStream fileOutputStream;

    public FileOutputHelper(File file) throws FileNotFoundException {
        outputFile = file;
        fileOutputStream = new FileOutputStream(outputFile);
    }

    public void writeByte(byte msg) throws IOException {
        fileOutputStream.write(msg);
    }

    public void writeBytes(byte[] msg) throws IOException {
        fileOutputStream.write(msg);
    }

    public void writeString(String msg) {
    	try (PrintWriter pw = new PrintWriter(outputFile)) {
    		pw.write(msg);
    	} catch (FileNotFoundException e) {
    		System.out.println("ะะตะฒะตั€ะฝั‹ะน ะฟัƒั‚ัŒ, ะธะปะธ ั‚ะฐะบะพะณะพ ั„ะฐะนะปะฐ ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚!");
    	}
    }

    @Override
    public void close() throws IOException {
        fileOutputStream.close();
    }

    public void finalize() throws IOException {
        close();
    }
}

เด’เดฐเต เดซเดฏเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เตเดฒเดพเดธเต:

import java.io.FileInputStream;
import java.io.EOFException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;

public class FileInputHelper implements Closeable {
	private FileInputStream fileInputStream;
	private BufferedReader fileBufferedReader;
	
	public FileInputHelper(File file) throws IOException {
		fileInputStream = new FileInputStream(file);
		fileBufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
	}
	
	
    public byte readByte() throws IOException {
    	int cur = fileInputStream.read();
    	if (cur == -1)//ะตัะปะธ ะทะฐะบะพะฝั‡ะธะปัั ั„ะฐะนะป
    		throw new EOFException();
    	return (byte)cur;
    }
    
    public String readLine() throws IOException {
    	return fileBufferedReader.readLine();
    }
    
    @Override
    public void close() throws IOException{
    	fileInputStream.close();
    }
}

เดถเดฐเดฟ, เดชเตเดฐเดงเดพเดจ เด•เตเดฒเดพเดธเต:

import java.io.File;
import java.nio.charset.MalformedInputException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Paths;
import java.util.List;
import java.io.EOFException;
public class Main {
	private static final byte ENCODING_TABLE_SIZE = 127;
	
    public static void main(String[] args) throws IOException {
        try {//ัƒะบะฐะทั‹ะฒะฐะตะผ ะธะฝัั‚ั€ัƒะบั†ะธัŽ ั ะฟะพะผะพั‰ัŒัŽ ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ
            if (args[0].equals("--compress") || args[0].equals("-c"))
                compress(args[1]);
            else if ((args[0].equals("--extract") || args[0].equals("-x"))
            		&& (args[2].equals("--table") || args[2].equals("-t"))) {
            	extract(args[1], args[3]);
            }
            else
                throw new IllegalArgumentException();
        } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException e) {
            System.out.println("ะะตะฒะตั€ะฝั‹ะน ั„ะพั€ะผะฐั‚ ะฒะฒะพะดะฐ ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ");
            System.out.println("ะงะธั‚ะฐะนั‚ะต Readme.txt");
            e.printStackTrace();
        }
    }

	public static void compress(String stringPath) throws IOException {
        List<String> stringList;
        File inputFile = new File(stringPath);
        String s = "";
        File compressedFile, table;
        
        try {
            stringList = Files.readAllLines(Paths.get(inputFile.getAbsolutePath()));
        } catch (NoSuchFileException e) {
            System.out.println("ะะตะฒะตั€ะฝั‹ะน ะฟัƒั‚ัŒ, ะธะปะธ ั‚ะฐะบะพะณะพ ั„ะฐะนะปะฐ ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚!");
            return;
        } catch (MalformedInputException e) {
        	System.out.println("ะขะตะบัƒั‰ะฐั ะบะพะดะธั€ะพะฒะบะฐ ั„ะฐะนะปะฐ ะฝะต ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั");
        	return;
        }

        for (String item : stringList) {
            s += item;
            s += 'n';
        }

        HuffmanOperator operator = new HuffmanOperator(new HuffmanTree(s));

        compressedFile = new File(inputFile.getAbsolutePath() + ".cpr");
        compressedFile.createNewFile();
        try (FileOutputHelper fo = new FileOutputHelper(compressedFile)) {
        	fo.writeBytes(operator.getBytedMsg());
        }
        //create file with encoding table:
        
        table = new File(inputFile.getAbsolutePath() + ".table.txt");
        table.createNewFile();
        try (FileOutputHelper fo = new FileOutputHelper(table)) {
        	fo.writeString(operator.getEncodingTable());
        }
        
        System.out.println("ะŸัƒั‚ัŒ ะบ ัะถะฐั‚ะพะผัƒ ั„ะฐะนะปัƒ: " + compressedFile.getAbsolutePath());
        System.out.println("ะŸัƒั‚ัŒ ะบ ะบะพะดะธั€ะพะฒะพั‡ะฝะพะน ั‚ะฐะฑะปะธั†ะต " + table.getAbsolutePath());
        System.out.println("ะ‘ะตะท ั‚ะฐะฑะปะธั†ั‹ ั„ะฐะนะป ะฑัƒะดะตั‚ ะฝะตะฒะพะทะผะพะถะฝะพ ะธะทะฒะปะตั‡ัŒ!");
        
        double idealRatio = Math.round(operator.getCompressionRatio() * 100) / (double) 100;//ะธะดะตะฐะปะธะทะธั€ะพะฒะฐะฝะฝั‹ะน ะบะพัั„ั„ะธั†ะธะตะฝั‚
        double realRatio = Math.round((double) inputFile.length() 
        		/ ((double) compressedFile.length() + (double) table.length()) * 100) / (double)100;//ะฝะฐัั‚ะพัั‰ะธะน ะบะพัั„ั„ะธั†ะธะตะฝั‚
        
        System.out.println("ะ˜ะดะตะฐะปะธะทะธั€ะพะฒะฐะฝะฝั‹ะน ะบะพัั„ั„ะธั†ะธะตะฝั‚ ัะถะฐั‚ะธั ั€ะฐะฒะตะฝ " + idealRatio);
        System.out.println("ะšะพัั„ั„ะธั†ะธะตะฝั‚ ัะถะฐั‚ะธั ั ัƒั‡ะตั‚ะพะผ ะบะพะดะธั€ะพะฒะพั‡ะฝะพะน ั‚ะฐะฑะปะธั†ั‹ " + realRatio);
    }

    public static void extract(String filePath, String tablePath) throws FileNotFoundException, IOException {
        HuffmanOperator operator = new HuffmanOperator();
        File compressedFile = new File(filePath),
        	 tableFile = new File(tablePath),
        	 extractedFile = new File(filePath + ".xtr");
        String compressed = "";
        String[] encodingArray = new String[ENCODING_TABLE_SIZE];
        //read compressed file
        //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!check here:
        try (FileInputHelper fi = new FileInputHelper(compressedFile)) {
        	byte b;
        	while (true) {
        		b = fi.readByte();//method returns EOFException
        		compressed += String.format("%8s", Integer.toBinaryString(b & 0xff)).replace(" ", "0");
        	}
        } catch (EOFException e) {
        	
        }
        
        //--------------------
        
        //read encoding table:
        try (FileInputHelper fi = new FileInputHelper(tableFile)) {
        	fi.readLine();//skip first empty string
        	encodingArray[(byte)'n'] = fi.readLine();//read code for 'n'
        	while (true) {
        		String s = fi.readLine();
        		if (s == null)
        			throw new EOFException();
        		encodingArray[(byte)s.charAt(0)] = s.substring(1, s.length());        		
        	}
        } catch (EOFException ignore) {}
        
        extractedFile.createNewFile();
        //extract:
		try (FileOutputHelper fo = new FileOutputHelper(extractedFile)) {
			fo.writeString(operator.extract(compressed, encodingArray));
		}
		
		System.out.println("ะŸัƒั‚ัŒ ะบ ั€ะฐัะฟะฐะบะพะฒะฐะฝะฝะพะผัƒ ั„ะฐะนะปัƒ " + extractedFile.getAbsolutePath());
    }
}

เดจเดฟเด™เตเด™เตพ เดคเดจเตเดจเต† readme.txt เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเต‹เดŸเต† เดซเดฏเตฝ เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต ๐Ÿ™‚

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดžเดพเตป เดชเดฑเดฏเดพเตป เด†เด—เตเดฐเดนเดฟเดšเตเดšเดคเต เด…เดคเตเดฐเดฏเต‡เดฏเตเดณเตเดณเต‚เดตเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต. เด•เต‹เดกเต, เด…เตฝเด—เต‹เดฐเดฟเดคเด‚, เดชเตŠเดคเตเดตเต‡, เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเดฟเดฒเต† เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด•เดณเตเดŸเต† เดŽเดจเตเดฑเต† เด•เดดเดฟเดตเดฟเดฒเตเดฒเดพเดฏเตเดฎเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดฑเดฏเดพเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดŽเดดเตเดคเดพเตป เดฎเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เดžเดพเตป เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฆเดฏเดตเดพเดฏเดฟ เดŽเดดเตเดคเตเด•. เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฟเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เต‡เตพเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต!

เดชเดฟ.เดŽเดธเต

เด…เดคเต†, เด…เดคเต†, เดžเดพเตป เด‡เดชเตเดชเต‹เดดเตเด‚ เด‡เดตเดฟเดŸเต†เดฏเตเดฃเตเดŸเต, เด•เดพเดฐเดฃเด‚ เดžเดพเตป เด—เตเดฃเด•เดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดฎเดฑเดจเตเดจเดฟเดฒเตเดฒ. เดธเตเดŸเตเดฐเดฟเด‚เด—เต s1-เดจเต, เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เดŸเต‡เดฌเดฟเดณเดฟเดจเต 48 เดฌเตˆเดฑเตเดฑเตเด•เตพ เดญเดพเดฐเดฎเตเดฃเตเดŸเต - เดฏเดฅเดพเตผเดคเตเดฅ เดซเดฏเดฒเดฟเดจเต‡เด•เตเด•เดพเตพ เดตเดณเดฐเต† เด•เต‚เดŸเตเดคเดฒเดพเดฃเต, เด…เดงเดฟเด• เดชเต‚เดœเตเดฏเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด…เดตเตผ เดฎเดฑเดจเตเดจเดฟเดฒเตเดฒ (เดšเต‡เตผเดคเตเดค เดชเต‚เดœเตเดฏเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ 7 เด†เดฃเต) => เด•เด‚เดชเตเดฐเดทเตป เด…เดจเตเดชเดพเดคเด‚ เด’เดจเตเดจเดฟเตฝ เด•เตเดฑเดตเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚: 176 /(65 + 48*8 + 7) = 0.38. เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเต†เด™เตเด•เดฟเตฝ, เดฎเตเด–เดคเตเดคเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดจเดฟเด™เตเด™เตพ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟ. เด…เดคเต†, เดšเต†เดฑเดฟเดฏ เดซเดฏเดฒเตเด•เตพเด•เตเด•เต เดˆ เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เดตเดณเดฐเต† เดซเดฒเดชเตเดฐเดฆเดฎเดฒเตเดฒ. เดŽเดจเตเดจเดพเตฝ เดตเดฒเดฟเดฏ เดซเดฏเดฒเตเด•เตพเด•เตเด•เต เดŽเดจเตเดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚? เดซเดฏเตฝ เดตเดฒเตเดชเตเดชเด™เตเด™เตพ เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† เดตเดฒเตเดชเตเดชเดคเตเดคเต‡เด•เตเด•เดพเตพ เดตเดณเดฐเต† เดตเดฒเตเดคเดพเดฃเต. เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต! เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดตเต‡เดฃเตเดŸเดฟ เดซเต—เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดฎเต‹เดฃเต‹เดฒเต‹เด—เต เด†เตผเด•เตเด•เตˆเดตเตผ 1.46 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏ เด’เดฐเต เดฏเดฅเดพเตผเดคเตเดฅ (เด†เดฆเตผเดถเดตเดคเตเด•เดฐเดฟเด•เตเด•เดพเดคเตเดค) เด—เตเดฃเด•เด‚ เดจเตฝเด•เตเดจเตเดจเต - เดเด•เดฆเต‡เดถเด‚ เด’เดจเตเดจเดฐ เดคเดตเดฃ! เด…เดคเต†, เดซเดฏเตฝ เด‡เด‚เด—เตเดฒเต€เดทเดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

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