ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Алгоритм Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° для n ΠΈΡ‡Π½ΠΎΠΉ систСмы счислСния

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Алгоритм [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

УзСлкирлцая
ВСс1312110

По Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ возьмСм Ρ‚Ρ€ΠΈ символа с наимСньшСй частотой β€” это я,ΠΊ,Ρ€. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ· Π½ΠΈΡ… Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» якр вСсом 2 ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ ΠΊ списку ΡƒΠ·Π»ΠΎΠ²:

УзСлякрилца
ВСс23211

Π—Π°Ρ‚Π΅ΠΌ объСдиним Π² ΠΎΠ΄ΠΈΠ½ ΡƒΠ·Π΅Π» ΡƒΠ·Π»Ρ‹ Π»,Ρ†,Π°:

УзСлякрилца
ВСс234

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, объСдиняСм Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π° якр,ΠΈ,Π»Ρ†Π°. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΅ΠΌΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΊΠΎΠ΄ΠΎΠ²:

Бимволкирлцая
Код+-+0000+0-++

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово «ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ «+—+0-0000-0+0-«. Π”Π»ΠΈΠ½Π° Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ слова β€” 15 Π±ΠΈΡ‚. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ ΠΌΡ‹ использовали для кодирования ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ ΠΏΠΎ 2 Π±ΠΈΡ‚Π°, Π΄Π»ΠΈΠ½Π° Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ слова составила Π±Ρ‹ 18 Π±ΠΈΡ‚.

Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ,Ρ‡Ρ‚ΠΎ прСдставлСно Π² Ρ‚Π΅ΠΌΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.Волько вмСсто Π΄Π²ΡƒΡ… символом с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ частотами Π½Π°Π΄ΠΎ Π±Ρ€Π°Ρ‚ΡŒ [math]n[/math] символов с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ частотами (ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ вСс символа Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ 0).

Π—Π°Π΄Π°Ρ‡Π° ΠΎ подсчСтС числа Π±ΠΈΡ‚ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ частоты символов,Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² исходном тСкстС.НСобходимо ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ суммарноС число Π±ΠΈΡ‚,Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для кодирования этого тСкста.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Алгоритм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° [math] >) [/math] для Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° ΠΈΠ· [math]\mathrm[/math] символов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Алгоритм Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Алгоритм Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Π°Π½Π³Π». Huffman’s algorithm) β€” Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСфиксного кодирования Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. Π‘Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 1952 Π³ΠΎΠ΄Ρƒ аспирантом ΠœΠ°ΡΡΠ°Ρ‡ΡƒΡΠ΅Ρ‚ΡΠΊΠΎΠ³ΠΎ тСхнологичСского института Дэвидом Π₯Π°Ρ„Ρ„ΠΌΠ°Π½ΠΎΠΌ ΠΏΡ€ΠΈ написании ΠΈΠΌ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… сТатия Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PKZIP 2, LZH ΠΈ Π΄Ρ€.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Алгоритм построСния Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° сводится ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ:

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π’ Π΄Π΅Ρ€Π΅Π²Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ [math]5[/math] ΡƒΠ·Π»ΠΎΠ²:

УзСлabrсd
ВСс52211
Π£Π·Π΅Π»abrcd
ВСс5222

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡΡ‚ΡŒ объСдиним Π² ΠΎΠ΄ΠΈΠ½ ΡƒΠ·Π΅Π» Π΄Π²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎ вСсу ΡƒΠ·Π»Π° β€” [math]r[/math] ΠΈ [math]cd[/math] :

Π£Π·Π΅Π»arcdb
ВСс542

Π•Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ эту ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π½ΠΎ для ΡƒΠ·Π»ΠΎΠ² [math]rcd[/math] ΠΈ [math]b[/math] :

Π£Π·Π΅Π»brcda
ВСс65

На послСднСм шагС объСдиним Π΄Π²Π° ΡƒΠ·Π»Π° β€” [math]brcd[/math] ΠΈ [math]a[/math] :

Π£Π·Π΅Π»abrcd
ВСс11

ΠžΡΡ‚Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½ ΡƒΠ·Π΅Π», Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ ΠΊΠΎΡ€Π½ΡŽ Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (смотри рисунок). Π’Π΅ΠΏΠ΅Ρ€ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ слово (бинарная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π°Ρ ΠΏΡƒΡ‚ΡŒ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΊ этому символу ΠΎΡ‚ корня):

Бимволabrсd
Код01110110001001

ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π·Π°Π΄Π°Ρ‡Π΅ ΠΎ построСнии ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСфиксного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ свойства ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ подструктуры. Π’ сформулированной Π½ΠΈΠΆΠ΅ Π»Π΅ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ соблюдСниС свойства ΠΆΠ°Π΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π°.

