LZW عبارتهایِ تکرارشونده را هنگامِ خواندنِ همان پیام در یک فرهنگِ تطبیقی ثبت میکند و شمارهٔ عبارتها را میفرستد. گیرنده هم فرهنگ را از رویِ کدها بازسازی میکند. این تمرینِ کوچک، شمارههایِ صحیح و مسیرِ ساختِ دو فرهنگ را نشان میدهد؛ قالبِ فایلِ فشرده یا جریانِ بیتیِ استاندارد تولید نمیکند.
از دو نمادِ معلوم شروع کنیم
الفبایِ ما فقط A وB است و فرهنگِ اولیه A→۰ وB→۱ دارد. پیامِ اصیلِ اصلی ABABABA است. رمزگذار یک عبارتِ جاری نگه میدارد و با هر نمادِ تازه میسنجد آیا عبارتِ بلندتر در فرهنگ هست یا نه.
اگر ترکیب موجود باشد، عبارت را ادامه میدهد. اگر نباشد، کدِ عبارتِ قبلی را خروجی میدهد، ترکیبِ تازه را با شمارهٔ بعدی ثبت میکند و عبارتِ جاری را از نمادِ تازه شروع میکند. عبارتِ باقیمانده در پایان هم کد میشود؛ گیرنده به نسخهٔ پنهانِ پیامِ اصلی دسترسی ندارد.
کدهایِ پیامِ هفتنمادی
در اجرایِ اصلی، AB با شماره۲،BA با۳ وABA با۴ ساخته میشوند. خروجیِ کدها [۰،۱،۲،۴] است. دفترِ encoder_additions برای هر گام، عبارتِ خروجی، کد و ورودیِ تازهٔ فرهنگ را ثبت میکند. کدِ ۴ یک حرفِ تازه نیست؛ به عبارتِ چندنمادیِ ABA اشاره میکند.
این شمارهها را به تعدادِ بیتِ فایل تبدیل نمیکنیم. اگر قالبی عرضِ ثابت،افزایشی،نشانگرِ پایان یا resetِ فرهنگ داشته باشد، آن قرارداد هم باید محاسبه شود. کمترشدنِ تعدادِ عددها نسبت به تعدادِ نمادها بهتنهایی نسبتِ فشردهسازیِ یک فایلِ کامل نیست.
گیرنده چگونه فرهنگ را عقببهعقب میسازد؟
رمزگشا از همان دو ورودیِ اولیه شروع میکند. پس از دریافتِ هر عبارتِ تازه، عبارتِ قبلی بهعلاوهٔ اولینِ نمادِ عبارتِ تازه را به فرهنگ میافزاید. این کار از رویِ کدهایِ دریافتی انجام میشود، نه با خواندنِ فرهنگِ کاملِ رمزگذار از کنارِ کانال.
در پایانِ هر نمونه، فرهنگِ دو طرف هم مقایسه میشود و برابر است. جزئیاتِ ورودِ یک عبارت در دو سمت میتواند در لحظههایِ متفاوت رخ دهد؛ کافی نیست در ابتدا همهٔ عبارتهایِ پیام را آماده کنیم و بعد رمزگشاییِ «تطبیقی» اعلام کنیم.
شاخهٔ ویژهٔ کدِ بعدی
گاهی کدِ دریافتی دقیقاً شمارهٔ ورودیِ بعدیِ فرهنگ است و هنوز در جدولِ گیرنده نیست. در این حالتِ محدود، عبارت برابرِ عبارتِ قبلی بهعلاوهٔ اولینِ نمادِ خودش ساخته میشود. در ABABABA، هنگامِ دریافتِ ۴، عبارتِ قبلی AB است وABA بازسازی میشود.
برای AAAA نیز کدها [۰،۲،۰] هستند و همین شاخه واقعاً فعال میشود. کدِ بزرگتر از شمارهٔ بعدی، یا اولینِ کدِ ناموجود بدونِ عبارتِ قبلی، این مجوز را ندارد و رد میشود. شاخهٔ ویژه به معنیِ قبولِ هر شمارهٔ ناشناخته نیست.
همهٔ پیامهایِ کوچک را رفتوبرگشت کنیم
تمامِ ۲۵۵رشتهٔ A/B با طولِ صفر تا۷ کد و مستقل رمزگشایی میشوند؛ متنِ حاصل با اصل و فرهنگهایِ نهایی با هم برابرند. پیامِ خالی به فهرستِ کدِ خالی و دوباره به متنِ خالی برمیگردد. ABBAAB و پیامِ تکنمادی نیز در گزارشِ مثالها حضور دارند.
هفت آزمونِ نامعتبر، نمادِ بیرونِ الفبا، متنِ طولانی، اولینِ کدِ ناموجود، کدِ آینده، بولین، کدِ منفی و خروجیِ بیش از بودجه را رد میکنند. قراردادِ محلی حداکثر۱۶نمادِ پیام،۱۶عددِ کد و۱۶نمادِ بازسازیشده است؛ محدودیتِ خروجی جلویِ بازکردنِ نامحدودِ همین مدلِ آموزشی را میگیرد.
هافمن کدِ پیشوندیِ نمادبهنماد از فراوانیها میسازد؛ اینجا فرهنگِ عبارتها رشد میکند. اجرایِ Javaِ منبع،bit packing وEOF در این فایل انجام نشدهاند و رمزگذاری برای محرمانگی هم نیست. ادامه در مبانی هوش مصنوعی؛ این تمرین دربارهٔ کدک یا اندازهٔ فایلِ صوتیِ محصولاتِ اپرا شاهدی نمیدهد.
فایل تمرین و منبع
کد مستقلِ تمرین و کنترلها؛ Python · تمامِ ورودیها و نتیجهٔ اجرای واقعیِ تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.