Delphi.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΠΡΠ°ΠΊ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΈΡΠΎΠ³ ΠΈΠ· 256 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ. ΠΠ· ΡΡΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ Π»ΠΈΡΡ 2 ΠΏΠΎ Π΄Π»ΠΈΠ½Π½Π΅ ΡΠ°Π²Π½Ρ 8 Π±ΠΈΡΠ°ΠΌ. ΠΡΠ»ΠΈ ΠΌΡ ΡΠ»ΠΎΠΆΠΈΠΌ ΡΠΈΡΠ»ΠΎ Π±ΠΈΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ, ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ 1554 Π±ΠΈΡ ΠΈΠ»ΠΈ 195 Π±Π°ΠΉΡΠΎΠ². Π’Π°ΠΊ Π² ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ΅, ΠΌΡ ΡΠΆΠ°Π»ΠΈ 256 Π±Π°ΠΉΡ ΠΊ 195 ΠΈΠ»ΠΈ 33%, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Huffman ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ ΡΠΆΠ°ΡΠΈΡ Π² 33% ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π±Π°ΠΉΡΠ° ΠΡΠ΅ ΡΡΠΈ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Delphi. ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Delphi. ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ
Running — ΠΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ ΡΡΠΎ ΠΡ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΡΡΡΠΎΠΊΡ ΡΠ΅ΠΊΡΡΠ°, ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΡΠΎΠΈΡ 40 ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ². ΠΠ°Π»ΠΈΡΠΎ ΡΠ²Π½Π°Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΆΠ°ΡΠΈΡ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ — ΡΡΠΈ 40 ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² (40 Π±Π°ΠΉΡ) ΡΠΆΠΈΠΌΠ°ΡΡΡΡ Π² 3 Π±Π°ΠΉΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈΡ ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (running). ΠΠ΅ΡΠ²ΡΠΉ Π±Π°ΠΉΡ, ΡΡΠΎΡΡΠΈΠΉ Π²ΠΌΠ΅ΡΡΠΎ 40 ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² ΡΠΆΠ°ΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±ΡΠ»Π° ΠΈΠ· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²). ΠΡΠΎΡΠΎΠΉ Π±Π°ΠΉΡ — ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π±Π°ΠΉΡ «ΡΠ»Π°ΠΆΠΊΠ° «ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π² ΡΡΡΠΎΠΊΠ΅ Π±Π°ΠΉΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΡΡΡΠΎΠΊΠΈ. Π’ΡΠ΅ΡΠΈΠΉ Π±Π°ΠΉΡ — Π±Π°ΠΉΡ ΡΡΠ΅ΡΠ° (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ 40). ΠΠ°ΠΊ ΠΡ ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠΎΠ±Ρ Π»ΡΠ±ΠΎΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ 3-Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΈΡ Π²ΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ, Π½ΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠΉ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
ΠΡΡΠ°Π²Π»ΡΡ Π²ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅ ΠΈΡΡΠΈΠ½Π½ΡΠΌ, Π΄ΠΎΠ±Π°Π²Π»Ρ Π»ΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ±ΠΎΡ ΡΠΎΠ³ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° «ΡΠ»Π°ΠΆΠΊΠ° », ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΡΠ΅ 256 Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π±Π°ΠΉΡΠ° ΠΈ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠΌΠ΅ΡΡ 257 Π²Π°ΡΠΈΠ°Π½Ρ — «ΡΠ»Π°ΠΆΠΎΠΊ ». ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΡΠ°Π·ΡΠ΅ΡΠΈΠΌΠΎΠΉ, Π½ΠΎ ΠΊ Π½Π΅ΠΉ Π΅ΡΡΡ ΠΊΠ»ΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΡ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π² ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π₯Π°ΡΡΠΌΠ°Π½Π° (Huffman).
LZW — ΠΡΡΠΎΡΠΈΡ ΡΡΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΈΡ Π² ΠΌΠ°Π΅ 1977 Π³. ΠΠΆ. ΠΠΈΠ²ΠΎΠΌ (J. Ziv) ΠΈ Π. ΠΠ΅ΠΌΠΏΠ΅Π»Π΅ΠΌ (A. Lempel) ΡΡΠ°ΡΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π΅ «ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΠΎΡΠΈΠΈ «ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ «IEEE Trans ». Π ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΡΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΡΠ» Π΄ΠΎΡΠ°Π±ΠΎΡΠ°Π½ Π’Π΅ΡΡΠΈ Π. ΠΠ΅Π»ΡΠ΅ΠΌ (Terry A. Welch) ΠΈ Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ Π² ΡΡΠ°ΡΡΠ΅ «IEEE Compute «Π² ΠΈΡΠ½Π΅ 1984. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΈΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΠ·ΠΆΠ΅ ΡΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠ»ΡΡΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ — LZW (Lempel — Ziv — Welch) .
ΠΠ»Π³ΠΎΡΠΈΡΠΌ LZW ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π½Π΅ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊΡ «ΠΠ±ΡΠ΅ΠΊΡ TSortedCollection ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ ΠΎΡ TCollection. ». ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΡ ΡΡΡ ΡΡΡΠΎΠΊΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ «Collection «ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΠΎΠ²Π΅ 10 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² — 80 Π±ΠΈΡ. Π Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ, Π½Π° ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±Π»ΠΎΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 64Π ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡΡ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² 256 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎ ΡΡΠΈΡΡΠ²Π°Ρ Π±Π°ΠΉΡ «ΡΠ»Π°Π³ «ΠΏΠΎΠ»ΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΡΠΎΠΊΠ° ΠΈΠ· 80 Π±ΠΈΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ 8+16+8 = 32 Π±ΠΈΡΠ°. ΠΠ»Π³ΠΎΡΠΈΡΠΌ LZW ΠΊΠ°ΠΊ-Π±Ρ «ΠΎΠ±ΡΡΠ°Π΅ΡΡΡ «Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΆΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π°. ΠΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ°ΠΉΠ»Π΅, ΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠΆΠ°ΡΡΠΉ ΡΠ°ΠΉΠ». ΠΡΡΠ³ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠΆΠ°ΡΠΈΠ΅ ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ LZW ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π₯Π°ΡΡΠΌΠ°Π½Π° (Huffman), ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π²Π° ΠΏΡΠΎΡ ΠΎΠ΄Π°.
Huffman — Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π΅Π· ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ° Π±Π°ΠΉΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. ΠΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΌΡ Π·Π°ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΌΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π₯Π°ΡΡΠΌΠ°Π½Π° (Huffman). ΠΠΎΡΠ΅ΡΡΠ² Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΡ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅ΠΌ Π·Π½Π°Π½ΠΈΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ°Ρ .
Π‘ΠΆΠΈΠΌΠ°Ρ ΡΠ°ΠΉΠ» ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π₯Π°ΡΡΠΌΠ°Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π΅Π»Π°ΡΡ — ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠ°ΠΉΠ» ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ASCII. ΠΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΡΠ΅ 256 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎ Π΄Π»Ρ Π½Π°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π½ΠΈΡΡ Π² ΡΠΆΠ°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈ EXE ΡΠ°ΠΉΠ»Π°.
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠ°ΡΡΠΎΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠΎΠ΄ΠΎΠ² ASCII ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΈΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎ ΡΠ±ΡΠ²Π°Π½ΠΈΡ. Π’ΠΎ Π΅ΡΡΡ Π½Π΅ ΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΡΡΠΎΠ½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π½ΠΈΡ ΠΏΠΎ ΡΠ±ΡΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΆΠ΄ΡΡ ΡΡΡΠ»ΠΊΡ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π½Π°Π·ΠΎΠ²Π΅ΠΌ «ΡΠ·Π»ΠΎΠΌ ». Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ (Π² Π΄Π΅ΡΠ΅Π²Π΅) ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΠΎΡ «ΡΠ·Π΅Π» ». ΠΠ»Ρ ΡΡΠ½ΠΎΡΡΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ°ΠΉΠ» Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π² 100 Π±Π°ΠΉΡ ΠΈ ΠΈΠΌΠ΅ΡΡΠΈΠΉ 6 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ΅Π±Π΅. ΠΡ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°Π»ΠΈ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ°ΠΉΠ» ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ :
+————————-+——-+——-+——-+——-+——-+——-+.
| cΠΈΠΌΠ²ΠΎΠ» | A | B | C | D | E | F |.
+————————-+——-+——-+——-+——-+——-+——-|.
| ΡΠΈΡΠ»ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ | 10 | 20 | 30 | 5 | 25 | 10 |.
+————————-+——-+——-+——-+——-+——-+——-+.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π±Π΅ΡΠ΅ΠΌ ΡΡΠΈ ΡΠΈΡΠ»Π° ΠΈ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΡ ΡΠ°ΡΡΠΎΡΠΎΠΉ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°. Π Π°Π·ΠΌΠ΅ΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠ°ΠΊ Π½ΠΈΠΆΠ΅.
+————————-+——-+——-+——-+——-+——-+——-+.
| cΠΈΠΌΠ²ΠΎΠ» | C | E | B | F | A | D |.
+————————-+——-+——-+——-+——-+——-+——-|.
| ΡΠΈΡΠ»ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ | 30 | 25 | 20 | 10 | 10 | 5 |.
+————————-+——-+——-+——-+——-+——-+——-+.
ΠΡ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ D (5) ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· F ΠΈΠ»ΠΈ A (10), ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ A. Π‘ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΈΠ· «ΡΠ·Π»ΠΎΠ² «D ΠΈ A Π½ΠΎΠ²ΡΠΉ «ΡΠ·Π΅Π» », ΡΠ°ΡΡΠΎΡΠ° Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½Π° ΡΡΠΌΠΌΠ΅ ΡΠ°ΡΡΠΎΡ D ΠΈ A :
Π§Π°ΡΡΠΎΡΠ° 30 10 5 10 20 25.
Π‘ΠΈΠΌΠ²ΠΎΠ»Π° C A D F B E.
| |.
+—+—+.
+±+.
|15| = 5 + 10.
+—+.
ΠΠΎΠΌΠ΅Ρ Π² ΡΠ°ΠΌΠΊΠ΅ — ΡΡΠΌΠΌΠ° ΡΠ°ΡΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² D ΠΈ A. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠ½ΠΎΠ²Π° ΠΈΡΠ΅ΠΌ Π΄Π²Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° Ρ ΡΠ°ΠΌΡΠΌΠΈ Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ ΡΠ°ΡΡΠΎΡΠ°ΠΌΠΈ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ. ΠΡΠΊΠ»ΡΡΠ°Ρ ΠΈΠ· ΠΏΡΠΎΡΠΌΠΎΡΡΠ° D ΠΈ A ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΈΡ Π½ΠΎΠ²ΡΠΉ «ΡΠ·Π΅Π» «Ρ ΡΡΠΌΠΌΠ°ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ. Π‘Π°ΠΌΠ°Ρ Π½ΠΈΠ·ΠΊΠ°Ρ ΡΠ°ΡΡΠΎΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ Ρ F ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ «ΡΠ·Π»Π° ». Π‘Π½ΠΎΠ²Π° ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ ΡΠ·Π»ΠΎΠ² :
Π§Π°ΡΡΠΎΡΠ° 30 10 5 10 20 25.
Π‘ΠΈΠΌΠ²ΠΎΠ»Π° C A D F B E.
| | |.
| | |.
| +—+| |.
±|15++ |.
+±+ |.
| |.
| +—+ |.
+——|25±+ = 10 + 15.
+—+.
Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ½ΠΎΠ²Π° Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (B ΠΈ E). ΠΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π² ΡΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΠΊΠ° Π²ΡΠ΅ «Π΄Π΅ΡΠ΅Π²ΠΎ «Π½Π΅ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΎ, Ρ. Π΅. ΠΏΠΎΠΊΠ° Π²ΡΠ΅ Π½Π΅ ΡΠ²Π΅Π΄Π΅ΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ·Π»Ρ.
Π§Π°ΡΡΠΎΡΠ° 30 10 5 10 20 25.
Π‘ΠΈΠΌΠ²ΠΎΠ»Π° C A D F B E.
| | | | | |.
| | | | | |.
| | +—+| | | |.
| ±|15++ | | |.
| +±+ | | |.
| | | | |.
| | +—+ | | +—+ |.
| +——|25±+ ±|45±+.
| +±+ +±+.
| +—+ | |.
+——|55+———+ |.
±++ |.
| +——————+ |.
+—-| Root (100) +——+.
+——————+.
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ». ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ΅Π³Π΄Π° Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΈΠ· ΠΊΠΎΡΠ½Ρ (Root). ΠΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (Π»ΠΈΡΡ Π΄Π΅ΡΠ΅Π²Π° Π‘) ΠΡ ΠΏΡΠΎΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌ Π²Π²Π΅ΡΡ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ Π²ΡΠ΅ ΠΏΠΎΠ²ΠΎΡΠΎΡΡ Π²Π΅ΡΠ²Π΅ΠΉ ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Π»Π΅Π²ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ, ΡΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ 0-ΠΉ Π±ΠΈΡ, ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ 1-ΠΉ Π±ΠΈΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°. Π’Π°ΠΊ Π΄Π»Ρ C, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ΄ΡΠΈ Π²Π»Π΅Π²ΠΎ ΠΊ 55 (ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ 0), Π·Π°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° Π²Π»Π΅Π²ΠΎ (0) ΠΊ ΡΠ°ΠΌΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΠΎΠ΄ Π₯Π°ΡΡΠΌΠ°Π½Π° Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° C — 00. ΠΠ»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° (Π) Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ — Π»Π΅Π²ΠΎ, ΠΏΡΠ°Π²ΠΎ, Π»Π΅Π²ΠΎ, Π»Π΅Π²ΠΎ, ΡΡΠΎ Π²ΡΠ»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 0100. ΠΡΠΏΠΎΠ»Π½ΠΈΠ² Π²ΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΠΌ.
C = 00 (2 Π±ΠΈΡΠ°).
A = 0100 (4 Π±ΠΈΡΠ°).
D = 0101 (4 Π±ΠΈΡΠ°).
F = 011 (3 Π±ΠΈΡΠ°).
B = 10 (2 Π±ΠΈΡΠ°).
E = 11 (2 Π±ΠΈΡΠ°).
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ»ΡΡ 8-Ρ Π±ΠΈΡΠ°ΠΌΠΈ (ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ), ΠΈ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΠΈ ΡΠΈΡΠ»ΠΎ Π±ΠΈΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΠΌΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π‘ΠΆΠ°ΡΠΈΠ΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ :
+—————+————————+—————————-+———————+.
| Π§Π°ΡΡΠΎΡΠ° | ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ | ΡΠΏΠ»ΠΎΡΠ½Π΅Π½Π½ΡΠ΅ Π±ΠΈΡΡ | ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΎ Π½Π° |.
+—————+————————+—————————-+———————|.
| C 30 | 30×8 = 240 | 30×2 = 60 | 180 |.
| A 10 | 10×8 = 80 | 10×3 = 30 | 50 |.
| D 5 | 5×8 = 40 | 5×4 = 20 | 20 |.
| F 10 | 10×8 = 80 | 10×4 = 40 | 40 |.
| B 20 | 20×8 = 160 | 20×2 = 40 | 120 |.
| E 25 | 25×8 = 200 | 25×2 = 50 | 150 |.
+—————+————————+—————————-+———————+.
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°: 100 Π±Π°ΠΉΡ — 800 Π±ΠΈΡ;
Π Π°Π·ΠΌΠ΅Ρ ΡΠΆΠ°ΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°: 30 Π±Π°ΠΉΡ — 240 Π±ΠΈΡ;
240 — 30% ΠΈΠ· 800, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΡΠΆΠ°Π»ΠΈ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π½Π° 70%.
ΠΡΠ΅ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΌ ΡΠ°ΠΊΡΠ΅, ΡΡΠΎ Π΄Π»Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΡΡΠ΅Π΅ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π΅ΡΠ΅Π²ΡΡ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½Ρ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΡΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΎΠ³Π΅ Π² ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° .
Π Π½Π°ΡΠ΅ΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ΅ ΡΠΆΠ°ΡΠΈΡ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ·Π»Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ 4 Π±Π°ΠΉΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΏΠΎ ΡΡΠΎΠΌΡ, ΠΏΠΎΠ»Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π»Ρ 256 Π±Π°ΠΉΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ 1 ΠΠ±Π°ΠΉΡ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ. Π’Π°Π±Π»ΠΈΡΠ° Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠΌΠ΅Π΅Ρ 5 ΡΠ·Π»ΠΎΠ² ΠΏΠ»ΡΡ 6 Π²Π΅ΡΡΠΈΠ½ (Π³Π΄Π΅ ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π°ΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ), Π²ΡΠ΅Π³ΠΎ 11. 4 Π±Π°ΠΉΡΠ° 11 ΡΠ°Π· — 44. ΠΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡΠΎΠ² Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ° ΡΠ·Π»Π° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ — Π½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ 50 Π±Π°ΠΉΡΠΎΠ² Π΄Π»ΠΈΠ½Π½Ρ. ΠΠΎΠ±Π°Π²ΠΈΠ² ΠΊ 30 Π±Π°ΠΉΡΠ°ΠΌ ΡΠΆΠ°ΡΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, 50 Π±Π°ΠΉΡΠΎΠ² ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ, ΡΡΠΎ ΠΎΠ±ΡΠ°Ρ Π΄Π»ΠΈΠ½Π½Π° Π°ΡΡ ΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π²ΡΡΠ°ΡΡΠ΅Ρ Π΄ΠΎ 80 Π±Π°ΠΉΡ. Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π½Π° ΡΠ°ΠΉΠ»Π° Π² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ»Π° 100 Π±Π°ΠΉΡ — ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ 20% ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ΅ ΠΏΠ»ΠΎΡ ΠΎ. Π’ΠΎ ΡΡΠΎ ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ — ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ASCII Π½Π°Π±ΠΎΡΠ° Π² Π½Π°Ρ Π½ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π±ΡΡΡΠΈΠΉ ΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΠΊΠΎΠ² ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ.
Π§ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π° ΡΡΠΎΠΌ ΠΏΡΡΠΈ ?
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΊΠΎΡΠΎΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΉ Π² ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠΌ.
ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ :
4 — 2 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄Π°;
8 — 3 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
16 — 4 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
32 — 5 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
64 — 6 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
128 — 7 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ΡΠ΅ Π΄Π²Π° 8 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄Π°.
4 — 2 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄Π°;
8 — 3 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
16 — 4 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
32 — 5 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
64 — 6 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
128 — 7 ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²;
———-;
ΠΡΠ°ΠΊ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΈΡΠΎΠ³ ΠΈΠ· 256 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ. ΠΠ· ΡΡΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ Π»ΠΈΡΡ 2 ΠΏΠΎ Π΄Π»ΠΈΠ½Π½Π΅ ΡΠ°Π²Π½Ρ 8 Π±ΠΈΡΠ°ΠΌ. ΠΡΠ»ΠΈ ΠΌΡ ΡΠ»ΠΎΠΆΠΈΠΌ ΡΠΈΡΠ»ΠΎ Π±ΠΈΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ, ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ 1554 Π±ΠΈΡ ΠΈΠ»ΠΈ 195 Π±Π°ΠΉΡΠΎΠ². Π’Π°ΠΊ Π² ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ΅, ΠΌΡ ΡΠΆΠ°Π»ΠΈ 256 Π±Π°ΠΉΡ ΠΊ 195 ΠΈΠ»ΠΈ 33%, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Huffman ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ ΡΠΆΠ°ΡΠΈΡ Π² 33% ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π±Π°ΠΉΡΠ° ΠΡΠ΅ ΡΡΠΈ ΠΏΠΎΠ΄ΡΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π΄Π»Ρ Π½Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² Π₯Π°ΡΡΠΌΠ°Π½Π° Ρ. Π΅. ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄ A — 1 011 ΠΈ ΠΊΠΎΠ΄ B — 0101. ΠΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΠΈ ΠΊΠΎΠ΄Ρ ΠΏΠΎΠ±ΠΈΡΠ½ΠΎ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ² Π±ΠΈΡΡ 0101 ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ A ΠΈΠ»ΠΈ B, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π±ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ ΠΊΠ»ΡΡΠ΅ΠΌ ΠΊ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² ΡΠ»ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΈ Π΅ΡΠ»ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π΅ΡΠ΅Π²Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΊΠΎΠ΄Ρ ΡΠ°ΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΠ΅.
ΠΠ΄Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ — Π°Π»Π³ΠΎΡΠΈΡΠΌ Π₯Π°ΡΡΠΌΠ°Π½Π° ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΈΡΠ°ΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» Π΄Π²Π°ΠΆΠ΄Ρ, ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΡΠΈΡΠ°Ρ ΡΠ°ΡΡΠΎΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°Π·ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
P. S. Π «ΠΊΠ»ΡΡΠΈΠΊΠ΅ «Π΄Π°ΡΡΠ΅ΠΌ Π΄ΠΎΡΠΎΠ³Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Running.
—— ΠΡΠΎΡΠΈΡΠ°Π² ΠΎΠ±Π·ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Huffman ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅Π½Π°Π΄ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π° Π½Π°ΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ 257 Π»ΠΈΡΡΠΈΠΊΠΎΠ².
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1) ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡΠ° Narc ΡΠΈΡΠΌΡ Infinity Design Concepts, Inc.;
2) Π§Π°ΡΠ»ΡΠ· Π‘Π΅ΠΉΡΠ΅Ρ, «Π‘ΠΆΠ°ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ », «ΠΠΈΡ ΠΠ », N2 1991;
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
{$A+, B-, D+, E+, F-, G-, I-, L+, N-, O-, R+, S+, V+, X-}.
{$M 16 384,0,655 360}.
{******************************************************}.
{* ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΏΠ»ΠΎΡΠ½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ *}.
{* Π₯Π°ΡΠΌΠ°Π½Π°. *}.
{******************************************************}.
Program Hafman;
Uses Crt, Dos, Printer;
Type PCodElement = ^CodElement;
CodElement = record.
NewLeft, NewRight,.
P0, P1: PCodElement; {ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ}.
LengthBiteChain: byte; { Π² ΠΌΠ°ΡΡΠΈΠ², ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ Π΄Π΅ΡΠ΅Π²ΠΎ }.
BiteChain: word;
CounterEnter: word;
Key: boolean;
Index: byte;
end;
TCodeTable = array [0.255] of PCodElement;
Var CurPoint, HelpPoint,.
LeftRange, RightRange: PCodElement;
CodeTable: TCodeTable;
Root: PCodElement;
InputF, OutputF, InterF: file;
TimeUnPakFile: longint;
AttrUnPakFile: word;
NumRead, NumWritten: Word;
InBuf: array[0.10 239] of byte;
OutBuf: array[0.10 239] of byte;
BiteChain: word;
CRC,.
CounterBite: byte;
OutCounter: word;
InCounter: word;
OutWord: word;
St: string;
LengthOutFile, LengthArcFile: longint;
Create: boolean;
NormalWork: boolean;
ErrorByte: byte;
DeleteFile: boolean;
{————————————————————————-}.
procedure ErrorMessage;
{ —- Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ —- }.
begin.
If ErrorByte 0 then.
begin.
Case ErrorByte of.
2: Writeln («File not found … »);
3: Writeln («Path not found … »);
5: Writeln («Access denied … »);
6: Writeln («Invalid handle … »);
8: Writeln («Not enough memory … »);
10: Writeln («Invalid environment … »);
11: Writeln («Invalid format … »);
18: Writeln («No more files … »);
else Writeln («Error # », ErrorByte, «… »);
end;
NormalWork:=False;
ErrorByte:=0;
end;
end;
procedure ResetFile;
{ —- ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π°ΡΡ ΠΈΠ²Π°ΡΠΈΠΈ —- }.
Var St: string;
begin.
Assign (InputF, ParamStr (3));
Reset (InputF, 1);
ErrorByte:=IOResult;
ErrorMessage;
If NormalWork then Writeln («Pak file: », ParamStr (3), «… »);
end;
procedure ResetArchiv;
{ —- ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π°ΡΡ ΠΈΠ²Π°, ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ —- }.
begin.
St:=ParamStr (2);
If Pos («. », St)0 then Delete (St, Pos («. », St), 4);
St:=St+ " .vsg " ;
Assign (OutputF, St);
Reset (OutPutF, 1);
Create:=False;
If IOResult=2 then.
begin.
Rewrite (OutputF, 1);
Create:=True;
end;
If NormalWork then.
If Create then Writeln («Create archiv: », St, «… »).
else Writeln («Open archiv: », St, «… »).
end;
procedure SearchNameInArchiv;
{ —- Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ — ΠΏΠΎΠΈΡΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° Π² Π°ΡΡ ΠΈΠ²Π΅ —- }.
begin.
Seek (OutputF, FileSize (OutputF));
ErrorByte:=IOResult;
ErrorMessage;
end;
procedure DisposeCodeTable;
{ —- ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ —- }.
Var I: byte;
begin.
For I:=0 to 255 do Dispose (CodeTable[I]);
end;
procedure ClosePakFile;
{ —- Π·Π°ΠΊΡΡΡΠΈΠ΅ Π°ΡΡ ΠΈΠ²ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° —- }.
Var I: byte;
begin.
If DeleteFile then Erase (InputF);
Close (InputF);
end;
procedure CloseArchiv;
{ —- Π·Π°ΠΊΡΡΡΠΈΠ΅ Π°ΡΡ ΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° —- }.
begin.
If FileSize (OutputF)=0 then Erase (OutputF);
Close (OutputF);
end;
procedure InitCodeTable;
{ —- ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ —- }.
Var I: byte;
begin.
For I:=0 to 255 do.
begin.
New (CurPoint);
CodeTable[I]: =CurPoint;
With CodeTable[I]^ do.
begin.
P0:=Nil;
P1:=Nil;
LengthBiteChain:=0;
BiteChain:=0;
CounterEnter:=1;
Key:=True;
Index:=I;
end;
end;
For I:=0 to 255 do.
begin.
If I>0 then CodeTable[I-1]^.NewRight:=CodeTable[I];
If I CurPoint^.NewRight^.CounterEnter then.
begin.
HelpPoint:=CurPoint^.NewRight;
HelpPoint^.NewLeft:=CurPoint^.NewLeft;
CurPoint^.NewLeft:=HelpPoint;
If HelpPoint^.NewRightNil then HelpPoint^.NewRight^.NewLeft:=CurPoint;
CurPoint^.NewRight:=HelpPoint^.NewRight;
HelpPoint^.NewRight:=CurPoint;
If HelpPoint^.NewLeftNil then HelpPoint^.NewLeft^.NewRight:=HelpPoint;
If CurPoint=LeftRange then LeftRange:=HelpPoint;
If HelpPoint=RightRange then RightRange:=CurPoint;
CurPoint:=CurPoint^.NewLeft;
If CurPoint = LeftRange then CurPoint:=CurPoint^.NewRight.
else CurPoint:=CurPoint^.NewLeft;
end.
else CurPoint:=CurPoint^.NewRight;
end;
end;
procedure CounterNumberEnter;
{ —- ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΠ°ΡΡΠΎΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π±Π°ΠΉΡΠΎΠ² Π² Π±Π»ΠΎΠΊΠ΅ —- }.
Var C: word;
begin.
For C:=0 to NumRead-1 do.
Inc (CodeTable[(InBuf[C])]^.CounterEnter);
end;
function SearchOpenCode: boolean;
{ —- ΠΏΠΎΠΈΡΠΊ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠ°ΡΡ ΠΎΡΠΊΡΡΡΡΡ ΠΏΠΎ Key ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ —- }.
begin.
CurPoint:=LeftRange;
HelpPoint:=LeftRange;
HelpPoint:=HelpPoint^.NewRight;
While not CurPoint^.Key do.
CurPoint:=CurPoint^.NewRight;
While (not (HelpPoint=RightRange)) and (not HelpPoint^.Key) do.
begin.
HelpPoint:=HelpPoint^.NewRight;
If (HelpPoint=CurPoint) and (HelpPointRightRange) then.
HelpPoint:=HelpPoint^.NewRight;
end;
If HelpPoint=CurPoint then SearchOpenCode:=False else SearchOpenCode:=True;
end;
procedure CreateTree;
{ —- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠΎΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ —- }.
begin.
While SearchOpenCode do.
begin.
New (Root);
With Root^ do.
begin.
P0:=CurPoint;
P1:=HelpPoint;
LengthBiteChain:=0;
BiteChain:=0;
CounterEnter:=P0^.CounterEnter + P1^.CounterEnter;
Key:=True;
P0^.Key:=False;
P1^.Key:=False;
end;
HelpPoint:=LeftRange;
While (HelpPoint^.CounterEnter < Root^.CounterEnter) and.
(HelpPointNil) do HelpPoint:=HelpPoint^.NewRight;
If HelpPoint=Nil then { Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ }.
begin.
Root^.NewLeft:=RightRange;
RightRange^.NewRight:=Root;
Root^.NewRight:=Nil;
RightRange:=Root;
end.
else.
begin { Π²ΡΡΠ°Π²ΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ HelpPoint }.
Root^.NewLeft:=HelpPoint^.NewLeft;
HelpPoint^.NewLeft:=Root;
Root^.NewRight:=HelpPoint;
If Root^.NewLeftNil then Root^.NewLeft^.NewRight:=Root;
end;
end;
end;
procedure ViewTree (P: PCodElement);
{ —- ΠΏΡΠΎΡΠΌΠΎΡΡ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠΎΡ ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ΅ΠΏΠ΅ΠΉ Π»ΠΈΡΡΡΡΠΌ —- }.
Var Mask, I: word;
begin.
Inc (CounterBite);
If P^.P0Nil then ViewTree (P^.P0);
If P^.P1Nil then.
begin.
Mask:=(1 SHL (16-CounterBite));
BiteChain:=BiteChain OR Mask;
ViewTree (P^.P1);
Mask:=(1 SHL (16-CounterBite));
BiteChain:=BiteChain XOR Mask;
end;
If (P^.P0=Nil) and (P^.P1=Nil) then.
begin.
P^.BiteChain:=BiteChain;
P^.LengthBiteChain:=CounterBite-1;
end;
Dec (CounterBite);
end;
procedure CreateCompressCode;
{ —- ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π΄Π΅ΡΠ΅Π²Π° Ρ Π²Π΅ΡΡΠΈΠ½Ρ —- }.
begin.
BiteChain:=0;
CounterBite:=0;
Root^.Key:=False;
ViewTree (Root);
end;
procedure DeleteTree;
{ —- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° —- }.
Var P: PCodElement;
begin.
CurPoint:=LeftRange;
While CurPointNil do.
begin.
If (CurPoint^.P0Nil) and (CurPoint^.P1Nil) then.
begin.
If CurPoint^.NewLeft Nil then.
CurPoint^.NewLeft^.NewRight:=CurPoint^.NewRight;
If CurPoint^.NewRight Nil then.
CurPoint^.NewRight^.NewLeft:=CurPoint^.NewLeft;
If CurPoint=LeftRange then LeftRange:=CurPoint^.NewRight;
If CurPoint=RightRange then RightRange:=CurPoint^.NewLeft;
P:=CurPoint;
CurPoint:=P^.NewRight;
Dispose (P);
end.
else CurPoint:=CurPoint^.NewRight;
end;
end;
procedure SaveBufHeader;
{ —- Π·Π°ΠΏΠΈΡΡ Π² Π±ΡΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π°ΡΡ ΠΈΠ²Π° —- }.
Type.
ByteField = array[0.6] of byte;
Const.
Header: ByteField = ($ 56, $ 53, $ 31, $ 00, $ 00, $ 00, $ 00);
begin.
If Create then.
begin.
Move (Header, OutBuf[0], 7);
OutCounter:=7;
end.
else.
begin.
Move (Header[3], OutBuf[0], 4);
OutCounter:=4;
end;
end;
procedure SaveBufFATInfo;
{ —- Π·Π°ΠΏΠΈΡΡ Π² Π±ΡΡΠ΅Ρ Π²ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠ°ΠΉΠ»Ρ —- }.
Var I: byte;
St: PathStr;
R: SearchRec;
begin.
St:=ParamStr (3);
For I:=0 to Length (St)+1 do.
begin.
OutBuf[OutCounter]: =byte (Ord (St[I]));
Inc (OutCounter);
end;
FindFirst (St,$ 00,R);
Dec (OutCounter);
Move (R.Time, OutBuf[OutCounter], 4);
OutCounter:=OutCounter+4;
OutBuf[OutCounter]: =R.Attr;
Move (R.Size, OutBuf[OutCounter+1], 4);
OutCounter:=OutCounter+5;
end;
procedure SaveBufCodeArray;
{ —- ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΡΡΠΎΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π² Π°ΡΡ ΠΈΠ²Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ —- }.
Var I: byte;
begin.
For I:=0 to 255 do.
begin.
OutBuf[OutCounter]: =Hi (CodeTable[I]^.CounterEnter);
Inc (OutCounter);
OutBuf[OutCounter]: =Lo (CodeTable[I]^.CounterEnter);
Inc (OutCounter);
end;
end;
procedure CreateCodeArchiv;
{ —- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠΆΠ°ΡΠΈΡ —- }.
begin.
InitCodeTable; { ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ }.
CounterNumberEnter; { ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΠΈΡΠ»Π° Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π±Π°ΠΉΡ Π² Π±Π»ΠΎΠΊ }.
SortQueueByte; { cΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΡΠΈΡΠ»Π° Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ }.
SaveBufHeader; { ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π°ΡΡ ΠΈΠ²Π° Π² Π±ΡΡΠ΅ΡΠ΅ }.
SaveBufFATInfo; { ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ FAT ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ°ΠΉΠ»Ρ }.
SaveBufCodeArray; { ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΡΡΠΎΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π² Π°ΡΡ ΠΈΠ²Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ }.
CreateTree; { ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠΎΡ }.
CreateCompressCode; { cΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠΆΠ°ΡΠΈΡ }.
DeleteTree; { ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠΎΡ }.
end;
procedure PakOneByte;
{ —- ΡΠΆΠ°ΡΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠ° Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° —- }.
Var Mask: word;
Tail: boolean;
begin.
CRC:=CRC XOR InBuf[InCounter];
Mask:=CodeTable[InBuf[InCounter]]^.BiteChain SHR CounterBite;
OutWord:=OutWord OR Mask;
CounterBite:=CounterBite+CodeTable[InBuf[InCounter]]^.LengthBiteChain;
If CounterBite>15 then Tail:=True else Tail:=False;
While CounterBite>7 do.
begin.
OutBuf[OutCounter]: =Hi (OutWord);
Inc (OutCounter);
If OutCounter=(SizeOf (OutBuf)-4) then.
begin.
BlockWrite (OutputF, OutBuf, OutCounter, NumWritten);
OutCounter:=0;
end;
CounterBite:=CounterBite-8;
If CounterBite0 then OutWord:=OutWord SHL 8 else OutWord:=0;
end;
If Tail then.
begin.
Mask:=CodeTable[InBuf[InCounter]]^.BiteChain SHL.
(CodeTable[InBuf[InCounter]]^.LengthBiteChain-CounterBite);
OutWord:=OutWord OR Mask;
end;
Inc (InCounter);
If (InCounter=(SizeOf (InBuf))) or (InCounter=NumRead) then.
begin.
InCounter:=0;
BlockRead (InputF, InBuf, SizeOf (InBuf), NumRead);
end;
end;
procedure PakFile;
{ —- ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΆΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π° —- }.
begin.
ResetFile;
SearchNameInArchiv;
If NormalWork then.
begin.
BlockRead (InputF, InBuf, SizeOf (InBuf), NumRead);
OutWord:=0;
CounterBite:=0;
OutCounter:=0;
InCounter:=0;
CRC:=0;
CreateCodeArchiv;
While (NumRead0) do PakOneByte;
OutBuf[OutCounter]: =Hi (OutWord);
Inc (OutCounter);
OutBuf[OutCounter]: =CRC;
Inc (OutCounter);
BlockWrite (OutputF, OutBuf, OutCounter, NumWritten);
DisposeCodeTable;
ClosePakFile;
end;
end;
procedure ResetUnPakFiles;
{ —- ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ —- }.
begin.
InCounter:=7;
St:= «» ;
repeat.
St[InCounter-7]: =Chr (InBuf[InCounter]);
Inc (InCounter);
until InCounter=InBuf[7]+8;
Assign (InterF, St);
Rewrite (InterF, 1);
ErrorByte:=IOResult;
ErrorMessage;
If NormalWork then.
begin.
WriteLn («UnPak file: », St, «… »);
Move (InBuf[InCounter], TimeUnPakFile, 4);
InCounter:=InCounter+4;
AttrUnPakFile:=InBuf[InCounter];
Inc (InCounter);
Move (InBuf[InCounter], LengthArcFile, 4);
InCounter:=InCounter+4;
end;
end;
procedure CloseUnPakFile;
{ —- Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ —- }.
begin.
If not NormalWork then Erase (InterF).
else.
begin.
SetFAttr (InterF, AttrUnPakFile);
SetFTime (InterF, TimeUnPakFile);
end;
Close (InterF);
end;
procedure RestoryCodeTable;
{ —- Π²ΠΎΡΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ —- }.
Var I: byte;
begin.
InitCodeTable;
For I:=0 to 255 do.
begin.
CodeTable[I]^.CounterEnter:=InBuf[InCounter];
CodeTable[I]^.CounterEnter:=CodeTable[I]^.CounterEnter SHL 8;
Inc (InCounter);
CodeTable[I]^.CounterEnter:=CodeTable[I]^.CounterEnter+InBuf[InCounter];
Inc (InCounter);
end;
end;
procedure UnPakByte (P: PCodElement);
{ —- ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° —- }.
Var Mask: word;
begin.
If (P^.P0=Nil) and (P^.P1=Nil) then.
begin.
OutBuf[OutCounter]: =P^.Index;
Inc (OutCounter);
Inc (LengthOutFile);
If OutCounter = (SizeOf (OutBuf)-1) then.
begin.
BlockWrite (InterF, OutBuf, OutCounter, NumWritten);
OutCounter:=0;
end;
end.
else.
begin.
Inc (CounterBite);
If CounterBite=9 then.
begin.
Inc (InCounter);
If InCounter = (SizeOf (InBuf)) then.
begin.
InCounter:=0;
BlockRead (OutputF, InBuf, SizeOf (InBuf), NumRead);
end;
CounterBite:=1;
end;
Mask:=InBuf[InCounter];
Mask:=Mask SHL (CounterBite-1);
Mask:=Mask OR $FF7 °F; { ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅Ρ Π±ΠΈΡΠΎΠ² ΠΊΡΠΎΠΌΠ΅ ΡΡΠ°ΡΡΠ΅Π³ΠΎ }.
If Mask=$FFFF then UnPakByte (P^.P1).
else UnPakByte (P^.P0);
end;
end;
procedure UnPakFile;
{ —- ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° —- }.
begin.
BlockRead (OutputF, InBuf, SizeOf (InBuf), NumRead);
ErrorByte:=IOResult;
ErrorMessage;
If NormalWork then ResetUnPakFiles;
If NormalWork then.
begin.
RestoryCodeTable;
SortQueueByte;
CreateTree; { ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°ΡΡΠΎΡ }.
CreateCompressCode;
CounterBite:=0;
OutCounter:=0;
LengthOutFile:=0;
While LengthOutFile LengthArcFile do.
UnPakByte (Root);
BlockWrite (InterF, OutBuf, OutCounter, NumWritten);
DeleteTree;
DisposeCodeTable;
end;
CloseUnPakFile;
end;
{ ————————————- main text ————————————- }.
begin.
DeleteFile:=False;
NormalWork:=True;
ErrorByte:=0;
WriteLn;
WriteLn («ArcHaf version 1.0 © Copyright VVS Soft Group, 1992. »);
ResetArchiv;
If NormalWork then.
begin.
St:=ParamStr (1);
Case St[1] of.
" a ", «A »: PakFile;
" m ", «M »: begin.
DeleteFile:=True;
PakFile;
end;
" e ", «E »: UnPakFile;
else ;
end;
end;
CloseArchiv;
end.
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
ΠΠ»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ Ρ ΡΠ°ΠΉΡΠ° internet.