[math]f[x]d_T(x) + f[y]d_T(y) = (f[x] + f[y])(d_(z) + 1) = f[z]d_(z) + (f[x] + f[y])[/math]

ΠΈΠ· Ρ‡Π΅Π³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ

[math] B(T) = B(T’) + f[x] + f[y] [/math]

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Алгоритм сТатия Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π’ ΠΏΡ€Π΅Π΄Π΄Π²Π΅Ρ€ΠΈΠΈ старта курса «Алгоритмы для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²Β» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для вас ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°.

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° – это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ идСю сТатия Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ фиксированной ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠ΄Π°Ρ…, прСфиксных ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… ΠΈ построСнии Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ хранится Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· 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Β».

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρƒ нас получится:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ строку Β«aabacdabΒ» ΠΌΡ‹ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ 00110100011011 (0|0|11|0|100|011|0|11), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ΄Ρ‹, прСдставлСнныС Π²Ρ‹ΡˆΠ΅. Однако основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π² Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Когда ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку 00110100011011, Ρƒ нас получится Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой нСоднозначности, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ нашС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ удовлСтворяСт Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ, ΠΊΠ°ΠΊ прСфиксноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всСго ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ способом. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прСфиксом Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Под ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ Π±ΠΈΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для прСдставлСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ символа. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 0 – это прСфикс 011, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ прСфиксноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. Π˜Ρ‚Π°ΠΊ, Ссли наши ΠΊΠΎΠ΄Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ прСфиксному ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ провСсти Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚).

Π”Π°Π²Π°ΠΉΡ‚Π΅ пСрСсмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅. На этот Ρ€Π°Π· ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ для символов Β«aΒ», Β«bΒ», Β«cΒ» ΠΈ Β«dΒ» ΠΊΠΎΠ΄Ρ‹, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ прСфиксному ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ.

Π‘ использованиСм Ρ‚Π°ΠΊΠΎΠ³ΠΎ кодирования, строка Β«aabacdabΒ» Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ 00100100011010 (0|0|10|0|100|011|0|10). А Π²ΠΎΡ‚ 00100100011010 ΠΌΡ‹ ΡƒΠΆΠ΅ смоТСм ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ нашСй исходной строкС Β«aabacdabΒ».

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ прСфиксным ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ основываСтся Π½Π° создании Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². Π’ Π½Π΅ΠΌ ΡƒΠ·Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ, Π»ΠΈΠ±ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ всС ΡƒΠ·Π»Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π»ΠΈΡΡ‚ΡŒΡΠΌΠΈ (ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ сам символ ΠΈ Π΅Π³ΠΎ вСс (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ частоту появлСния). Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ содСрТат вСс символа ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π²Π° ΡƒΠ·Π»Π°-наслСдника. По ΠΎΠ±Ρ‰Π΅ΠΌΡƒ соглашСнию, Π±ΠΈΡ‚ Β«0Β» прСдставляСт слСдованиС ΠΏΠΎ Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ, Π° Β«1Β» β€” ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ. Π’ ΠΏΠΎΠ»Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ N Π»ΠΈΡΡ‚ΡŒΠ΅Π² ΠΈ N-1 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΡƒΠ·Π»ΠΎΠ². РСкомСндуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ построСнии Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Π»ΠΈΡΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ символы для получСния ΠΊΠΎΠ΄ΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ для построСния Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, Π³Π΄Π΅ ΡƒΠ·Π»Ρƒ с наимСньшСй частотой Π±ΡƒΠ΄Π΅Ρ‚ присвоСн Π²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. НиТС описаны шаги построСния:

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠŸΡƒΡ‚ΡŒ ΠΎΡ‚ корня Π΄ΠΎ любого ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ прСфиксный ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ извСстный, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°), ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ символу, связанному с этим ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ.

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°
Π”Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

НиТС Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сТатия Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Π½Π° языках C++ ΠΈ Java:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строкой, составляСт 47 * 8 = 376 Π±ΠΈΡ‚, Π° закодированная строка Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 194 Π±ΠΈΡ‚Π°, Ρ‚.Π΅. Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 48%. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π‘++ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс string для хранСния Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эффСктивныС структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π° вставку O(log(N)) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Π² ΠΏΠΎΠ»Π½ΠΎΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ с N Π»ΠΈΡΡ‚ΡŒΡΠΌΠΈ присутствуСт 2N-1 ΡƒΠ·Π»ΠΎΠ², ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° – это ΠΏΠΎΠ»Π½ΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° O(Nlog(N)) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π³Π΄Π΅ N – количСство символов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Код Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ вСроятностСй.

