Π Π½Π°Π²Π΅ΡΠ΅ΡΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ°ΡΡΠ° Π½Π° ΠΊΡΡΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡ ΠΌΠ΅ Π·Π° Π²Π°Ρ ΠΏΡΠ΅Π²ΠΎΠ΄ Π½Π° ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π».
ΠΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π₯Π°ΡΡΠΌΠ°Π½ Π΅ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΈΠ΄Π΅Ρ Π½Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΄ΡΠ»ΠΆΠΈΠ½Π°, ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅, ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΡΡΠ²ΠΎ Π₯Π°ΡΡΠΌΠ°Π½.
ΠΠ½Π°Π΅ΠΌ, ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ 0 ΠΈ 1 ΠΈ Π·Π°Π΅ΠΌΠ° 8 Π±ΠΈΡΠ°. Π’ΠΎΠ²Π° ΡΠ΅ Π½Π°ΡΠΈΡΠ° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° Π΄ΡΠ»ΠΆΠΈΠ½Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½Π°ΠΊΠ²ΠΎ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡΠΎΠ²Π΅ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅.
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ΅ΠΊΡΡ. ΠΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ»?
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΈΠ΄Π΅Ρ Π΅ Π² ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΄ΡΠ»ΠΆΠΈΠ½Π°. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π² ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ ΡΡΠ΅ΡΠ°Ρ ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΎΡ Π΄ΡΡΠ³ΠΈ (), Π·Π° Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈΠΌ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Ρ ΡΡΡΠ°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π±ΠΈΡΠΎΠ²Π΅. ΠΡΠΈ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΄ΡΠ»ΠΆΠΈΠ½Π° ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°ΠΌΠ΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡΠΎΠ²Π΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΏΠΎΡΠ²ΡΠ²Π°Π½Π΅ Π² Π΄Π°Π΄Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡ. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ°, Π½ΡΠΊΠΎΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°Π΅ΠΌΠ°Ρ ΡΠ°ΠΌΠΎ 1 Π±ΠΈΡ, Π° Π΄ΡΡΠ³ΠΈ 2, 3 ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΄ΡΠ»ΠΆΠΈΠ½Π° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
ΠΠ°ΠΊ, Π·Π½Π°Π΅ΠΉΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΎΡ Π±ΠΈΡΠΎΠ²Π΅, Π΄Π° Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌΠ΅ Π΅Π΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ?
ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ΅Π΄ΠΈΡΠ°ΡΠ° Β«aabacdabΒ». Π Π½Π΅Ρ ΠΈΠΌΠ° 8 ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈ ΠΏΡΠΈ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° Π΄ΡΠ»ΠΆΠΈΠ½Π° Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ 64 Π±ΠΈΡΠ°. ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅, ΡΠ΅ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ Β«aΒ», Β«bΒ», Β«cΒ» ΠΈ Β«dΒ» Π΅ 4, 2, 1, 1 ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ. ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Β«aabacdabΒ» Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π±ΠΈΡΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Β«aΒ» ΡΠ΅ ΡΡΠ΅ΡΠ° ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΎΡ Β«bΒ», Π° Β«bΒ» ΡΠ΅ ΡΡΠ΅ΡΠ° ΠΏΠΎ-ΡΠ΅ΡΡΠΎ ΠΎΡ Β«cΒ» ΠΈ Β«dΒ». Π©Π΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Β«aΒ» Ρ Π΅Π΄ΠΈΠ½ Π±ΠΈΡ, ΡΠ°Π²Π΅Π½ Π½Π° 0, Β«bΒ» Π½ΠΈΠ΅ ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΠΈΠΌ Π΄Π²ΡΠ±ΠΈΡΠΎΠ² ΠΊΠΎΠ΄ 11, Π° Ρ ΡΡΠΈ Π±ΠΈΡΠ° 100 ΠΈ 011 ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ° Β«cΒ» ΠΈ Β«dΒ».
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ:
a
0
b
11
Ρ
100
d
011
Π’Π°ΠΊΠ° ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π΄ΠΈΡΠ°ΡΠ° Β«aabacdabΒ» , ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅. ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΎΠ±Π°ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ Π² Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π΄ΠΈΡΠ°ΡΠ° 00110100011011 (0|0|11|0|100|011|0|11), ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π΅Π΅Π΄Π½ΠΎΠ·Π½Π°ΡΠ΅Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° ΠΊΠ°ΡΠΎ: 001101000110110|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|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Β», Β«bΒ», Β«cΒ» ΠΈ Β«dΒ» ΠΊΠΎΠ΄ΠΎΠ²Π΅, ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠΈ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π·Π° ΠΏΡΠ΅ΡΠΈΠΊΡ.
a
0
b
10
Ρ
110
d
111
Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΊΠΎΠ²Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅, Π½ΠΈΠ·ΡΡ Β«aabacdabΒ» ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΡΠΎ 00100100011010 (0|0|10|0|100|011|0|10). Π Π΅ΡΠΎ, ΡΠ΅ 00100100011010 Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌΠ΅ Π΅Π΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΈ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π°ΡΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ Π½ΠΈΠ· Β«aabacdabΒ».
ΠΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π₯Π°ΡΡΠΌΠ°Π½
Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΌΠ΅ ΡΠ°Π·Π±ΡΠ°Π»ΠΈ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΄ΡΠ»ΠΆΠΈΠ½Π° ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° ΠΏΡΠ΅ΡΠΈΠΊΡ, Π½Π΅ΠΊΠ° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π₯Π°ΡΡΠΌΠ°Π½.
ΠΠ΅ΡΠΎΠ΄ΡΡ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²ΠΎΠΈΡΠ½ΠΈ Π΄ΡΡΠ²Π΅ΡΠ°. Π Π½Π΅Π³ΠΎ Π²ΡΠ·Π΅Π»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ»ΠΈ ΠΊΡΠ°ΠΉΠ½ΠΈΡ, ΠΈΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ. ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ ΡΠ΅ ΡΡΠΈΡΠ°Ρ Π·Π° Π»ΠΈΡΡΠ° (ΠΊΡΠ°ΠΉΠ½ΠΈ), ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ°ΠΌΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΡΠ΅Π³Π»ΠΎ (Ρ.Π΅. ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ²Π°ΡΠ°). ΠΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ΅Π³Π»ΠΎ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈ ΡΠ΅ ΠΎΡΠ½Π°ΡΡΡ ΠΊΡΠΌ Π΄Π²Π° Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°. ΠΠΎ ΠΎΠ±ΡΠΎ ΡΡΠ³Π»Π°ΡΠΈΠ΅, Π±ΠΈΡΡΡ "0" ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΡΠ»Π΅Π΄Π²Π°Π½Π΅ΡΠΎ ΠΏΠΎ Π»ΡΠ²ΠΎΡΠΎ ΠΊΠ»ΠΎΠ½ΡΠ΅, Π° "1" β ΠΏΠΎ Π΄ΡΡΠ½ΠΎΡΠΎ. Π ΠΏΡΠ»Π½ΠΎ Π΄ΡΡΠ²ΠΎ N Π»ΠΈΡΡΠ° ΠΈ N-1 Π²ΡΡΡΠ΅ΡΠ½ΠΈ Π²ΡΠ·Π»ΠΈ. ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅ ΠΏΡΠΈ ΡΡΡΠΎΠ΅Π½Π΅ΡΠΎ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΡΠΌΠ°Π½ Π΄Π° ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Ρ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½Π° Π΄ΡΠ»ΠΆΠΈΠ½Π°.
Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠΏΠ°ΡΠΊΠ° Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΈ Π·Π° ΠΏΠΎΡΡΡΠΎΡΠ²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΡΠΌΠ°Π½, ΠΊΡΠ΄Π΅ΡΠΎ Π½Π° Π²ΡΠ·Π΅Π»Π° Ρ Π½Π°ΠΉ-Π½ΠΈΡΠΊΠ° ΡΠ΅ΡΡΠΎΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠΈΡΡΠ΄Π΅Π½ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. ΠΠΎ-Π΄ΠΎΠ»Ρ ΡΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΡΡΡΠΏΠΊΠΈΡΠ΅ Π·Π° ΠΏΠΎΡΡΡΠΎΡΠ²Π°Π½Π΅:
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π»ΠΈΡΡΠΎΠ² Π²ΡΠ·Π΅Π» Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ Π³ΠΈ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΈ.
- ΠΠΎΠΊΠ°ΡΠΎ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ Π»ΠΈΡΡ, ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΡΠ΅ΠΌΠ°Ρ Π½Π΅ΡΠ΅ Π΄Π²Π° Π²ΡΠ·Π΅Π»Π° Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ (Ρ Π½Π°ΠΉ-Π½ΠΈΡΠΊΠ° ΡΠ΅ΡΡΠΎΡΠ°) ΠΎΡ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°;
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ² Π²ΡΡΡΠ΅ΡΠ΅Π½ Π²ΡΠ·Π΅Π», ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅Π·ΠΈ Π΄Π²Π° Π²ΡΠ·Π΅Π»Π° ΡΠ΅ Π±ΡΠ΄Π°Ρ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΡΠΈ, Π° ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ²Π°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π²Π½Π° Π½Π° ΡΡΠΌΠ°ΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΠΈ Π΄Π²Π° Π²ΡΠ·Π΅Π»Π°.
- ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ Π½ΠΎΠ²ΠΈΡ Π²ΡΠ·Π΅Π» Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΈ.
- ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ ΠΎΡΡΠ°Π²Π°Ρ Π²ΡΠ·Π΅Π» ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠΎΡΠ΅Π½ΠΎΠ², Ρ ΡΠΎΠ²Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°.
ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΡΠΈ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΡΠ°ΠΌΠΎ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ Β«aΒ», Β«bΒ», Β«cΒ», Β«dΒ» ΠΈ Β«eΒ», Π° ΡΠ΅ΡΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΏΠΎΡΠ²ΡΠ²Π°Π½Π΅ ΡΠ° 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;
// ΠΡΠ·Π΅Π» Π½Π° Π΄ΡΡΠ²ΠΎ
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
{
// ΠΎΠ±Ρ
ΠΎΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΠΈ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π₯Π°ΡΠΌΠ°Π½
// Π² ΠΊΠ°ΡΡΠ°.
public static void encode(Node root, String str,
Map huffmanCode)
{
if (root == null)
return;
// Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π΅ Π»ΠΈΡΡΠΎΠ² Π²ΡΠ·Π΅Π»
if (root.left == null && root.right == null) {
huffmanCode.put(root.ch, str);
}
encode(root.left, str + "0", huffmanCode);
encode(root.right, str + "1", huffmanCode);
}
// ΠΎΠ±Ρ
ΠΎΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π°ΡΠ° Π½ΠΈΠ·
public static int decode(Node root, int index, StringBuilder sb)
{
if (root == null)
return index;
// Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π΅ Π»ΠΈΡΡΠΎΠ² Π²ΡΠ·Π΅Π»
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;
}
// ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΠΈ ΠΊΠΎΠ΄ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π°Π΄Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡ
public static void buildHuffmanTree(String text)
{
// ΠΏΡΠ΅Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ²Π° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»
// ΠΈ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ Π² ΠΊΠ°ΡΡΠ°
Map 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);
}
// Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π° ΠΎΠΏΠ°ΡΠΊΠ° Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΆΠΈΠ²ΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½
// ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡΡ Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΈΠΌΠ° Π½Π°ΠΉ-Π½ΠΈΡΠΊΠ° ΡΠ΅ΡΡΠΎΡΠ°
PriorityQueue pq = new PriorityQueue(
(l, r) -> l.freq - r.freq);
// Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π»ΠΈΡΡΠΎΠ² Π²ΡΠ·Π΅Π» Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ ΠΌΡ
// Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°ΡΠ° ΠΎΠΏΠ°ΡΠΊΠ°.
for (Map.Entry entry : freq.entrySet()) {
pq.add(new Node(entry.getKey(), entry.getValue()));
}
// ΠΏΡΠ°Π²Π΅ΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ Π²ΡΠ·Π΅Π»
while (pq.size() != 1)
{
// ΠΡΠ΅ΠΌΠ°Ρ
Π²Π°Π½Π΅ Π½Π° Π΄Π²Π°ΡΠ° Π²ΡΠ·Π΅Π»Π° Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ
// (Π½Π°ΠΉ-Π½ΠΈΡΠΊΠ° ΡΠ΅ΡΡΠΎΡΠ°) ΠΎΡ ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°
Node left = pq.poll();
Node right = pq.poll();
// Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ² Π²ΡΡΡΠ΅ΡΠ΅Π½ Π²ΡΠ·Π΅Π» Ρ ΡΠ΅Π·ΠΈ Π΄Π²Π° Π²ΡΠ·Π΅Π»Π° ΠΊΠ°ΡΠΎ Π΄Π΅ΡΠ°
// ΠΈ Ρ ΡΠ΅ΡΡΠΎΡΠ°, ΡΠ°Π²Π½Π° Π½Π° ΡΡΠΌΠ°ΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π²Π°ΡΠ° Π²ΡΠ·Π΅Π»Π°.
// ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ²ΠΈΡ Π²ΡΠ·Π΅Π» Π² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°ΡΠ° ΠΎΠΏΠ°ΡΠΊΠ°.
int sum = left.freq + right.freq;
pq.add(new Node(' ', sum, left, right));
}
// root ΡΡΡ
ΡΠ°Π½ΡΠ²Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ ΠΊΠΎΡΠ΅Π½Π° Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½
Node root = pq.peek();
// ΠΎΠ±Ρ
ΠΎΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΠΈ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π₯Π°ΡΠΌΠ°Π½ Π² ΠΊΠ°ΡΡΠ°
Map huffmanCode = new HashMap();
encode(root, "", huffmanCode);
// ΠΎΡΠΏΠ΅ΡΠ°ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π₯Π°ΡΠΌΠ°Π½
System.out.println("ΠΠΎΠ΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΡΠ° :\n");
for (Map.Entry entry : huffmanCode.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("\nΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ Π½ΠΈΠ· Π±Π΅ΡΠ΅ :\n" + text);
// ΠΎΡΠΏΠ΅ΡΠ°ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½ Π½ΠΈΠ·
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < text.length(); i++) {
sb.append(huffmanCode.get(text.charAt(i)));
}
System.out.println("\nΠΠΎΠ΄ΠΈΡΠ°Π½ Ρ Π½ΠΈΠ· Π΅ :\n" + sb);
// ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΎΠ±Ρ
ΠΎΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½ ΠΈ ΡΠΎΠ·ΠΈ ΠΏΡΡ
// Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π°ΡΠ° Π½ΠΈΠ·
int index = -1;
System.out.println("\nΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈΡΡ Π½ΠΈΠ· Π΅: \n");
while (index < sb.length() - 2) {
index = decode(root, index, sb);
}
}
public static void main(String[] args)
{
String text = "ΠΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π₯Π°ΡΠΌΠ°Π½ Π΅ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ.";
buildHuffmanTree(text);
}
}ΠΠ΅Π»Π΅ΠΆΠΊΠ°: ΠΠ°ΠΌΠ΅ΡΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΎΡ Π²Ρ ΠΎΠ΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ, Π΅ 47 * 8 = 376 Π±ΠΈΡ, Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ Π·Π°Π΅ΠΌΠ° ΡΠ°ΠΌΠΎ 194 Π±ΠΈΡΠ°, Ρ.Π΅. Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Ρ Ρ ΠΎΠΊΠΎΠ»ΠΎ 48%. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π½Π° C++ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠ»Π°ΡΠ° string Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ, Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ΡΠΈΠΌΠ°.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΠΎΠΏΠ°ΡΠΊΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ O(log(N)) Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π²ΠΌΡΠΊΠ²Π°Π½Π΅, Π° Π² ΠΏΡΠ»Π½ΠΎ Π΄Π²ΠΎΠΈΡΠ½ΠΎ Π΄ΡΡΠ²ΠΎ Ρ N Π»ΠΈΡΡΠ°ΡΠ° ΠΈΠΌΠ° 2N-1 Π²ΡΠ·Π»ΠΈ, ΠΈ Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π₯Π°ΡΡΠΌΠ°Π½ Π΅ ΠΏΡΠ»Π½ΠΎ Π΄Π²ΠΎΠΈΡΠ½ΠΎ Π΄ΡΡΠ²ΠΎ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π°Π»Π³ΠΎΡΠΈΡΡΠΌΡΡ ΡΠ°Π±ΠΎΡΠΈ Π·Π° O(Nlog(N)) Π²ΡΠ΅ΠΌΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ N Π΅ Π±ΡΠΎΡΡ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
