ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ИдСя, лСТащая Π² основС ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, достаточно проста. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС символы ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ числом Π±ΠΈΡ‚ (ΠΊΠ°ΠΊ это сдСлано, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ASCII ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅, Π³Π΄Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ отводится Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎ 8 Π±ΠΈΡ‚), Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅, мСньшим числом Π±ΠΈΡ‚, Ρ‡Π΅ΠΌ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ€Π΅ΠΆΠ΅. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π΅Π½.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‚Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Дэвид Π₯Π°Ρ„Ρ„ΠΌΠ°Π½ (David Huffman) [1] Π² 1952 Π³ΠΎΠ΄Ρƒ. Алгоритм Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Π΄Π²ΡƒΡ…ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹ΠΉ. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ строится частотный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ΄Ρ‹. На Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ происходит нСпосрСдствСнно ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

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

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

(1)ci Π½Π΅ являСтся прСфиксом для cj, ΠΏΡ€ΠΈ i!=j
(2)ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. 127979. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-127979. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 127979. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.минимальна (|ci| Π΄Π»ΠΈΠ½Π° ΠΊΠΎΠ΄Π° ci)

называСтся минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ прСфиксным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠΎΠ΄ΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

ЗамСчания:

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌΡƒ прСфиксному ΠΊΠΎΠ΄Ρƒ соотвСтствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 2: Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΊΠΎΠ΄Ρƒ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

Π—Π°Π΄Π°Ρ‡Π° построСния ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Π° Π·Π°Π΄Π°Ρ‡Π΅ построСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ Π΄Π΅Ρ€Π΅Π²Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ схСму построСния Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°:

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: построим Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° для сообщСния S=»A H F B H C E H E H C E A H D C E E H H H C H H H D E G H G G E H C H H».

Для Π½Π°Ρ‡Π°Π»Π° Π²Π²Π΅Π΄Π΅ΠΌ нСсколько ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Π’ спискС, ΠΊΠ°ΠΊ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ, остался всСго ΠΎΠ΄ΠΈΠ½ ΡƒΠ·Π΅Π». Π”Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° построСно. Π’Π΅ΠΏΠ΅Ρ€ΡŒ запишСм Π΅Π³ΠΎ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΌ для нас Π²ΠΈΠ΄Π΅.

ЛистовыС ΡƒΠ·Π»Ρ‹ Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ символам ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. Π“Π»ΡƒΠ±ΠΈΠ½Π° листовых ΡƒΠ·Π»ΠΎΠ² Ρ€Π°Π²Π½Π° Π΄Π»ΠΈΠ½Π΅ ΠΊΠΎΠ΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… символов.

A=0010binC=000binE=011binG=0101bin
B=01001binD=0011binF=01000binH=1bin

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС S. Достаточно просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π΅ΠΌΡƒ ΠΊΠΎΠ΄ΠΎΠΌ:

S / =»0010 1 01000 01001 1 000 011 1 011 1 000 011 0010 1 0011 000 011 011 1 1 1 000 1 1 1 0011 011 0101 1 0101 0101 011 1 000 1 1″.

ΠžΡ†Π΅Π½ΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия. Π’ исходном сообщСнии S Π±Ρ‹Π»ΠΎ 36 символов, Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎ [log2|A|]=3 Π±ΠΈΡ‚Π° (здСсь ΠΈ Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки [] ΠΊΠ°ΠΊ Ρ†Π΅Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½ΡƒΡŽ Π² ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ сторону, Ρ‚.Π΅. [3,018]=4). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ S Ρ€Π°Π²Π΅Π½ 36*3=108 Π±ΠΈΡ‚

Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΆΠ°Ρ‚ΡŒ 108 Π² 89 Π±ΠΈΡ‚.

Ясно, Ρ‡Ρ‚ΠΎ слСдуя этому Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΌΡ‹ Π² точности ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ исходноС сообщСниС S.

ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

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

Π”Π°Π»Π΅Π΅, для краткости, Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ каноничСский ΠΊΠΎΠ΄ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° просто каноничСским ΠΊΠΎΠ΄ΠΎΠΌ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 4: Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ каноничСскому ΠΊΠΎΠ΄Ρƒ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ каноничСским Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ каноничСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° для сообщСния S, ΠΈ сравним Π΅Π³ΠΎ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

