171
mo‘ljallangan dasturlar siqilgan ma’lumotlar bilan ishlashda “berk
ko‘chaga” kirib qolmaydi va ichki siqish shu sabab qulay hisoblanadi.
Lempel-Ziv va Welch (LZW) algoritmi bir qator ma’lumotlar
qiymatlarini
bir qator kodlarga aylantiradi, bu qiymatlarning o‘zi
yoki bir qator qiymatlarni tavsifovchi kodlar bo‘lishi mumkin. Matn
simvollari kabi o‘xshashlikdan foydalanib,
chiqish kodlari belgi
(simvol)lar qatorlarini tavsifovchi belgilar va kodlardan iborat bo‘ladi.
GIF-da ishlatiladigan LZW algoritmi algoritmik jihatdan standart
LZW algoritmi bilan bir xil bo‘lib, quyidagi farqlarga ega:
1. Barcha siqish-kengaytirish va jadval sozlamalarini boshlang‘ich
holatiga qaytaradigan maxsus “tozalash kodi” mavjud. Ushbu kodning
qiymati “tozalash kodi” = 2
ga teng. Misol uchun, agar
4 bo‘lsa kodlash o‘lchami (tasvirdagi har bir piksel 4 bitli kod bilan
ifodalangan), unda tozalash kodi 2
4
=16 (ikkilik sanoq tizimida “10 000”
ga teng). Tozalash kodi ma’lumotlar oqimining istalgan joyida paydo
bo‘lishi mumkin va shuning uchun LZW algoritmidan keyingi kodlarni
yangi ma’lumotlar oqimi boshlangandek qayta ishlashni talab qiladi.
Kodlovchi tozalash kodini har bir tasvir ma’lumot oqimidagi birinchi
kod sifatida chiqarishi kerak.
2. Axborot kodining oxiri aniqlanaydigan tasvir ma’lumotlari
oqimining tugashini aniq ko‘rsatuvchi kod mavjud. Agar LZW bunday
kodga duch kelsa, ishlashni to‘xtatadi. Bu kod tasvir uchun kodlovchi
(koder) tomonidan yaratilgan oxirgi kod bo‘lishi kerak. Ushbu kodning
qiymati “tozalash kodi” +1 ga teng.
3. Siqish kodining birinchi qiymati “tozalash kodi” +2 ga teng.
4. Chiqishdagi natija kodlar uzunligi o‘zgaruvchan bo‘lib, har bir
kod uchun +1 bitdan 12 bitgacha bo‘lishi mumkin.
Shunday qilib, kodning maksimal qiymati 4 095 (o‘n oltilik sanoq
tizimida FFF
16
= 4095
10
) deb belgilangan. LZW-kodning qiymati joriy
kod uzunligidan oshib ketishi bilanoq, kodning xona (bit)si bittaga
oshiriladi. Ushbu kodlarning qadoqlovchi va ochuvchisi yangi kod
uzunligiga mos kelishi uchun o‘zgartiriladi.