ΠΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΊΠ° ΠΊΡΡΡΠ°
Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΊΠΎΡΠΈ ΡΠΎΡΠΌΡΠ»ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Ρ ΠΈΠ΄Π΅ΡΡ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΠΈ ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΡ ΡΠΈΠΊΡΠ½Π΅ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ Π΄ΡΠΆΠΈΠ½Π΅, ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠ²ΠΈΠΌΠ°, ΠΏΡΠ°Π²ΠΈΠ»ΠΈΠΌΠ° ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ΠΈ ΠΈΠ·Π³ΡΠ°Π΄ΡΠΈ Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π΄ΡΠ²Π΅ΡΠ°.
ΠΠ½Π°ΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ²Π°ΠΊΠΈ Π·Π½Π°ΠΊ ΡΡΠ²Π° ΠΊΠ°ΠΎ Π½ΠΈΠ· ΠΎΠ΄ 0 ΠΈ 1 ΠΈ Π΄Π° Π·Π°ΡΠ·ΠΈΠΌΠ° 8 Π±ΠΈΡΠΎΠ²Π°. ΠΠ²ΠΎ ΡΠ΅ Π½Π°Π·ΠΈΠ²Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ ΡΠΈΠΊΡΠ½Π΅ Π΄ΡΠΆΠΈΠ½Π΅ ΡΠ΅Ρ ΡΠ²Π°ΠΊΠΈ Π·Π½Π°ΠΊ ΠΊΠΎΡΠΈΡΡΠΈ ΠΈΡΡΠΈ ΡΠΈΠΊΡΠ½ΠΈ Π±ΡΠΎΡ Π±ΠΈΡΠΎΠ²Π° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠ΅.
Π Π΅ΡΠΈΠΌΠΎ Π΄Π° Π½Π°ΠΌ ΡΠ΅ Π΄Π°Ρ ΡΠ΅ΠΊΡΡ. ΠΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΌΠ°ΡΠΈΡΠΈ ΠΊΠΎΠ»ΠΈΡΠΈΠ½Ρ ΠΏΡΠΎΡΡΠΎΡΠ° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΠ³ Π·Π° ΡΡΠ²Π°ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΠ³ Π·Π½Π°ΠΊΠ°?
ΠΠ»Π°Π²Π½Π° ΠΈΠ΄Π΅ΡΠ° ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ Π΄ΡΠΆΠΈΠ½Π΅. ΠΠΎΠΆΠ΅ΠΌΠΎ ΠΈΡΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠΈΡΠ΅Π½ΠΈΡΡ Π΄Π° ΡΠ΅ Π½Π΅ΠΊΠΈ Π·Π½Π°ΠΊΠΎΠ²ΠΈ Ρ ΡΠ΅ΠΊΡΡΡ ΡΠ°Π²ΡΠ°ΡΡ ΡΠ΅ΡΡΠ΅ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈΡ
(
ΠΠ°ΠΊΠΎ, Π·Π½Π°ΡΡΡΠΈ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ Π±ΠΈΡΠΎΠ²Π°, Π½Π΅Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ΠΎ Π³Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠΈ?
Π Π°Π·ΠΌΠΎΡΡΠΈΡΠ΅ Π»ΠΈΠ½ΠΈΡΡ "Π°Π±Π°ΡΠ΄Π°Π±". ΠΠΌΠ° 8 Π·Π½Π°ΠΊΠΎΠ²Π°, Π° ΠΊΠ°Π΄Π° ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ° ΡΠΈΠΊΡΠ½Π΅ Π΄ΡΠΆΠΈΠ½Π΅, Π±ΠΈΡΠ΅ ΠΌΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ 64 Π±ΠΈΡΠ° Π΄Π° Π³Π° ΡΠ°ΡΡΠ²Π°. ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° ΡΠΈΠΌΠ±ΠΎΠ»Π° "Π°", "Π±", "Ρ" ΠΈ "Π" ΡΠ΅Π΄Π½Π°ΠΊΠΎ 4, 2, 1, 1 ΡΠ΅ΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΠΌΠΎ Π΄Π° Π·Π°ΠΌΠΈΡΠ»ΠΈΠΌΠΎ "Π°Π±Π°ΡΠ΄Π°Π±" ΠΌΠ°ΡΠ΅ Π±ΠΈΡΠΎΠ²Π°, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠΈΡΠ΅Π½ΠΈΡΡ Π΄Π° "Π΄ΠΎ" ΡΠ°Π²ΡΠ° ΡΠ΅ ΡΠ΅ΡΡΠ΅ ΠΎΠ΄ "Π"Π "Π" ΡΠ°Π²ΡΠ° ΡΠ΅ ΡΠ΅ΡΡΠ΅ ΠΎΠ΄ "Ρ" ΠΈ "Π". ΠΠΎΡΠ½ΠΈΠΌΠΎ ΡΠ° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ΠΌ "Π΄ΠΎ" ΡΠ° ΡΠ΅Π΄Π½ΠΈΠΌ Π±ΠΈΡΠΎΠΌ ΡΠ΅Π΄Π½Π°ΠΊΠΈΠΌ 0, "Π" Π΄ΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΠΌΠΎ Π΄Π²ΠΎΠ±ΠΈΡΠ½ΠΈ ΠΊΠΎΠ΄ 11, Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΡΠΈ Π±ΠΈΡΠ° 100 ΠΈ 011 ΡΠ΅ΠΌΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠΈ "Ρ" ΠΈ "Π".
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ:
a
0
b
11
c
100
d
011
ΠΠ°ΠΊΠ»Π΅, Π»ΠΈΠ½ΠΈΡΠ° "Π°Π±Π°ΡΠ΄Π°Π±" ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ΠΌΠΎ ΠΊΠ°ΠΎ 00110100011011 (0|0|11|0|100|011|0|11)ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π³ΠΎΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅. ΠΠ΅ΡΡΡΠΈΠΌ, Π³Π»Π°Π²Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ΅ Π±ΠΈΡΠΈ Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΡ. ΠΠ°Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΠΌΠΎ Π΄Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌΠΎ Π½ΠΈΠ· 00110100011011, Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΠΏΠΎΡΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠΈ ΠΊΠ°ΠΎ:
0|011|0|100|011|0|11 adacdab
0|0|11|0|100|0|11|011 aabacabd
0|011|0|100|0|11|0|11 adacabab
...
ΠΈΡΠ΄
ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΈΠ·Π±Π΅Π³Π»ΠΈ ΠΎΠ²Ρ Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ΠΎΡΡ, ΠΌΠΎΡΠ°ΠΌΠΎ ΠΎΡΠΈΠ³ΡΡΠ°ΡΠΈ Π΄Π° Π½Π°ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΡΠ°Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°, ΡΡΠΎ Π·Π°ΡΠ·Π²ΡΠ°Ρ ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ° Π΄Π° ΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΌΠΎΠ³Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠΈ ΡΠ°ΠΌΠΎ Π½Π° ΡΠ΅Π΄Π°Π½ ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ Π½Π°ΡΠΈΠ½. ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ΠΎΡΠΈΠ³ΡΡΠ°Π²Π° Π΄Π° Π½ΠΈΡΠ΅Π΄Π°Π½ ΠΊΠΎΠ΄ Π½ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡ Π΄ΡΡΠ³ΠΎΠ³. ΠΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΠΌΠΎ Π±ΠΈΡΠΎΠ²Π΅ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΠ³ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠ°. Π£ Π³ΠΎΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ 0 ΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡ 011, ΡΡΠΎ ΠΊΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°. ΠΠ°ΠΊΠ»Π΅, Π°ΠΊΠΎ Π½Π°ΡΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΡΠ°Π²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°, ΠΎΠ½Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠΈ (ΠΈ ΠΎΠ±ΡΠ½ΡΡΠΎ).
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠΎ Π½Π° Π³ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ²Π°Ρ ΠΏΡΡ ΡΠ΅ΠΌΠΎ Π΄ΠΎΠ΄Π΅Π»ΠΈΡΠΈ ΡΠΈΠΌΠ±ΠΎΠ»Π΅ "Π°", "Π±", "Ρ" ΠΈ "Π" ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΊΠΎΡΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΡΠ°Π²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°.
a
0
b
10
c
110
d
111
Π‘Π° ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ΠΌ, ΡΡΡΠΈΠ½Π³ "Π°Π±Π°ΡΠ΄Π°Π±" Π±ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΎ 00100100011010 (0|0|10|0|100|011|0|10). ΠΠ»ΠΈ 00100100011010 Π²Π΅Ρ ΡΠ΅ΠΌΠΎ ΠΌΠΎΡΠΈ Π½Π΅Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠΈ ΠΈ Π²ΡΠ°ΡΠΈΡΠΈ ΡΠ΅ Π½Π° Π½Π°Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈ Π½ΠΈΠ· "Π°Π±Π°ΡΠ΄Π°Π±".
Π₯ΡΡΡΠΌΠ°Π½ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅
Π‘Π°Π΄Π° ΠΊΠ°Π΄Π° ΡΠΌΠΎ ΡΠ΅ ΠΏΠΎΠ·Π°Π±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ Π΄ΡΠΆΠΈΠ½Π΅ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΈΡΠ°ΠΌΠΎ ΠΎ Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΡ.
ΠΠ΅ΡΠΎΠ΄Π° ΡΠ΅ Π·Π°ΡΠ½ΠΈΠ²Π° Π½Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΡ ΡΡΠ°Π±Π°Π»Π°. Π£ ΡΠ΅ΠΌΡ ΡΠ²ΠΎΡ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΠΊΠΎΠ½Π°ΡΠ°Π½ ΠΈΠ»ΠΈ ΡΠ½ΡΡΡΠ°ΡΡΠΈ. Π£ ΠΏΠΎΡΠ΅ΡΠΊΡ ΡΠ΅ ΡΠ²ΠΈ ΡΠ²ΠΎΡΠΎΠ²ΠΈ ΡΠΌΠ°ΡΡΠ°ΡΡ Π»ΠΈΡΡΠΎΠ²ΠΈΠΌΠ° (ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈΠΌΠ°), ΠΊΠΎΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΡΡ ΡΠ°ΠΌ ΡΠΈΠΌΠ±ΠΎΠ» ΠΈ ΡΠ΅Π³ΠΎΠ²Ρ ΡΠ΅ΠΆΠΈΠ½Ρ (ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΡΡΠ΅ΡΡΠ°Π»ΠΎΡΡ ΠΏΠΎΡΠ°Π²ΡΠΈΠ²Π°ΡΠ°). Π£Π½ΡΡΡΠ°ΡΡΠΈ ΡΠ²ΠΎΡΠΎΠ²ΠΈ ΡΠ°Π΄ΡΠΆΠ΅ ΡΠ΅ΠΆΠΈΠ½Ρ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠ° ΠΈ ΠΎΠ΄Π½ΠΎΡΠ΅ ΡΠ΅ Π½Π° Π΄Π²Π° ΡΠ²ΠΎΡΠ° ΠΏΠΎΡΠΎΠΌΠΊΠ°. ΠΠΎ ΠΎΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΡ, Π±ΠΈΡ Β«ΠΠ‘ΠΠ£ΠΠΠ‘Β» ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ° ΠΏΡΠ°ΡΠ΅ΡΠ΅ Π»Π΅Π²Π΅ Π³ΡΠ°Π½Π΅, ΠΈ Β«ΠΠ‘ΠΠ£ΠΠΠ‘Β» - Π½Π° Π΄Π΅ΡΠ½ΠΎΡ. Ρ ΠΏΡΠ½ΠΎΠΌ ΡΡΠ°Π±Π»Ρ N Π»ΠΈΡΡΠΎΠ²ΠΈ ΠΈ Π-ΠΠ‘ΠΠ£ΠΠΠ‘ ΡΠ½ΡΡΡΠ°ΡΡΠΈ ΡΠ²ΠΎΡΠΎΠ²ΠΈ. ΠΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ°ΡΠ° Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π΄ΡΠ²Π΅ΡΠ° Π½Π΅ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈ ΠΎΠ΄Π±Π°ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π΄ΡΠΆΠΈΠ½Π΅.
ΠΠΎΡΠΈΡΡΠΈΡΠ΅ΠΌΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π΄ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎ ΡΡΠ°Π±Π»ΠΎ, Π³Π΄Π΅ ΡΠ΅ ΡΠ²ΠΎΡ ΡΠ° Π½Π°ΡΠ½ΠΈΠΆΠΎΠΌ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠΎΠΌ Π΄ΠΎΠ±ΠΈΡΠΈ Π½Π°ΡΠ²Π΅ΡΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. ΠΠΎΡΠ°ΡΠΈ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅ ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Ρ Π½Π°ΡΡΠ°Π²ΠΊΡ:
- ΠΡΠ΅ΠΈΡΠ°ΡΡΠ΅ Π»ΠΈΡΠ½ΠΈ ΡΠ²ΠΎΡ Π·Π° ΡΠ²Π°ΠΊΠΈ Π·Π½Π°ΠΊ ΠΈ Π΄ΠΎΠ΄Π°ΡΡΠ΅ ΠΈΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π΄.
- ΠΠΎΠΊ ΠΏΠΎΡΡΠΎΡΠΈ Π²ΠΈΡΠ΅ ΠΎΠ΄ ΡΠ΅Π΄Π½ΠΎΠ³ Π»ΠΈΡΡΠ° Ρ ΡΠ΅Π΄Ρ, ΡΡΠ°Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅:
- Π£ΠΊΠ»ΠΎΠ½ΠΈΡΠ΅ Π΄Π²Π° ΡΠ²ΠΎΡΠ° ΡΠ° Π½Π°ΡΠ²ΠΈΡΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ (Π½Π°ΡΠ½ΠΈΠΆΠΎΠΌ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠΎΠΌ) ΠΈΠ· ΡΠ΅Π΄Π°;
- ΠΠ°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΠ½ΡΡΡΠ°ΡΡΠΈ ΡΠ²ΠΎΡ, Π³Π΄Π΅ ΡΠ΅ ΠΎΠ²Π° Π΄Π²Π° ΡΠ²ΠΎΡΠ° Π±ΠΈΡΠΈ Π΄Π΅ΡΠ°, Π° ΡΡΠ΅ΡΡΠ°Π»ΠΎΡΡ ΠΏΠΎΡΠ°Π²ΡΠΈΠ²Π°ΡΠ° ΡΠ΅ Π±ΠΈΡΠΈ ΡΠ΅Π΄Π½Π°ΠΊΠ° Π·Π±ΠΈΡΡ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° ΠΎΠ²Π° Π΄Π²Π° ΡΠ²ΠΎΡΠ°.
- ΠΠΎΠ΄Π°ΡΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΠ²ΠΎΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π΄.
- ΠΠ΅Π΄ΠΈΠ½ΠΈ ΠΏΡΠ΅ΠΎΡΡΠ°Π»ΠΈ ΡΠ²ΠΎΡ Π±ΠΈΡΠ΅ ΠΊΠΎΡΠ΅Π½ ΠΈ ΡΠΈΠΌΠ΅ ΡΠ΅ ΡΠ΅ Π·Π°Π²ΡΡΠΈΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠ° Π΄ΡΠ²Π΅ΡΠ°.
ΠΠ°ΠΌΠΈΡΠ»ΠΈΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π½Π΅ΠΊΠΈ ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠ°ΡΡΠΎΡΠΈ ΡΠ°ΠΌΠΎ ΠΎΠ΄ Π·Π½Π°ΠΊΠΎΠ²Π° "Π° Π± Ρ Π΄" ΠΈ "ΠΈ", Π° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ΅ ΡΠΈΡ ΠΎΠ²ΠΎΠ³ ΠΏΠΎΡΠ°Π²ΡΠΈΠ²Π°ΡΠ° ΡΡ 15, 7, 6, 6 ΠΈ 5, ΡΠ΅ΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΡΠΏΠΎΠ΄ ΡΡ ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ ΠΎΠ΄ΡΠ°ΠΆΠ°Π²Π°ΡΡ ΠΊΠΎΡΠ°ΠΊΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
ΠΡΡΠ°ΡΠ° ΠΎΠ΄ ΠΊΠΎΡΠ΅Π½Π° Π΄ΠΎ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠ³ ΠΊΡΠ°ΡΡΠ΅Π³ ΡΠ²ΠΎΡΠ° ΡΠ΅ ΡΡΠΊΠ»Π°Π΄ΠΈΡΡΠΈΡΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈ ΠΊΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° (ΡΠ°ΠΊΠΎΡΠ΅ ΠΏΠΎΠ·Π½Π°Ρ ΠΊΠ°ΠΎ Π₯Π°ΡΠΌΠ°Π½ΠΎΠ² ΠΊΠΎΠ΄) ΠΊΠΎΡΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΡ ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΎΠΌ ΡΠ° ΡΠΈΠΌ ΠΊΡΠ°ΡΡΠΈΠΌ ΡΠ²ΠΎΡΠΎΠΌ.
Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎ Π΄ΡΠ²ΠΎ
ΠΡΠΏΠΎΠ΄ ΡΠ΅ΡΠ΅ Π½Π°ΡΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎΠ³ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ΅ Ρ Π¦++ ΠΈ ΠΠ°Π²ΠΈ:
#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%. Π£ Π¦++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡ ΠΈΠ·Π½Π°Π΄, ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΡΡΡΠΈΠ½Π³ ΠΊΠ»Π°ΡΡ Π·Π° ΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΎΠ³ ΡΡΡΠΈΠ½Π³Π° ΠΊΠ°ΠΊΠΎ Π±ΠΈΡΠΌΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΡΡΠΈΠ½ΠΈΠ»ΠΈ ΡΠΈΡΡΠΈΠ²ΠΈΠΌ.
ΠΠ°ΡΠΎ ΡΡΠΎ Π΅ΡΠΈΠΊΠ°ΡΠ½Π΅ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅Π΄Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π·Π°Ρ ΡΠ΅Π²Π°ΡΡ ΠΏΠΎ ΡΠΌΠ΅ΡΠ°ΡΡ Π(Π»ΠΎΠ³(Π)) Π²ΡΠ΅ΠΌΠ΅, Π°Π»ΠΈ Ρ ΠΏΠΎΡΠΏΡΠ½ΠΎΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΡΡΠ°Π±Π»Ρ ΡΠ° N ΠΎΡΡΠ°Π²ΡΠ° ΠΏΡΠΈΡΡΡΠ½Π΅ ΠΠ‘ΠΠ£ΠΠΠ‘Π-ΠΠ‘ΠΠ£ΠΠΠ‘ ΡΠ²ΠΎΡΠΎΠ²Π°, Π° Π₯Π°ΡΠΌΠ°Π½ΠΎΠ²ΠΎ ΡΡΠ°Π±Π»ΠΎ ΡΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎ ΡΡΠ°Π±Π»ΠΎ, ΡΠ°Π΄Π° ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ ΡΠΊΡΡΡΡΡΠ΅ Π(ΠΠ»ΠΎΠ³(Π)) Π²ΡΠ΅ΠΌΠ΅, Π³Π΄Π΅ N - ΠΠΈΠΊΠΎΠ²ΠΈ.
ΠΠ·Π²ΠΎΡΠΈ:
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