Π’Ρ‹ΠΏΠΈΡˆΠ΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ каноничСскиС ΠΊΠΎΠ΄Ρ‹ для всСх символов нашСго Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΈ дСсятичной Ρ„ΠΎΡ€ΠΌΠ΅. ΠŸΡ€ΠΈ этом сгруппируСм символы ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ ΠΊΠΎΠ΄Π°.

B=00000bin=0decA=0001bin=1decC=010bin=2decH=1bin=1dec
F=00001bin=1decD=0010bin=2decE=011bin=3dec
G=0011bin=3dec

УбСдимся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ свойства (1) ΠΈ (2) ΠΈΠ· опрСдСлСния 3 Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ:

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ€ΠΈ символа: A, D, G. ВсС ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. ЛСксикографичСски A ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ (ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄Π° 3). Π•Π³ΠΎ порядковый Π½ΠΎΠΌΠ΅Ρ€ Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π°Π²Π΅Π½ 2 (учитывая Π΄Π²Π° нСлистовых ΡƒΠ·Π»Π° слСва), Ρ‚.Π΅. числСнно Ρ€Π°Π²Π΅Π½ ΠΊΠΎΠ΄Ρƒ символа C. Π’Π΅ΠΏΠ΅Ρ€ΡŒ запишСм этот Π½ΠΎΠΌΠ΅Ρ€ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±ΠΈΡ‚ΠΎΠΌ слСва (Ρ‚.ΠΊ. 2 прСдставляСтся двумя Π±ΠΈΡ‚Π°ΠΌΠΈ, Π° ΠΊΠΎΠ΄ символа C трСмя): 2dec=10bin=>0 10bin. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π² точности ΠΊΠΎΠ΄ символа C.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Ρƒ: каноничСскиС ΠΊΠΎΠ΄Ρ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ своими Π΄Π»ΠΈΠ½Π°ΠΌΠΈ. Π­Ρ‚ΠΎ свойство каноничСских ΠΊΠΎΠ΄ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ΠœΡ‹ ΠΊ Π½Π΅ΠΌΡƒ Π΅Ρ‰Π΅ вСрнСмся.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вновь Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ сообщСниС S, Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ каноничСских ΠΊΠΎΠ΄ΠΎΠ²:

Z / =»0001 1 00001 00000 1 010 011 1 011 1 010 011 0001 1 0010 010 011 011 1 1 1 010 1 1 1 0010 011 0011 1 0011 0011 011 1 010 1 1″

Π’.ΠΊ. ΠΌΡ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½ ΠΊΠΎΠ΄ΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ сообщСния Π½Π΅ измСнился: |S / |=|Z / |=89 Π±ΠΈΡ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСкодирования (CANONICAL_DECODE) [5]:

Z / =»0001 1 00001 00000 1 010 011 1 011 1 010 011 0001 1 0010 010 011 011 1 1 1 010 1 1 1 0010 011 0011 1 0011 0011 011 1 010 1 1″

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ 3 ΠΏΠ΅Ρ€Π²Ρ‹Ρ… символа: A, H, F. Ясно, Ρ‡Ρ‚ΠΎ слСдуя этому Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π² точности сообщСниС S.

Π­Ρ‚ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, самый простой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для дСкодирования каноничСских ΠΊΠΎΠ΄ΠΎΠ². К Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ массу ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² [5] ΠΈ [9].

ВычислСниС Π΄Π»ΠΈΠ½ ΠΊΠΎΠ΄ΠΎΠ²

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ символов ΠΈ ΠΈΡ… Π΄Π»ΠΈΠ½Ρ‹. Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, каноничСскиС ΠΊΠΎΠ΄Ρ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ своими Π΄Π»ΠΈΠ½Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, наша главная Π·Π°Π΄Π°Ρ‡Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² вычислСнии Π΄Π»ΠΈΠ½ ΠΊΠΎΠ΄ΠΎΠ².

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