Π’ΠΎΡ‚ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассчитываСт ΠΊΠΎΠ΄Ρ‹ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ вСроятности символов.
НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΏΠΎΠ΄ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ΠΎΠΌ.

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Код Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π’Π°Π±Π»ΠΈΡ†Π° вСроятности символов

Π’Π°Π±Π»ΠΈΡ†Π° вСроятности символов

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ошибка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°

НСбольшой ΠΎΡ‚Ρ€Ρ‹Π²ΠΎΠΊ ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ.

Алгоритм Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° β€” Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΆΠ°Π΄Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСфиксного кодирования Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° с минимальной ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π‘Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 1952 Π³ΠΎΠ΄Ρƒ аспирантом ΠœΠ°ΡΡΠ°Ρ‡ΡƒΡΠ΅Ρ‚ΡΠΊΠΎΠ³ΠΎ тСхнологичСского института Дэвидом Π₯Π°Ρ„Ρ„ΠΌΠ°Π½ΠΎΠΌ ΠΏΡ€ΠΈ написании ΠΈΠΌ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’ настоящСС врСмя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… сТатия Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ кодирования состоит ΠΈΠ· Π΄Π²ΡƒΡ… основных этапов:
ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°.
ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ отобраТСния ΠΊΠΎΠ΄-символ Π½Π° основС построСнного Π΄Π΅Ρ€Π΅Π²Π°.

ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: зная вСроятности символов Π² сообщСнии, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ построСния ΠΊΠΎΠ΄ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, состоящих ΠΈΠ· Ρ†Π΅Π»ΠΎΠ³ΠΎ количСства Π±ΠΈΡ‚ΠΎΠ². Π‘ΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ с большСй Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ставятся Π² соотвСтствиС Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹. ΠšΠΎΠ΄Ρ‹ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ свойством прСфиксности (Ρ‚. Π΅. Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ слово Π½Π΅ являСтся прСфиксом Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ), Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΡ… Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ частот встрСчаСмости символов Π² сообщСнии. Π”Π°Π»Π΅Π΅ Π½Π° основании этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ строится Π΄Π΅Ρ€Π΅Π²ΠΎ кодирования Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Н-Π΄Π΅Ρ€Π΅Π²ΠΎ).

Π­Ρ‚ΠΎΡ‚ процСсс ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ построСниС Π΄Π΅Ρ€Π΅Π²Π°, ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” символ с суммой вСроятностСй ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… символов, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΏΡ€ΠΈ объСдинСнии символов ΠΈΠ· послСднСго шага, Π΅Π³ΠΎ n0 ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² β€” символы ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ шага ΠΈ Ρ‚. Π΄.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· символов, входящих Π² сообщСниС, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ корня Π΄ΠΎ листа Π΄Π΅Ρ€Π΅Π²Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ символу, накапливая Π±ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎ вСтвям Π΄Π΅Ρ€Π΅Π²Π° (пСрвая Π²Π΅Ρ‚Π²ΡŒ Π² ΠΏΡƒΡ‚ΠΈ соотвСтствуСт ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌΡƒ Π±ΠΈΡ‚Ρƒ). ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Π°Ρ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² являСтся ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ символа, записанным Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ВступлСниС

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу Π²Π°ΠΌ ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстном Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, ΠΈ Π²Ρ‹ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ, ΠΊΠ°ΠΊ всС Ρ‚Π°ΠΌ устроСно ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ. ПослС прочтСния Π²Ρ‹ смоТСтС своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ(Π° Π³Π»Π°Π²Π½ΠΎΠ΅, Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ) Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€, ΡΠΆΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅, Ρ‡Π΅Ρ€Ρ‚ ΠΏΠΎΠ΄Π΅Ρ€ΠΈ, Π΄Π°Π½Π½Ρ‹Π΅! ΠšΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚, Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ свСтит ΡΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ Π₯Сндриксом!

Π”Π°-Π΄Π°, ΠΎΠ± этом ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Π₯Π°Π±Ρ€Π΅, Π½ΠΎ Π±Π΅Π· практичСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ сфокусируСмся ΠΊΠ°ΠΊ Π½Π° тСорСтичСской части, Ρ‚Π°ΠΊ ΠΈ Π½Π° программСрской. Π˜Ρ‚Π°ΠΊ, всС ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚!

