ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ упорядочСниС Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π°

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ позволяСт ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ динамичСскоС хаффмСнскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΠΌΠ°Ρ€Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ внСшнСго ΠΏΡƒΡ‚ΠΈ ΠΈ Ρ€Π°ΡΡΡ‚ояниС ΠΎΡ‚ ΠΊΠΎΡ€Π½Ρ Π΄Π΅Ρ€Π΅Π²Π° Π΄ΠΎ Π»ΠΈΡΡ‚Π°. Число ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΡƒΠ·Π»ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сводится ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ высоты Π΄Π΅Ρ€Π΅Π²Π° h= max{ lj} ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ символа Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ. По Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ упорядочСниС Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π° (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΠ°ΡƒΠΊΠΈ Π£ΠΊΡ€Π°ΠΈΠ½Ρ‹ ΠŸΠžΠ―Π‘ΠΠ˜Π’Π•Π›Π¬ΠΠΠ― Π—ΠΠŸΠ˜Π‘ΠšΠ ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Π½Π° Ρ‚Π΅ΠΌΡƒ:

«ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π°»

ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. «

Аннотация

ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка содСрТит описаниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΏΠΎ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ. Π’Π°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΉ приводится описаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² компрСссии ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Аннотация 2

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

4

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ 5

2. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ обозначСния 6

3. ΠžΠ±Π·ΠΎΡ€ ΠΈ Ρ…арактСристика ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, основанныС Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ кодирования Ρ…Π°Ρ„Ρ„ΠΌΠ΅Π½Π° 7

3.1. ДинамичСскоС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ…Π°Ρ„Ρ„ΠΌΠ΅Π½Π° 7

3.2. Алгоритм динамичСского кодирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ fgk 8

3.3. Алгоритм динамичСского кодирования Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π° 9

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация 13

Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ 13

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

15

БиблиографичСский список 16

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ 17

Π’ Π½Π°ΡΡ‚оящСС врСмя большоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π΅Π΄Π°Ρ€ΠΎΠΌ наш Π²Π΅ΠΊ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ». Π’ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ люди ΠΏΠΎΠ·Π½Π°ΡŽΡ‚ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ хранСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, встаСт вопрос ΠΎ Π΅Π΅ ΠΊΠΎΠΌΠΏΡ€Π΅ΡΡΠΈΠΈ.

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

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

НСобходимо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для кодирования ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Для компрСссии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ динамичСского кодирования Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π°. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс общСния с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

2. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ обозначСния

m-Ρ€Π°Π·ΠΌΠ΅Ρ€ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° источника сообщСний;

zj — j-ΠΉ символ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°;

M (k) =z (1), z (2), …, z (k) — ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ;

k — число символов Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

K-количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… символов, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ;

Wj-вСс символов zj, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния.

lj — расстояниС ΠΎΡ‚ ΠΊΠΎΡ€Π½Ρ Π΄Π΅Ρ€Π΅Π²Π° Π΄ΠΎ zj — Π³ΠΎ Π»ΠΈΡΡ‚Π°.

3. ΠžΠ±Π·ΠΎΡ€ ΠΈ Ρ…арактСристика ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, основанныС Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ кодирования Ρ…Π°Ρ„Ρ„ΠΌΠ΅Π½Π°

Алгоритм динамичСского кодирования Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π° прСдставляСт собой ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅ динамичСского кодирования Π₯Π°Ρ„Ρ„ΠΌΠ΅Π½Π°.

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

3.1. ДинамичСскоС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ…Π°Ρ„Ρ„ΠΌΠ΅Π½Π°

Π’ Π½Π°Ρ‡Π°Π»Π΅ 70-Ρ… Π³ΠΎΠ΄ΠΎΠ² Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сТатия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π‘ΡƒΡ‚ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚Ρ‡ΠΈΠΊ строит Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ΅Π½Π° Π² Ρ‚Π΅ΠΌΠΏΠ΅ поступлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ°. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ кодирования происходит «ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅» ΠΊΠΎΠ΄Π΅Ρ€Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ статистичСских характСристик источника сообщСний Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΎΡ†Π΅Π½ΠΊΠΈ исходных вСроятностСй сообщСния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся модификация ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Π₯Π°Ρ„Ρ„ΠΌΠ΅Π½Π°. Π’. ΠΊ. происходит Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π°, этот процСсс ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ динамичСского кодирования Π₯Π°Ρ„Ρ„ΠΌΠ΅Π½Π°. Π”Π΅ΠΊΠΎΠ΄Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ «ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ» наряду с ΠΊΠΎΠ΄Π΅Ρ€ΠΎΠΌ осущСствляя синхронноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π°. Для обСспСчСния синхронности процСссов кодирования ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π΅Ρ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ символ Π² Π½Π΅ΡΠΆΠ°Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Ссли ΠΎΠ½ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появился Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ источника, ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅. ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ появлСнии символа Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ся Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ, опрСдСляСмой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ символа Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅.

На ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС 2-Ρ… ΡƒΠ·Π»ΠΎΠ², ΠΏΠ°Ρ€Π° ΡƒΠ·Π»ΠΎΠ² являСтся Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ, Ρ‚.ΠΊ. ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π», вСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π΅Π½ суммС вСсов Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΡƒΠ·Π»ΠΎΠ².

Π₯аффмСнскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ свойствами:

Π›ΠΈΡΡ‚ΡŒΡ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ вСс W>0, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹, Π° Π΅Π³ΠΎ вСс Ρ€Π°Π²Π΅Π½ суммС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… вСсов.

На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄Π΅Ρ€Π΅Π²Π°, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ ΡƒΠ·Π»ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π».

ВсС ΡƒΠ·Π»Ρ‹ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ Π² Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС, ΡƒΠ·Π»Ρ‹ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ (2j-1) ΠΈ 2j ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ·Π»Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ уровня для 1<=j<=m-1, ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

3.2. Алгоритм динамичСского кодирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ fgk

Π‘ΡƒΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ вычислСния Π»ΠΈΡΡ‚ΡŒΠ΅Π² ΠΈ ΠΏΠΎΡΡ‚роСния Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ вСсом ΠΏΡƒΡ‚ΠΈ Wjlj.

На 1-ΠΌ этапС Π΄Π΅Ρ€Π΅Π²ΠΎ Π₯Π°Ρ„Ρ„ΠΌΠ΅Π½Π° прСобразуСтся Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΠ΅ исходному, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² Ρ…аффмСновскоС Π΄Π΅Ρ€Π΅Π²ΠΎ для M (k+1).

1-ΠΉ этап начинаСтся послС получСния ΠΎΡ‚ ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ° символа z (k+1), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ статус Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π°. Π—Π°Ρ‚Π΅ΠΌ происходит ΠΎΠ±ΠΌΠ΅Π½ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° (Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎ) с ΡƒΠ·Π»ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ наибольший порядковый Π½ΠΎΠΌΠ΅Ρ€ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ вСсом. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° иницилизируСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π» послСднСго Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π°. ОбмСн Π² ΡΠ»ΡƒΡ‡Π°Π΅ нСобходимости ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ повторяСтся ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΡ€Π΅Π½ΡŒ Π΄Π΅Ρ€Π΅Π²Π°. МаксимальноС количСство пСрСстановок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π²Π½Π° высотС Π΄Π΅Ρ€Π΅Π²Π°. На 2-ΠΌ этапС инкрСмСнтируСтся лист Π΄Π΅Ρ€Π΅Π²Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ символу ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹, располоТСнныС Π½Π° ΠΏΡƒΡ‚ΠΈ двиТСния ΠΎΡ‚ Π»ΠΈΡΡ‚Π° ΠΊ ΠΊΠΎΡ€Π½ΡŽ Π΄Π΅Ρ€Π΅Π²Π°.

3.3. Алгоритм динамичСского кодирования Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π°

Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ позволяСт ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ динамичСскоС хаффмСнскоС Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΠΌΠ°Ρ€Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ внСшнСго ΠΏΡƒΡ‚ΠΈ ΠΈ Ρ€Π°ΡΡΡ‚ояниС ΠΎΡ‚ ΠΊΠΎΡ€Π½Ρ Π΄Π΅Ρ€Π΅Π²Π° Π΄ΠΎ Π»ΠΈΡΡ‚Π°. Число ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΡƒΠ·Π»ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сводится ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ высоты Π΄Π΅Ρ€Π΅Π²Π° h= max{ lj} ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ символа Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ.

Алгоритм Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ прСимущСствами ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ FGK:

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΡƒΠ·Π»Π°ΠΌΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» пСрСмСщаСтся Π² Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌΡƒ Π΄Π΅Ρ€Π΅Π²Ρƒ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ограничиваСтся Π΅Π΄Π΅Π½ΠΈΡ†Π΅ΠΉ.

Алгоритм Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ внСшнСго ΠΏΡƒΡ‚ΠΈ Π΄Π΅Ρ€Π΅Π²Π° lj ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π΅Ρ€Π΅Π²ΠΎ минимальной высоты h= max{ lj} ΠΏΡ€ΠΈ условии ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ суммарной Π΄Π»ΠΈΠ½Ρ‹ внСшнСго ΠΏΡƒΡ‚ΠΈ Π΄Π΅Ρ€Π΅Π²Π°.

По Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π° осущСствляСтся Ρ‚Π°ΠΊ называСмая нСявная нумСрация (implicit numbering) ΡƒΠ·Π»ΠΎΠ² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°. ΠŸΡ€ΠΈ нСявной Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ·Π»Ρ‹ хаффмСнского Π΄Π΅Ρ€Π΅Π²Π° Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ увСлСчСния ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡΠΌ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΈ ΡΠ½ΠΈΠ·Ρƒ Π²Π²Π΅Ρ€Ρ…. Π’Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΠΌ условиСм нСявной Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ являСтся соблюдСниС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ условия построСния Π΄Π΅Ρ€Π΅Π²Π°:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ вСса W Π²ΡΠ΅ Π»ΠΈΡΡ‚ΡŒΡ Π΄Π΅Ρ€Π΅Π²Π° с Π²Π΅ΡΠΎΠΌ W Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ всСм Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΡƒΠ·Π»Π°ΠΌ вСса W.

Бтруктурная схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° динамичСского кодирования Π’ΠΈΡ‚Ρ‚Π΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° структурная схСма ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ скольТСния ΠΈ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΡ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ язык программирования высокого уровня Delphi 5.0 (Object Pascal).

Он Π²Π΅ΡΡŒΠΌΠ° ΠΏΠΎΠ»Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ΄Π΅ΠΈ структурного программирования. Π­Ρ‚ΠΎ проявляСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Delphi ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для записи ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ ΠΊ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±Π»ΠΎΠΊ-схСм ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка проСктирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. БрСдства языка Delphi ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ достаточный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ использования Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΊ Π½Π° ΡΡ‚Π°ΠΏΠ΅ трансляции Ρ‚Π°ΠΊ ΠΈ Π½Π° ΡΡ‚Π°ΠΏ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.

Delphi позволяСт Π±Π΅Π· особых трудностСй Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, Π½Π΅ ΠΏΡ€Π΅Π±ΠΈΠ³Π°Ρ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ прСдпологаСтся ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, поэтому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ исходноС сообщСниС с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ кодируСтся ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ структуру ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° Ρ…Π°Ρ„Ρ„ΠΌΠ΅Π½Π°.

Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ сообщСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΠΎ ΠΈ ΠΏΠΎ Π±ΠΈΡ‚Π°ΠΌ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для кодирования ΠΈΠ· Ρ„Ρ‹ΠΉΠ»Π°.

Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows 9. x.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ основныС области: ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°. Π‘ΠΏΡ€Π°Π²Π° располоТСно ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° сообщСния. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ поступлСния сообщСния Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° строится ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. Π’ ΠΏΠΎΠ»Π΅ Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ ΠΏΠΎΠ»Π΅ Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ отобраТаСтся Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ сообщСниС.

Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ Π±ΠΈΡ‚Π°ΠΌ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ: Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΈ Π‘ΠΈΡ‚.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ отобраТаСтся Π² ΠΏΠΎΠ»Π΅ Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ дСкодирования строится ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ.

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

Π’ Ρ…ΠΎΠ΄Π΅ выполнСния курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹ знания, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Ρ…ΠΎΠ΄Π΅ изучСния дисциплины «ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ». Π Π°Π±ΠΎΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ тСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π²Π΅Ρ€Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

БиблиографичСский список

ΠšΠΎΠ½ΡΠΏΠ΅ΠΊΡ‚ Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ»

Π¦Ρ‹ΠΌΠ±Π°Π» Π’.П. «Π’Сория ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. «- КиСв: «Π’ΠΈΡ‰Π° школа», 1982 — 303с.

Π’.Π‘. Π§Π΅Ρ€Π½Π΅Π³Π° «Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтях» — Π‘Π΅Π²Π“Π’Π£, Π‘Π΅Π²Π°ΡΡ‚ΠΎΠΏΠΎΠ»ΡŒ 1997.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π• A

ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ сообщСниС: Hello world!

Π’Π°Π±Π»ΠΈΡ†Π° 1. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 1

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 1

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: H

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

* 3

H

Π’Π°Π±Π»ΠΈΡ†Π° 2. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 2

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 2

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: He

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101

H 5

3 4

* e

Π’Π°Π±Π»ΠΈΡ†Π° 3. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 3

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 3

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hel

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100

5 6

* l H e

1 2 3 4

Π’Π°Π±Π»ΠΈΡ†Π° 4. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 4

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 4

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hell

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01

l

5 6

e

3 4

* H

Π’Π°Π±Π»ΠΈΡ†Π° 5. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 5

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 5

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111

7 8

e h l

3 4 5 6

* o

Π’Π°Π±Π»ΠΈΡ†Π° 6. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 6

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 6

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello_

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111 100 100 000

9 10

e l

5 6 7 8

* - h o

1 2 3 4

Π’Π°Π±Π»ΠΈΡ†Π° 7. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 7

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 7

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello_ w

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111 100 100 000 1 001 110 111

11 12

l

7 8 9 10

* w e — h o

1 2 3 4 5 6

Π’Π°Π±Π»ΠΈΡ†Π° 8. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 8

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 8

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello_ wo

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111 100 100 000 1 001 110 111 111

11 12

o l

7 8 9 10

e h

3 4 5 6

* w

Π’Π°Π±Π»ΠΈΡ†Π° 9. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 9

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 9

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello_ wor

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111 100 100 000 1 001 110 111 111 1110 1 110 010

o 13 14

9 10 11 12

h w e — l

3 4 5 6 7 8

* r

1 2

Π’Π°Π±Π»ΠΈΡ†Π° 10. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 10

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 10

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello_ worl

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111 100 100 000 1 001 110 111 111 1110 1 110 010 111

13 l 14

9 10 11 12

h w e — o

3 4 5 6 / 7 8

* r

1 2

Π’Π°Π±Π»ΠΈΡ†Π° 11. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ№ 11

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ № 11

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅: Hello_ world

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π½Π½ΠΎΠ΅ сообщСниС:

1 101 000 1 100 101 1 001 101 100 01 110 1 101 111 100 100 000 1 001 110 111 111 1110 1 110 010 111 1100 1 100 100

15 16

l

11 12 13 14

h w e o

5 6 7 8 9 10

* d — r

1 2 3 4

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π• Π’ Π’Скст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Form;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, Core;

type

TForm1 = class (TForm)

InChar: TEdit;

Panel1: TPaintBox;

Panel2: TPaintBox;

Label1: TLabel;

Label2: TLabel;

CodeTableMemo: TMemo;

MessageMemo: TMemo;

Label3: TLabel;

Label4: TLabel;

CodedMsg: TMemo;

Button1: TButton;

DecodedMsg: TMemo;

Button2: TButton;

Label5: TLabel;

procedure InCharKeyPress (Sender: TObject; var Key: Char);

procedure Button1Click (Sender: TObject);

procedure FormResize (Sender: TObject);

procedure FormPaint (Sender: TObject);

procedure Button2Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Tree, DecodeTree: PTree;

codetable: array [char] of string;

decodetable: array [char] of string;

procedure MakeCodeTable (Top: PTree);

implementation

{$R *. DFM}

procedure DrawTree (D: TPaintBox; P: Ptree; w, h: integer);

var

C: TCanvas;

procedure Draw (T: PTree; x, y, level, ofs: integer);

begin

if (T<>nil) then

begin

if (T. Left<>nil) then

begin

c. MoveTo (x, y);

c. LineTo (x-(ofs div 2), y+30);

end;

if (T. Right<>nil) then

begin

c. MoveTo (x, y);

c. LineTo (x+(ofs div 2), y+30);

end;

C. Ellipse (x-12,y-12,x+12,y+12);

if t. isleaf then if t. symbol=#0 then C. TextOut (x-4,y-25,'*') else C. TextOut (x-4,y-25,t. Symbol);

C. TextOut (x-6,y-7, inttostr (T. wiegth));

C. TextOut (x-6,y+12, inttostr (T. number));

Draw (T. Left, x-(ofs div 2), y+30,level+1,ofs div 2);

Draw (T. Right, x+(ofs div 2), y+30,level+1,ofs div 2);

end;

end;

begin

C: =D. Canvas;

C. Brush. Color: =clBtnFace;

C. FillRect (D. ClientRect);

Draw (P, w div 2,30,1,w div 2);

end;

procedure MakeDeCodeTable (Top: PTree);

procedure CT (P: PTree; code: string);

begin

if P<>nil then

begin

if (P. Wiegth>=0) and (P. IsLeaf) then

begin

decodetable [P. Symbol]: =code;

end;

if not P. IsLeaf then

begin

CT (P. Left, code+'0');

CT (P. Right, code+'1');

end;

end;

end;

begin

CT (Top,'');

end;

var

DCounter: integer;

DString: String;

DByte: byte;

DB: Boolean;

procedure AddCharToDMess (C: Char);

var

S: String;

begin

With Form1. DecodedMsg do

begin

S: =Text;

Clear;

Text: =S+C;

end;

end;

procedure Decode (BIT: Char);

var

i, j: integer;

c: char;

begin

if DB then

begin

if DCounter=0 then

DCounter: =7 else

dec (DCounter);

DByte: =((DByte shl 1) or (byte (bit) and 1));

if DCounter=0 then

begin

AddSymbol (DecodeTree, chr (DByte));

CheckWiegth (DecodeTree);

Enumerate (DecodeTree);

Huffman (DecodeTree);

Vitter (DecodeTree);

DrawTree (Form1. Panel2, DecodeTree, Form1. Panel2. ClientWidth, 500);

MakeDeCodeTable (DecodeTree);

AddCharToDMess (chr (DByte));

DString: ='';

DB: =false;

end;

end else

if DecodeTree=nil then

begin

DB: =true;

Decode (BIT);

end else

begin

DString: =DString + Bit;

for c: =#0 to #255 do

begin

if DecodeTable [c] =DString then

begin

if c=#0 then

begin

DB: =true;

DCounter: =0;

end else

begin

AddSymbol (DecodeTree, c);

CheckWiegth (DecodeTree);

Enumerate (DecodeTree);

Huffman (DecodeTree);

Vitter (DecodeTree);

DrawTree (Form1. Panel2, DecodeTree, Form1. Panel2. ClientWidth, 500);

MakeDeCodeTable (DecodeTree);

DString: ='';

AddCharToDMess (c);

DB: =false;

break;

end;

end;

end;

end;

end;

procedure MakeCodeTable (Top: PTree);

procedure CT (P: PTree; code: string);

begin

if P<>nil then

begin

if (P. Wiegth>=0) and (P. IsLeaf) then

begin

codetable [P. Symbol]: =code;

end;

if not P. IsLeaf then

begin

CT (P. Left, code+'0');

CT (P. Right, code+'1');

end;

end;

end;

begin

CT (Top,'');

end;

procedure ShowCT;

var

C: Char;

begin

Form1. CodeTableMemo. Clear;

For c: =#0 to #255 do

begin

if CodeTable [c] <>'' then

begin

Form1. CodeTableMemo. Lines. Append (c+' - '+CodeTable [c]);

end;

end;

end;

procedure AddCharToMess (C: Char);

var

S: String;

begin

With Form1. MessageMemo do

begin

S: =Text;

Clear;

Text: =S+C;

end;

end;

procedure AddCoded (c: char);

var

s: string;

begin

S: =Form1. CodedMsg. Lines. Text;

Form1. CodedMsg. Clear;

Form1. CodedMsg. Lines. Text: =S+' '+CodeTable [c];

end;

procedure AddASC (c: char);

var

i: integer;

s: string;

b: byte;

begin

s: ='';

b: =byte (c);

for i: =1 to 8 do

begin

s: =chr ((b and 1) +$ 30) +s;

b: =(b shr 1);

end;

S: =Form1. CodedMsg. Lines. Text+' '+s;

Form1. CodedMsg. Clear;

Form1. CodedMsg. Lines. Text: =S;

end;

procedure TForm1. InCharKeyPress (Sender: TObject; var Key: Char);

var

B: Boolean;

begin

B: =AddSymbol (Tree, Key);

CheckWiegth (Tree);

Enumerate (Tree);

Huffman (Tree);

DrawTree (Panel1,Tree, Panel1. ClientWidth, 500);

Application. MessageBox ('stop','stop', MB_OK);

Vitter (Tree);

DrawTree (Panel1,Tree, Panel1. ClientWidth, 500);

if B then

begin

AddCoded (#0);

AddASC (key);

end else

begin

AddCoded (key);

end;

MakeCodeTable (Tree);

AddCharToMess (Key);

ShowCT;

InChar. Clear;

end;

procedure TForm1. Button1Click (Sender: TObject);

var

s: string;

c: char;

begin

s: =CodedMsg. Text;

if (s<>'') then

begin

while s =' ' do Delete (s, 1,1);

while ((s<>'') and (s <>' ')) do

begin

Decode (s [1]);

Delete (s, 1,1);

end;

CodedMsg. Clear;

CodedMsg. Text: =s;

end;

end;

procedure TForm1. FormResize (Sender: TObject);

begin

Panel1. Top: =20;

Panel1. Height: =(ClientHeight div 2) — 20;

Label2. Top: =(ClientHeight div 2);

Panel2. top: =(ClientHeight div 2) +20;

Panel2. Height: =(ClientHeight div 2) — 20;

end;

procedure TForm1. FormPaint (Sender: TObject);

begin

DrawTree (Panel1,Tree, Panel1. ClientWidth, 500);

DrawTree (Panel2,DecodeTree, Panel2. ClientWidth, 500);

end;

procedure TForm1. Button2Click (Sender: TObject);

var

s: string;

c: char;

begin

s: =CodedMsg. Text;

if (s<>'') then

begin

while s =' ' do Delete (s, 1,1);

if ((s<>'') and (s <>' ')) then

begin

Decode (s [1]);

Delete (s, 1,1);

end;

CodedMsg. Clear;

CodedMsg. Text: =s;

end;

end;

end.

unit Core;

{$B-}

interface

uses Graphics;

type

PTree = ^TTree;

TTree = record

Left, Right, Up: PTree;

Symbol: char;

Wiegth: integer;

Number: integer;

IsLeaf: boolean;

end;

function NewNode (l, r, u: PTree; s: char; c, n: integer; i: boolean): PTree;

procedure DeleteTree (var P: PTree);

function AddNewSymbolToTree (var Top: PTree; c: char): boolean;

function AddSymbolToTree (var Top: PTree; c: char): boolean;

function AddSymbol (var Top: PTree; c: char): boolean;

function MaxLevel (Top: PTree): integer;

procedure NodesOnLevel (Top: PTree; var qol: integer; l, level: integer);

function GetNodeFromLevel (P: Ptree; level, number: integer; var l, n: integer): PTree;

procedure Enumerate (P: PTree);

function CheckWiegth (P: PTree): integer;

function GetNodeByNumber (P: PTree; number: integer): PTree;

function GetLeafByWiegthMax (P: PTree; wiegth: integer): PTree;

procedure Vitter (P: PTree);

procedure Huffman (P: PTree);

implementation

Uses Math, SysUtils;

{$B-}

function CheckWiegth (P: PTree): integer;

begin

Result: =0;

if P<>nil then

begin

if not P. Isleaf then

begin

Result: =CheckWiegth (P. left) +CheckWiegth (P. right);

P. Wiegth: =Result;

end else Result: =P. Wiegth;

end else

Result: =0;

end;

procedure Huffman (P: PTree);

var

i, j, k: integer;

t, tt: PTree;

tmp: TTree;

begin

k: =1;

t: =GetNodeByNumber (P, k);

while t<>nil do

begin

tt: =GetNodeByNumber (P, k+1);

if tt<>nil then

begin

if tt. Wiegth

begin

move (tt^, tmp, sizeof (tmp));

move (t^, tt^, sizeof (tmp));

move (tmp, t^, sizeof (tmp));

CheckWiegth (P);

Enumerate (P);

k: =1;

end;

end;

inc (k);

T: =GetNodeByNumber (P, k);

end;

end;

procedure Vitter (P: PTree);

var

i, j, k, l: integer;

t, tt, ttt: PTree;

tmp: TTree;

begin

k: =1;

t: =GetNodeByNumber (P, 1);

while t<>nil do

begin

if not T. IsLeaf then

begin

tt: =GetLeafByWiegthMax (P, t. wiegth);

if (tt<>nil) then

begin

if (tt. Number>T. Number) then

begin

move (tt^, tmp, sizeof (tmp));

move (t^, tt^, sizeof (tmp));

move (tmp, t^, sizeof (tmp));

CheckWiegth (P);

Enumerate (P);

k: =1;

end;

end;

end;

inc (k);

T: =GetNodeByNumber (P, k);

end;

end;

function GetLeafByWiegthMax (P: PTree; wiegth: integer): PTree;

var

i: integer;

Node: PTree;

begin

Result: =nil;

i: =1;

Node: =GetNodeByNumber (P, i);

while Node<>nil do

begin

if Node. Wiegth > wiegth then exit; // ???

if Node. IsLeaf and (Node. Wiegth=wiegth) then

begin

Result: =Node;

end;

inc (i);

Node: =GetNodeByNumber (P, i);

end;

end;

function GetNodeByNumber (P: PTree; number: integer): PTree;

begin

if (P<>nil) then

begin

if P. Number=number then result: =P else

begin

Result: =GetNodeByNumber (P. Left, number);

if Result=nil then Result: =GetNodeByNumber (P. Right, number);

end;

end else Result: =nil;

end;

procedure Enumerate (P: PTree);

var

i, j, k, l, n, o, s: integer;

T: PTree;

begin

n: =0;

k: =MaxLevel (P);

for i: =k downto 1 do

begin

o: =1;

s: =1;

l: =1;

T: =GetNodeFromLevel (P, i, l, o, s);

while T<>nil do

begin

inc (n);

T. Number: =n;

inc (l);

o: =1;

s: =1;

T: =GetNodeFromLevel (P, i, l, o, s);

end;

end;

end;

function GetNodeFromLevel (P: PTREE; level, number: integer; var l, n: integer): PTree;

var

T: PTRee;

begin

result: =nil;

if (P<>nil) then

begin

if (l

begin

inc (l);

T: =GetNodeFromLevel (P. Left, level, number, l, n);

dec (l);

if (T=nil) then

begin

inc (l);

Result: =GetNodeFromLevel (P. Right, level, number, l, n);

dec (l);

end

else Result: =T;

end else

begin

if (l=level) then

begin

if (n=number) then result: =P else

begin

result: =nil;

end;

inc (n);

end else result: =nil;

end;

end else

result: =nil;

end;

procedure NodesOnLevel (Top: PTree; var qol: integer; l, level: integer);

begin

if Top<>nil then

begin

if level=l then

begin

inc (qol);

end else

begin

NodesOnLevel (top. Left, qol, l+1,Level);

NodesOnLevel (top. Right, qol, l+1,Level);

end;

end;

end;

function MaxLevel (Top: PTree): integer;

begin

if (Top=nil) then

begin

Result: =0;

end else

begin

Result: =Max (MaxLevel (Top. Left), MaxLevel (Top. Right)) +1;

end;

end;

function AddSymbol (var Top: PTree; c: char): boolean;

begin

if (not AddSymbolToTree (Top, c)) then

if (not AddNewSymbolToTree (Top, c)) then

result: =false // Error

else

result: =true // Added

else

result: =false; // Updated

end;

function AddSymbolToTree (var Top: PTree; c: char): boolean;

begin

if Top=nil then Result: =False else

begin

if Top. IsLeaf then

begin

if Top. Symbol=c then

begin

inc (Top. Wiegth);

result: =true;

end else

begin

result: =false;

end;

end else

begin

if AddSymbolToTree (Top. left, c) or AddSymbolToTree (Top. right, c) then

begin

inc (Top. Wiegth);

result: =true;

end else

result: =false;

end;

end;

end;

function AddNewSymbolToTree (var Top: PTree; c: char): boolean;

begin

if Top=nil then

begin

Top: =NewNode (nil, nil, nil,#0,1,0,false);

Top. left: =NewNode (nil, nil, Top,#0,0,0,true);

Top. Right: =NewNode (nil, nil, Top, c,1,0,true);

result: =true;

end else

begin

if (Top. Wiegth=0) and (top. Symbol=#0) then

begin

Top. Left: =NewNode (nil, nil, Top,#0,0,0,true);

Top. Right: =NewNode (nil, nil, Top, c,1,0,true);

Top. IsLeaf: =false;

Top. Wiegth: =1;

Result: =true;

end else

begin

if (Top. Left<>nil) and AddNewSymbolToTree (Top. Left, c) then

begin

result: =true;

exit;

end;

if (Top. Right<>nil) and AddNewSymbolToTree (Top. Right, c) then

begin

result: =true;

exit;

end;

result: =false;

end;

end;

end;

procedure DeleteTree (var P: PTree);

begin

if P=nil then exit;

DeleteTree (P. Left);

DeleteTree (P. Right);

Dispose (P);

P: =nil;

end;

function NewNode (l, r, u: ptree; s: char; c, n: integer; i: boolean): PTree;

var

P: PTree;

begin

new (P);

P. Left: =l;

P. Right: =r;

P. Up: =u;

P. Symbol: =s;

P. Wiegth: =c;

P. Number: =n;

P. IsLeaf: =i;

result: =P;

end;

end.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