На сСгодняшний дСнь сущСствуСт мноТСство эффСктивных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² вычислСния Π΄Π»ΠΈΠ½ ΠΊΠΎΠ΄ΠΎΠ² ([3], [4]). ΠœΡ‹ ограничимся рассмотрСниСм лишь ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ достаточно прост, Π½ΠΎ нСсмотря Π½Π° это ΠΎΡ‡Π΅Π½ΡŒ популярСн. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΊΠ°ΠΊ zip, gzip, pkzip, bzip2 ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ….

ВСрнСмся ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ построСния Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск Π΄Π²ΡƒΡ… ΡƒΠ·Π»ΠΎΠ² с наимСньшим вСсом. Ясно, Ρ‡Ρ‚ΠΎ для этой Ρ†Π΅Π»ΠΈ большС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ², такая ΠΊΠ°ΠΊ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π° (минимальная). Π£Π·Π΅Π» с наимСньшим вСсом ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

Π‘ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° сохранСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π³ΠΎ родитСля. Π£ корня Π΄Π΅Ρ€Π΅Π²Π° этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌ NULL. Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ листовой ΡƒΠ·Π΅Π» (символ) ΠΈ слСдуя сохранСнным указатСлям Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ станСт Ρ€Π°Π²Π΅Π½ NULL. ПослСднСС условиС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ корня Π΄Π΅Ρ€Π΅Π²Π°. Ясно, Ρ‡Ρ‚ΠΎ число ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² с уровня Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π°Π²Π½ΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π΅ листового ΡƒΠ·Π»Π° (символа), Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π΄Π»ΠΈΠ½Π΅ Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Обойдя Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ всС ΡƒΠ·Π»Ρ‹ (символы), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π»ΠΈΠ½Ρ‹ ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ².

Максимальная длина кода

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ называСмая кодовая ΠΊΠ½ΠΈΠ³Π° (CodeBook), простая структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎ сути Π΄Π²Π° массива: ΠΎΠ΄ΠΈΠ½ с Π΄Π»ΠΈΠ½Π°ΠΌΠΈ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ с ΠΊΠΎΠ΄Π°ΠΌΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠ΄ (ΠΊΠ°ΠΊ битовая строка) хранится Π² ячСйкС памяти ΠΈΠ»ΠΈ рСгистрС фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Ρ‡Π°Ρ‰Π΅ 16, 32 ΠΈΠ»ΠΈ 64). Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ помСстится Π² рСгистр.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π° N-символьном Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ (N-1) Π±ΠΈΡ‚ Π² Π΄Π»ΠΈΠ½Ρƒ. Π˜Π½Π°Ρ‡Π΅ говоря, ΠΏΡ€ΠΈ N=256 (распространСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚) ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² 255 Π±ΠΈΡ‚ Π΄Π»ΠΈΠ½ΠΎΠΉ (ΠΏΡ€Π°Π²Π΄Π° для этого Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π΅Π»ΠΈΠΊ: 2.292654130570773*10^53

=2^177.259)! Ясно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π² рСгистр Π½Π΅ помСстится ΠΈ с Π½ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Для Π½Π°Ρ‡Π°Π»Π° выясним ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… условиях Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΡƒΡΡ‚ΡŒ частота i-Π³ΠΎ символа Ρ€Π°Π²Π½Π° i-ΠΌΡƒ числу Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. НапримСр: A-1, B-1, C-2, D-3, E-5, F-8, G-13, H-21. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

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

Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ двумя ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌΠΈ способами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… опираСтся Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈΠ· свойств каноничСских ΠΊΠΎΠ΄ΠΎΠ². Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² каноничСском ΠΊΠΎΠ΄Π΅ (Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ строкС) Π½Π΅ Π±ΠΎΠ»Π΅Π΅ [log2N] ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π±ΠΈΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСнулями. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ всСгда Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ. Π’ случаС N=256 Π½Π°ΠΌ достаточно ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ лишь младшиС 8 Π±ΠΈΡ‚ΠΎΠ², подразумСвая всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Π½ΡƒΠ»ΡŽ. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ лишь отчасти. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ услоТнит ΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ этот способ Ρ€Π΅Π΄ΠΊΠΎ примСняСтся Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² искусствСнном ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ Π΄Π»ΠΈΠ½ ΠΊΠΎΠ΄ΠΎΠ² (Π»ΠΈΠ±ΠΎ Π²ΠΎ врСмя построСния, Π»ΠΈΠ±ΠΎ послС). Π­Ρ‚ΠΎΡ‚ способ являСтся общСпринятым, поэтому ΠΌΡ‹ остановимся Π½Π° Π½Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠΎΠ΄ΠΎΠ². ЭвристичСскиС (ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅) ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅. Алгоритмы Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° достаточно слоТны Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ памяти, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹Π΅. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ эвристичСски-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° опрСдСляСтся Π΅Π³ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ. Π§Π΅ΠΌ мСньшС эта Ρ€Π°Π·Π½ΠΈΡ†Π°, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… эвристичСских Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² эта Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»Π° ([6], [7], [8]), ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ часто Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ (хотя ΠΈ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ всСгда). Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚.ΠΊ. Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ случаСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ поставлСно ΠΎΡ‡Π΅Π½ΡŒ ТСсткоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄Π°), ΠΏΡ€ΠΈ нСбольшом Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° цСлСсообразнСС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ простыС ΠΈ быстрыС эвристичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠœΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ достаточно простой ΠΈ ΠΎΡ‡Π΅Π½ΡŒ популярный эвристичСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Он нашСл своС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΊΠ°ΠΊ zip, gzip, pkzip, bzip2 ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ….

НачнСм Ρ€Π°Π±ΠΎΡ‚Ρƒ с уровня L. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠΌ ΡƒΠ·Π΅Π» RNL Π½Π° мСсто своСго родитСля. Π’.ΠΊ. ΡƒΠ·Π»Ρ‹ ΠΈΠ΄ΡƒΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ мСсто ΠΈ для сосСдного с RNL ΡƒΠ·Π»Π°. Для этого Π½Π°ΠΉΠ΄Π΅ΠΌ блиТайший ΠΊ L ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ j, содСрТащий листовыС ΡƒΠ·Π»Ρ‹, Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ j &lt (L-1). На мСстС LNj сформируСм нСлистовой ΡƒΠ·Π΅Π» ΠΈ присоСдиним ΠΊ Π½Π΅ΠΌΡƒ Π² качСствС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΡƒΠ·Π΅Π» LNj ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ Π±Π΅Π· ΠΏΠ°Ρ€Ρ‹ ΡƒΠ·Π΅Π» с уровня L. Ко всСм ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΡΡ ΠΏΠ°Ρ€Π°ΠΌ ΡƒΠ·Π»ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ L ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Ясно, Ρ‡Ρ‚ΠΎ пСрСраспрСдСлив Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ·Π»Ρ‹, ΠΌΡ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΈ высоту нашСго Π΄Π΅Ρ€Π΅Π²Π° Π½Π° 1. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° Ρ€Π°Π²Π½Π° (L-1). Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ L / &lt (L-1), Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π΅ΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ (L-1) ΠΈ Ρ‚.Π΄. Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнуто.

ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π³Π΄Π΅ L=5. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄Π° Π΄ΠΎ L / =4.

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² нашСм случаС RNL=F, j=3, LNj=C. Π‘Π½Π°Ρ‡Π°Π»Π° пСрСмСстим ΡƒΠ·Π΅Π» RNL=F Π½Π° мСсто своСго родитСля.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° мСстС LNj=C сформируСм нСлистовой ΡƒΠ·Π΅Π».

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠΌ ΠΊ сформированному ΡƒΠ·Π»Ρƒ Π΄Π²Π° Π½Π΅ΠΏΠ°Ρ€Π½Ρ‹Ρ…: B ΠΈ C.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄Π° Π΄ΠΎ 4. Ясно, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠΎΠ΄ΠΎΠ², ΠΌΡ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ потСряли Π² эффСктивности. Π’Π°ΠΊ сообщСниС S, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ 92 Π±ΠΈΡ‚Π°, Ρ‚.Π΅. Π½Π° 3 Π±ΠΈΡ‚Π° большС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

Ясно, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ сильнСС ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄Π°, Ρ‚Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ эффСктивСн Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ΄. Выясним насколько ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄Π°. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΊΠΎΡ€ΠΎΡ‡Π΅ [log2N] Π±ΠΈΡ‚.