НСмного Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ тСкстовом Ρ„Π°ΠΉΠ»Π΅ ΠΎΠ΄ΠΈΠ½ символ кодируСтся 8 Π±ΠΈΡ‚Π°ΠΌΠΈ(ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ASCII) ΠΈΠ»ΠΈ 16(ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Unicode). Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ASCII. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм строку s1 = Β«SUSIE SAYS IT IS EASY\nΒ». ВсСго Π² строкС 22 символа, СстСствСнно, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ символ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку β€” ‘\n’. Π€Π°ΠΉΠ», содСрТащий Π΄Π°Π½Π½ΡƒΡŽ строку Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΡΠΈΡ‚ΡŒ 22*8 = 176 Π±ΠΈΡ‚. Π‘Ρ€Π°Π·Ρƒ ΠΆΠ΅ встаСт вопрос: Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС 8 Π±ΠΈΡ‚ для ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ 1 символа? ΠœΡ‹ вСдь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ всС символы ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ASCII. Π”Π°ΠΆΠ΅ Ссли Π±Ρ‹ ΠΈ использовали, Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π΅ΠΉ Π±Ρ‹Π»ΠΎ Π±Ρ‹ самой частой Π±ΡƒΠΊΠ²Π΅ β€” S β€” Π΄Π°Ρ‚ΡŒ самый ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° для самой Ρ€Π΅Π΄ΠΊΠΎΠΉ Π±ΡƒΠΊΠ²Π΅ β€” T (ΠΈΠ»ΠΈ U, ΠΈΠ»ΠΈ ‘\n’) β€” Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Π΅Π΅. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ минимального вСса. Π’ΠΏΠΎΠ»Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… символов Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ β€” Π½Π° этом ΠΈ основан Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ символу ‘S’ Π½Π΅ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 1 Π±ΠΈΡ‚: 0 ΠΈΠ»ΠΈ 1. ΠŸΡƒΡΡ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ 1. Π’ΠΎΠ³Π΄Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ символу β€” ‘ ‘(ΠΏΡ€ΠΎΠ±Π΅Π») β€” Π΄Π°Π΄ΠΈΠΌ 0. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своС сообщСниС β€” Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку s1 β€” ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ начинаСтся с 1. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ: это символ S, ΠΈΠ»ΠΈ ΠΆΠ΅ это ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ символ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ A? ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

