در مورد فشرده سازی:
w = NIL;
while ( read a character k )
{
if wk exists in the dictionary
w = wk;
else
add wk to the dictionary;
output the code for w;
w = k;
}
ذر ابتدا می بایست فایل رو به صورت کاراکتر به کاراکتر بخوانید. 2 متغییر اصلی به نام های w و k وجود دارد.
شرح الگوریتم:
در ابتدا w=Null است و در یک حلقه هر کاراکتری که خوانهده می شود در متغییر k قرار می گیرد. در شرط IF بررسی می شود که w+k در دیکشنری وجود دارد یا نه! ( دیکشنری یک فضا در memory شماست . مثلا یک آرایه نامحدود که آرایه شما به صورت دو بُعدی است. یک بعد آن کد اسکی و در مقابل آن یعنی بُعد دوم اون رشته کاراکتری)
حالا بعد از بررسی w+k ، اگر در دیکشنری رشته W+k وجود داشته باشد w=w+k می شود. در غیر این صورت w+k در انتهای دیکشنری اضافه می شود و یک کد درج میشود( کدی که باید قرار گیرد مثلا از 256 شروع می شود ، چرا که از کد 0 تا 255 به صورت رزرو شده هستند مثل کاراکتر های a-z یا ...)
در خط output the code for w; مقدار w در فایل ذخیره شده و در پایان w=k می شود و این روند تا پایان فایل ادامه می یابد.
نکته: این الگوریتم (LZW) یک الگوریتم با طول ثابت است. یعنی باید بزرگترین کد در دیکشنری یافته شده و طول مابقی کاراکتر ها بر اساس تعداد بیتهایی که بزرگترین عدد به خود اختصاص می دهد ، قرار گیرد. این مطلب رو با یه مثال توضیح می دهم. فرض کنید که در دیگشنری مقادیر AB با کد 256 وجود دارد. 256 دارای 9 بیت است . حال باید تمامی رشته های موجود در دیکشنری مثلا کاراکتر A که 8 بیت است به صورت 9 بیت در فایل Comperssion ذخیره شود