ВычислСниС каноничСских ΠΊΠΎΠ΄ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ присвоим ΠΊΠΎΠ΄Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ символам. Код ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ i Ρ€Π°Π²Π΅Π½ Si, Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Si + 1, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Si + 2 ΠΈ Ρ‚.Π΄.

Π’Ρ‹ΠΏΠΈΡˆΠ΅ΠΌ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΊΠΎΠ΄Ρ‹ для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

B = S5 = 00000binA = S4 = 0001binC = S3 = 010binH = S1 = 1bin
F = S5 + 1 = 00001binD = S4 + 1 = 0010binE = S3 + 1 = 011bin
G = S4 + 2 = 0011bin

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΊΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ явно построили каноничСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ (Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅), ΠΊΠ°ΠΊΠΎΠ΅ использовалось ΠΏΡ€ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вмСстС с Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. Ясно, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅Π΅ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅.

МоТно ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ список частот символов (Ρ‚.Π΅. частотный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ). Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° смоТСт Ρ€Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. Π₯отя этот способ ΠΈ ΠΌΠ΅Π½Π΅Π΅ расточитСлСн Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, ΠΎΠ½ Π½Π΅ являСтся Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ нСсколько Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ RLE Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π΄Π»ΠΈΠ½, Π½ΠΎ ΠΈ ΠΊΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π’Π°ΠΊΠΎΠΉ способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° являСтся общСпринятым ΠΈ примСняСтся Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ.

РСализация: SHCODEC

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: биография Π”. Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

[1] D.A. Huffman, «A method for the construction of minimum-redundancy codes», Proc. Inst. Radio Engineers, vol. 40, no. 9, pp. 1098-1101, Sep. 1952. [Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ]

[2] E.S. Schwartz, B. Kallick, «Generating a canonical prefix encoding», Communications of the ACM, vol. 7, no. 3, pp. 166-169, Mar. 1964.

[3] J.V. Leeuwen, «On the construction of Huffman trees», Proc. 3rd International Colloquium on Automata, Languages, and Programming, Edinburgh University, pp. 382-410 July 1976.

[4] J. Katajainen, A. Moffat, «In-place calculation of minimum-redundancy codes», Proc. Workshop on Algorithms and Data Structures, pp. 393-402, Aug. 1995. [Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ]

[5] A. Moffat, A. Turpin, «On the implementation of minimum-redundancy prefix codes», IEEE Transactions on Communications, vol. 45, no. 10, pp. 1200-1207, June 1997. [Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ]

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

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

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

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

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

ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ хранится Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· 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 Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΡƒΠ·Π»ΠΎΠ². РСкомСндуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ построСнии Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°Π»ΠΈΡΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ символы для получСния ΠΊΠΎΠ΄ΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

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

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

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

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
Π”Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

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

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

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

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

Алгоритм Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ…

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΏΠΎΠ΄ символом Π°Π²Ρ‚ΠΎΡ€ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉΡΡ элСмСнт исходной строки β€” это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹ΠΉ Π·Π½Π°ΠΊ (character), Ρ‚Π°ΠΊ ΠΈ любая битовая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Под ΠΊΠΎΠ΄ΠΎΠΌ подразумСваСтся Π½Π΅ ASCII ΠΈΠ»ΠΈ UTF-8 ΠΊΠΎΠ΄ символа, Π° ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ².

К ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½ исходный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наглядно дСмонстрируСт, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° β€” ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ процСсса. Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ (я надСюсь) я Π½Π°ΠΏΠΈΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ для ΠΈΡ… сТатия (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, сдСлаСм простой Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° WinRAR ΠΈΠ»ΠΈ WinZIP).