Ни ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСфиксом Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ созданиС ΠΊΠΎΠ΄Π° начинаСтся с частотной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π° частота (количСство Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа:

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ с наибольшим количСством Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ наимСньшим Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ количСством Π±ΠΈΡ‚ΠΎΠ². ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΊΠΎΠ΄ΠΎΠ²:

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Код ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа я Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ» ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ. По-настоящСму Π² сТатом Ρ„Π°ΠΉΠ»Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚!
Π’Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ вопрос: ΠΊΠ°ΠΊ этот салага ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΊΠΎΠ΄ΠΎΠ²? Об этом ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π½ΠΈΠΆΠ΅.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π—Π΄Π΅ΡΡŒ приходят Π½Π° Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΡƒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ поиска. НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, здСсь ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска, вставки ΠΈ удалСния Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ. Π’ΠΎΡ‚ структура Π΄Π΅Ρ€Π΅Π²Π° Π½Π° java:

Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅.

Π’ΠΎΡ‚ сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ построСния Π΄Π΅Ρ€Π΅Π²Π°:

ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Π—Π΄Π΅ΡΡŒ символ Β«lfΒ»(linefeed) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку, Β«spΒ» (space) β€” это ΠΏΡ€ΠΎΠ±Π΅Π».

А Ρ‡Ρ‚ΠΎ дальшС?

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Ну ΠΎΠΊΠ΅ΠΉ. И Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ? Π•Π³ΠΎ ΠΈ Π·Π° бСсплатно Π½Π΅ Π²ΠΎΠ·ΡŒΠΌΡƒΡ‚ А Π΄Π°Π»Π΅Π΅, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ корня Π΄ΠΎ листов Π΄Π΅Ρ€Π΅Π²Π°. Условимся ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ 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 с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ сТатия:

ИмСя эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΎΡ‡Π΅Π½ΡŒ просто Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Вспомним, ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ ΠΌΡ‹ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈΡΡŒ, ΠΏΡ€ΠΈ создании ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ:

Ни ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π»ΡΡ‚ΡŒΡΡ прСфиксом Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ

Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚-Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΈ ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ. ΠœΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΈΡ‚ Π·Π° Π±ΠΈΡ‚ΠΎΠΌ ΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ получСнная строка d, состоящая ΠΈΠ· ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½Π½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ², совпадаСт с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ символу character, ΠΌΡ‹ сразу Π·Π½Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ символ character (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½!). Π”Π°Π»Π΅Π΅ записываСм character Π² Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΡƒΡŽ строку(строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС), обнуляСм строку d, ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ дальшС Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

РСализация

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΡƒΠ½ΠΈΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€. НазовСм Π΅Π³ΠΎ Compressor.

НачнСм с Π½Π°Ρ‡Π°Π»Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ пишСм класс Node:

Класс, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°:

Класс, содСрТащий ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚:

Класс, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ запись Π² Ρ„Π°ΠΉΠ»:

Класс, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°:

Ну, ΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΉ класс:

Π€Π°ΠΉΠ» с инструкциями readme.txt прСдстоит Π²Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ самим πŸ™‚

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

НавСрноС, это всС Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π» ΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΌΠΎΠ΅ΠΉ нСкомпСтСнтности ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅, Π²ΠΎΠΎΠ±Ρ‰Π΅ любой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ смСло ΠΏΠΈΡˆΠΈΡ‚Π΅. Если я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСдообъяснил, Ρ‚ΠΎΠΆΠ΅ ΠΏΠΈΡˆΠΈΡ‚Π΅. Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ вас Π² коммСнтариях!

Π”Π°-Π΄Π°, я всС Π΅Ρ‰Π΅ здСсь, вСдь я Π½Π΅ Π·Π°Π±Ρ‹Π» ΠΏΡ€ΠΎ коэффициСнт. Для строки s1 кодировочная Ρ‚Π°Π±Π»ΠΈΡ†Π° вСсит 48 Π±Π°ΠΉΡ‚ β€” Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС исходного Ρ„Π°ΠΉΠ»Π°, Π΄Π° ΠΈ ΠΏΡ€ΠΎ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π½ΡƒΠ»ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Π»ΠΈ(количСство Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π½ΡƒΠ»Π΅ΠΉ Ρ€Π°Π²Π½ΠΎ 7)=> коэффициСнт сТатия Π±ΡƒΠ΄Π΅Ρ‚ мСньшС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹: 176/(65 + 48*8 + 7)=0.38. Если Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ это Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΏΠΎ Π»ΠΈΡ†Ρƒ Π²Ρ‹ ΠΌΠΎΠ»ΠΎΠ΄Π΅Ρ†. Π”Π°, эта рСализация Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивной для ΠΌΠ°Π»Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Но Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит с большими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ? Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ΠΎΡ‚ здСсь-Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ-Π½Π°Π΄ΠΎ! НапримСр, для ΠΌΠΎΠ½ΠΎΠ»ΠΎΠ³Π° Ѐауста Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ (Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ) коэффициСнт, Ρ€Π°Π²Π½Ρ‹ΠΉ 1.46 β€” ΠΏΠΎΡ‡Ρ‚ΠΈ Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π°! И Π΄Π°, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° английском языкС.

Выпустил upgrade: Π΄ΠΎΠ±Π°Π²ΠΈΠ» GUI + ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ исходного тСкста Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠšΠΎΡ€ΠΎΡ‡Π΅, кидаю ссылку Π½Π° git для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…: сами всё ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅.

Благодарности

Как ΠΈ Π°Π²Ρ‚ΠΎΡ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, я созидал эту ΡΡ‚Π°Ρ‚ΡŒΡŽ Π½Π΅ Π±Π΅Π· ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… людСй. Π˜ΠΌΡ…ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ людСй сдСлало Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΊΡ€ΡƒΡ‚ΠΎΠ΅ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ.

ΠžΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ спасибо Π˜ΡΠ°Π΅Π²Ρƒ Π’ΠΈΡ‚Π°Π»ΠΈΡŽ ВячСславовичу Π·Π° Π½Π΅Π±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.
Π’Π°ΠΊΠΆΠ΅, Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° этой ΡΡ‚Π°Ρ‚ΡŒΠΈ взята ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ Π ΠΎΠ±Π΅Ρ€Ρ‚Π° Π›Π°Ρ„ΠΎΡ€Π΅ Β«Data Structures and Algorithms in JavaΒ». Если ΡΠΎΠΌΠ½Π΅Π²Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊΠ°ΠΊ ΠΈΠ»ΠΈ ΠΎΠΊΡƒΠ΄Π° Π½Π°Ρ‡Π°Ρ‚ΡŒ свой ΠΏΡƒΡ‚ΡŒ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… β€” Π±Π΅Ρ€ΠΈΡ‚Π΅, Π½Π΅ ΠΏΡ€ΠΎΠ³Π°Π΄Π°Π΅Ρ‚Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *