เจนเจซเจฎเฉˆเจจ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ

เจ•เฉ‹เจฐเจธ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ "เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฒเจˆ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ" เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจฆเจพ เจ…เจจเฉเจตเจพเจฆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจนเจซเจฎเฉˆเจจ เจ•เฉ‹เจกเจฟเฉฐเจ— เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจนเฉˆ เจœเฉ‹ เจซเจพเจˆเจฒ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ เจฆเฉ‡ เจฎเฉ‚เจฒ เจตเจฟเจšเจพเจฐ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจซเจฟเจ•เจธเจก เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฒเฉฐเจฌเจพเจˆ เจ‡เฉฐเจ•เฉ‹เจกเจฟเฉฐเจ—, เจตเจฟเจฒเฉฑเจ–เจฃ เจคเฉŒเจฐ 'เจคเฉ‡ เจกเฉ€เจ•เฉ‹เจก เจ•เจฐเจจ เจฏเฉ‹เจ— เจ•เฉ‹เจก, เจ…เจ—เฉ‡เจคเจฐ เจจเจฟเจฏเจฎเจพเจ‚, เจ…เจคเฉ‡ เจนเจซเจฎเฉˆเจจ เจŸเฉเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ…เจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจนเจฐเฉ‡เจ• เจ…เฉฑเจ–เจฐ 0 เจ…เจคเฉ‡ 1 เจฆเฉ‡ เจ•เฉเจฐเจฎ เจตเจœเฉ‹เจ‚ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ 8 เจฌเจฟเฉฑเจŸ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจจเฉ‚เฉฐ เจซเจฟเจ•เจธเจก เจฒเฉฐเจฌเจพเจˆ เจ‡เฉฐเจ•เฉ‹เจกเจฟเฉฐเจ— เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจนเจฐเฉ‡เจ• เจ…เฉฑเจ–เจฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ•เฉ‹ เจจเจฟเจธเจผเจšเจฟเจค เจธเฉฐเจ–เจฟเจ† เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจŸเฉˆเจ•เจธเจŸ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ…เฉฑเจ–เจฐ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจฅเจพเจ‚ เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจ˜เจŸเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚?

เจฎเฉเฉฑเจ– เจตเจฟเจšเจพเจฐ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฒเฉฐเจฌเจพเจˆ เจ‡เฉฐเจ•เฉ‹เจกเจฟเฉฐเจ— เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจŸเฉˆเจ•เจธเจŸ เจตเจฟเฉฑเจš เจ•เฉเจ เจ…เฉฑเจ–เจฐ เจฆเฉ‚เจœเจฟเจ†เจ‚ เจจเจพเจฒเฉ‹เจ‚ เจตเฉฑเจง เจ…เจ•เจธเจฐ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ (เจ‡เฉฑเจฅเฉ‡ เจตเฉ‡เจ–เฉ‹) เจ‡เฉฑเจ• เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจตเจฟเจ•เจธเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจœเฉ‹ เจ˜เฉฑเจŸ เจฌเจฟเฉฑเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ…เฉฑเจ–เจฐเจพเจ‚ เจฆเฉ‡ เจธเจฎเจพเจจ เจ•เฉเจฐเจฎ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจเจ—เจพเฅค เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฒเฉฐเจฌเจพเจˆ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ…เฉฑเจ–เจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจชเจฐเจฟเจตเจฐเจคเจจเจธเจผเฉ€เจฒ เจธเฉฐเจ–เจฟเจ† เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจน เจ‡เจธ เจ—เฉฑเจฒ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจน เจฆเจฟเฉฑเจคเฉ‡ เจŸเฉˆเจ•เจธเจŸ เจตเจฟเฉฑเจš เจ•เจฟเฉฐเจจเฉ€ เจตเจพเจฐ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจเฅค เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจ•เฉเจ เจ…เฉฑเจ–เจฐ 1 เจฌเจฟเฉฑเจŸ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ˜เฉฑเจŸ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเจจ, เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจฆเฉ‚เจธเจฐเฉ‡ 2 เจฌเจฟเฉฑเจŸ, 3 เจœเจพเจ‚ เจตเฉฑเจง เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฒเฉฐเจฌเจพเจˆ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจฆเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจธเจฟเจฐเจซ เจ•เฉเจฐเจฎ เจฆเฉ‡ เจฌเจพเจ…เจฆ เจฆเฉ€ เจกเฉ€เจ•เฉ‹เจกเจฟเฉฐเจ— เจนเฉˆเฅค

เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ‡ เจ•เฉเจฐเจฎ เจจเฉ‚เฉฐ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹เจ, เจ‡เจธเจจเฉ‚เฉฐ เจ…เจธเจชเจธเจผเจŸ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจกเฉ€เจ•เฉ‹เจก เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเฉ€เจ?

เจฒเจพเจˆเจจ 'เจคเฉ‡ เจ—เฉŒเจฐ เจ•เจฐเฉ‹ "abacdab". เจ‡เจธ เจตเจฟเฉฑเจš 8 เจ…เฉฑเจ–เจฐ เจนเจจ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจจเจฟเจธเจผเจšเจฟเจค เจฒเฉฐเจฌเจพเจˆ เจจเฉ‚เฉฐ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‡เจธเจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ 64 เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจจเฉ‹เจŸ เจ•เจฐเฉ‹ เจ•เจฟ เจชเฉเจฐเจคเฉ€เจ• เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ "เจ", "เจฌเฉ€", "เจธเฉ€" ะธ "เจกเฉ€" เจ•เฉเจฐเจฎเจตเจพเจฐ 4, 2, 1, 1 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉˆเฅค เจฆเฉ€ เจ•เจฒเจชเจจเจพ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ "abacdab" เจ˜เฉฑเจŸ เจฌเจฟเฉฑเจŸ, เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ "เจคเฉ‹เจ‚" เจจเจพเจฒเฉ‹เจ‚ เจœเจผเจฟเจ†เจฆเจพ เจตเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ "เจฌเฉ€"เจ…เจคเฉ‡ "เจฌเฉ€" เจจเจพเจฒเฉ‹เจ‚ เจœเจผเจฟเจ†เจฆเจพ เจตเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ "c" ะธ "เจกเฉ€". เจ†เจ‰ เจ•เฉ‹เจกเจฟเฉฐเจ— เจฆเฉเจ†เจฐเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ "เจคเฉ‹เจ‚" 0 เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจ‡เฉฑเจ• เจฌเจฟเฉฑเจŸ เจจเจพเจฒ, "เจฌเฉ€" เจ…เจธเฉ€เจ‚ เจฆเฉ‹-เจฌเจฟเฉฑเจŸ เจ•เฉ‹เจก 11 เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ…เจคเฉ‡ เจคเจฟเฉฐเจจ เจฌเจฟเฉฑเจŸ 100 เจ…เจคเฉ‡ 011 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ…เจธเฉ€เจ‚ เจเจจเจ•เฉ‹เจก เจ•เจฐเจพเจ‚เจ—เฉ‡ "c" ะธ "เจกเฉ€".

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจพเจ‚เจ—เฉ‡:

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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