ИдСя, полоТСнная Π² основу ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, основана Π½Π° частотС появлСния символа Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ΠΈΠΌΠ²ΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ встрСчаСтся Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‡Π°Ρ‰Π΅ всСго, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ малСнький ΠΊΠΎΠ΄, Π° символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ встрСчаСтся Ρ€Π΅ΠΆΠ΅ всСго, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ вСсь Π²Π²ΠΎΠ΄, самыС частотныС символы заняли мСньшС всСго мСста (ΠΈ мСньшС, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅), Π° самыС Ρ€Π΅Π΄ΠΊΠΈΠ΅ β€” побольшС (Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π΅Π΄ΠΊΠΈΠ΅, это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния). Для нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ я Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ символ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ 8 Π±ΠΈΡ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΎΠΌΡƒ Π·Π½Π°ΠΊΡƒ.

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ с Ρ‚ΠΎΠΉ ΠΆΠ΅ простотой Π²Π·ΡΡ‚ΡŒ символ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 16 Π±ΠΈΡ‚ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ²), Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ 10 Π±ΠΈΡ‚, 20 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π Π°Π·ΠΌΠ΅Ρ€ символа выбираСтся, исходя ΠΈΠ· строки Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ. НапримСр, Ссли Π±Ρ‹ я собрался ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сырыС Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ»Ρ‹, я Π±Ρ‹ приравнял Ρ€Π°Π·ΠΌΠ΅Ρ€ символа ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ пиксСля. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° символа мСняСтся ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚Π΅ΠΌ большС символов ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ΄Π°. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅ΠΊ, подходящих для восьми Π±ΠΈΡ‚, мСньшС, Ρ‡Π΅ΠΌ для ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ символа, исходя ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ Π² вашСй ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Для этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Π°ΠΌ потрСбуСтся минимальноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ устройства Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ. Π’ исходном ΠΊΠΎΠ΄Π΅ я использовал ΠΊΠΎΠ΄ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ ΠΈΠ· ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ строка Β«beep boop beer!Β», для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π² Π΅Ρ‘ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π·Π½Π°ΠΊ тратится ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вся строка Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 15*8 = 120 Π±ΠΈΡ‚ памяти. ПослС кодирования строка Π·Π°ΠΉΠΌΡ‘Ρ‚ 40 Π±ΠΈΡ‚ (Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½Π° консоль ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· 40 Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… собой Π±ΠΈΡ‚Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… Π½Π°ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ строку Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 40 Π±ΠΈΡ‚, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΡƒ, поэтому ΠΌΡ‹ сСгодня Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ этого Π΄Π΅Π»Π°Ρ‚ΡŒ).

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ для Π½Π°Ρ‡Π°Π»Π° сдСлаСм всё Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘Ρ‚Ρ€ΠΎΠΊΠ° Β«beep boop beer!Β» для этого ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π½Π° основС Π΅Π³ΠΎ частотности, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ лист этого Π΄Π΅Ρ€Π΅Π²Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ символ (ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹ΠΉ Π·Π½Π°ΠΊ ΠΈΠ· строки). Π”Π΅Ρ€Π΅Π²ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΠΈΡΡ‚ΡŒΠ΅Π² ΠΊ ΠΊΠΎΡ€Π½ΡŽ, Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ символы с мСньшСй частотой Π±ΡƒΠ΄ΡƒΡ‚ дальшС ΠΎΡ‚ корня, Ρ‡Π΅ΠΌ символы с большСй. Π‘ΠΊΠΎΡ€ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, для Ρ‡Π΅Π³ΠΎ это Π½ΡƒΠΆΠ½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ слСгка ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ΠΈΠ· Π½Π΅Ρ‘ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ элСмСнты с наимСньшим ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Π° Π½Π΅ наибольшим. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‚ Π»ΠΈΡΡ‚ΡŒΠ΅Π² ΠΊ ΠΊΠΎΡ€Π½ΡŽ.

Для Π½Π°Ρ‡Π°Π»Π° посчитаСм частоты всСх символов:

ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. 127978. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-127978. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 127978. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
БимволЧастота
‘b’3
‘e’4
‘p’2
‘ ‘2
‘o’2
‘r’1
‘!’1

ПослС вычислСния частот ΠΌΡ‹ создадим ΡƒΠ·Π»Ρ‹ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ частоту Π² качСствС ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°:
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ достаём Π΄Π²Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнта ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ связываСм ΠΈΡ…, создавая Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» Π΄Π΅Ρ€Π΅Π²Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠ±Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ, Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ суммС ΠΈΡ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ². ПослС этого ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚Π΅ ΠΆΠ΅ шаги ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ:
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Ну ΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ свяТСм Π΄Π²Π° послСдних элСмСнта, получится ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ:
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа, Π½Π°Π΄ΠΎ просто ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ, ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ 0, Ссли ΠΌΡ‹ ΠΈΠ΄Ρ‘ΠΌ Π²Π»Π΅Π²ΠΎ, ΠΈ 1 β€” Ссли Π½Π°ΠΏΡ€Π°Π²ΠΎ:
ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. image loader. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ Ρ…Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΠΊΠΎΠ΄Π΅ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (Huffman code) ΠΈΠ»ΠΈ минимально-ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΌ прСфиксном ΠΊΠΎΠ΄Π΅ (minimum-redundancy prefix code). ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с основных ΠΈΠ΄Π΅ΠΉ ΠΊΠΎΠ΄Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, исслСдуСм ряд Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°, построСнных Π½Π° идСях, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Если ΠΌΡ‹ Ρ‚Π°ΠΊ сдСлаСм, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹ для символов:

БимволКод
‘b’00
‘e’11
‘p’101
‘ ‘011
‘o’010
‘r’1000
‘!’1001

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку, Π½Π°ΠΌ Π½Π°Π΄ΠΎ, соотвСтствСнно, просто ΠΈΠ΄Ρ‚ΠΈ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ, сворачивая Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±ΠΈΡ‚Ρƒ сторону Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ достигнСм листа. НапримСр, Ссли Π΅ΡΡ‚ΡŒ строка Β«101 11 101 11Β» ΠΈ нашС Π΄Π΅Ρ€Π΅Π²ΠΎ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ строку Β«pepeΒ».

Π’Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ являСтся прСфиксом для ΠΊΠΎΠ΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ символа. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли 00 β€” это ΠΊΠΎΠ΄ для ‘b’, Ρ‚ΠΎ 000 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‡ΡŒΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚. ΠœΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ достигли Π±Ρ‹ этого символа Π² Π΄Π΅Ρ€Π΅Π²Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΠΈΡΡŒ Π±Ρ‹ Π΅Ρ‰Ρ‘ Π½Π° ‘b’.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сразу послС построСния Π΄Π΅Ρ€Π΅Π²Π° строится Ρ‚Π°Π±Π»ΠΈΡ†Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Данная Ρ‚Π°Π±Π»ΠΈΡ†Π° β€” это ΠΏΠΎ сути связный список ΠΈΠ»ΠΈ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ эффСктивным. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΈΡΠΊΠ°Ρ‚ΡŒ символ ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Π³Π΄Π΅ ΠΎΠ½ находится, ΠΈ придётся ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ всё Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для кодирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°, Π° для дСкодирования β€” Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

Входная строка: Β«beep boop beer!Β»
Входная строка Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅: Β«0110 0010 0110 0101 0110 0101 0111 0000 0010 0000 0110 0010 0110 1111 0110 1111 0111 0000 0010 0000 0110 0010 0110 0101 0110 0101 0111 0010 0010 000Β»
Закодированная строка: Β«0011 1110 1011 0001 0010 1010 1100 1111 1000 1001Β»
Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, ΠΌΠ΅ΠΆΠ΄Ρƒ ASCII-вСрсиСй строки ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсиСй сущСствуСт большая Ρ€Π°Π·Π½ΠΈΡ†Π°.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ описан Π²Ρ‹ΡˆΠ΅. Π’ ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ большС Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

ВсС исходники Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ с использованиСм стандарта C99. Π£Π΄Π°Ρ‡Π½ΠΎΠ³ΠΎ программирования!

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: данная ΡΡ‚Π°Ρ‚ΡŒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ созданноС Π²Π°ΠΌΠΈ Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° Π² Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ способом ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, являСтся ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ Π² любом порядкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ нравится (я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΎΠ±Ρ…ΠΎΠ΄ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ) ΠΈ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 0 для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈ 1 для листа с Π±ΠΈΡ‚Π°ΠΌΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ символ (Π² нашСм случаС, 8 Π±ΠΈΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ASCII-ΠΊΠΎΠ΄ Π·Π½Π°ΠΊΠ°). Π˜Π΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ это прСдставлСниС Π² самоС Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ построит Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π».

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

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

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