ال زد دابلیو

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

الگوریتم‌های فشرده سازی زیادی وجود دارد که از یک واژه نامه استفاده می‌کنند، این واژه نامه برای رمزگذار و رمزگشا شناخته شده‌است و در طی عمل رمزگذاری و رمزگشایی تولید می‌شود. بیشتر این الگوریتم‌ها روی الگوریتم LZ بنا شده‌است. الگوریتم LZ توسط Abraham Lampel و Jacob Ziv در سال ۱۹۶۷ ارائه شد که با نام رمزگذار Lampel-Ziv شناخته شده‌است. این کدگذاری رخدادهای تکراری یک رشته را با ارجاعی به نزدیکترین رخداد جایگزین می‌کند، واژه نامه این الگوریتم فقط شامل مجموعه‌ای از این رخدادهای تکراری است. یکی از مواردی در آن از الگوریتم LZ استفاده زیادی شده‌است، الگوریتم LZW می‌باشد که توسط Terry A.Welch در سال ۱۹۸۴ ارائه شد. LZW الگوریتم مورد استفاده در بسیاری از نرم‌افزارهای عمومی فشرده سازی اطلاعات مانند pkzip و gzip می‌باشد این الگوریتم بدین منظور طراحی شده که تعداد بیت‌هایی که به دیسک فرستاده می‌شود یا از دیسک خوانده می‌شود کمتر کند. همچنین از این الگوریتم در بسیاری از زمینه‌ها مانند برنامه‌های فشرده سازی GIF برای تصاویر استفاده می‌شود که به طور میانگین حجم تصویر را به یک سوم کاهش می‌دهد. الگوریتم LZW یک الگوریتم برگشت پذیر(reversible) است، بدین معنی که الگوریتم هیچ اطلاعاتی را از دست نمی‌دهد و رمزگشا قادر خواهد بود داده اولیه را عیناً بازسازی نماید. قدرت فشرده سازی این الگوریتم از خیلی الگوریتم‌های فشرده سازی مشهور همچون الگوریتم کدگذاری هافمن بیشتر است.

رمزگذاری و رمزگشایی[ویرایش]

به عنوان مثال جمله زیر را در نظر بگیرید:

itty bitty bit bin

اولین محتوای واژه نامه کدهای کاراکتری ۸ بیتی با مقادیر ۰ تا ۲۵۵ هستند که همان مقادیر کد ASCII می‌باشند. کاراکترهایی که در جمله فوق وجود دارند به همراه کد آن‌ها در جدول شماره ۱ آمده‌است.

کد کاراکتر
۳۲ space
۹۸ b
۱۰۵ i
۱۱۰ n
۱۱۶ t
۱۲۱ y

جدول ۱: واژه نامه LZW مثال ۱

کد ۲۵۶ در واژه نامه برای دستور “Clear Dictionary” و کد ۲۵۷ برای “End of transmission”در نظر گرفته می‌شود. در طی عمل رمزگذاری و رمزگشایی فیلدهای جدید واژه نامه ساخته می‌شوند که از همه عبارات موجود در متن که در واژه نامه نیستند استفاده می‌کند.

الگوریتم رمزگذاری[ویرایش]

الگوریتم کاراکترها را متراکم کرده و در واژه نامه به جای کاراکتر، رشته‌های متراکم شده را قرار می‌دهد تا اینکه به رشته‌ای برسد که در واژه نامه قرار دارد. هر رشته‌ای که به واژه نامه فرستاده می‌شود، آخرین کاراکتر آن به عنوان اولین کاراکتر رشته بعدی می‌باشد. وقتی که این الگوریتم روی رشته‌ای که مثال زدیم اجرا می‌شود، اولین کاراکتر “i” است و رشته فقط از کاراکترهایی تشکیل شده‌است که هم اکنون در واژه نامه هستند، بنابراین کاراکتر بعدی به انتهای “i” اضافه می‌شود و رشته متراکم “it” را تشکیل می‌دهد که این رشته در واژه نامه نمی‌باشد، پس رشته “it” به واژه نامه اضافه می‌شود واولین مقدار (شماره کد) در دسترس که ۲۵۸ است را می‌گیرد. آخرین کاراکتررشته متراکم “t” می‌باشد که درواژه نامه هست، کاراکتر بعدی(“t”) به انتهای “t” اضافه می‌شود و رشته متراکم “tt” را تشکیل می‌دهد که این رشته نیز درواژه نامه نیست، پس به واژه نامه افزوده می‌شود. فرایند به همین ترتیب تکرار می‌شود. برای مدتی در شروع کار رشته‌های اضافه شده به واژه نامه ۲ کاراکتری هستند و با هر کاراکتر جدید که برخورد می‌کنیم یک رشته به واژه نامه فرستاده می‌شود. اولین دفعه که یکی از رشته‌های دوکاراکتری تکرار شود، یک رشته ۳ کاراکتری جدید به واژه نامه فرستاده می‌شود. در این مثال این مورد با رشته “itt” اتفاق می‌افتد.(البته در اینجا مثال را طوری طراحی کرده‌ایم که این اتفاق نسبت به حالات عادی زودتر رخ دهد.) در ادامه در این مثال یک رشته ۴ کاراکتری نیز به واژه نامه فرستاده می‌شود.

الگوریتم رمز گشایی[ویرایش]

برا ی هر کد تبدیل یک محتوای جدید در واژه نامه تعریف می‌کنیم، برای رمزگشایی از هر قلم واژه نامه کاراکتر آخر راحذف کرده و در خروجی می‌نویسیم(آخرین کاراکتر از آخرین محتوای واژه نامه نیز به خروجی فرستاده می‌شود.) در شکل ۱ نحوه رمزگذاری و رمزگشایی مثال ۱ به طور کامل نشان داده شده. آیا با اعمال انجام شده تعداد بیت‌ها کاهش یافته‌است؟ در پاسخ به این سوال همانطور که در شکل ۱ مشاهده می‌کنیم ما ۱۸ کاراکتر ۸ بیتی (یعنی ۱۴۴ بیت) را به ۱۴ کاراکتر ۹ بیتی (یعنی ۱۲۶ بیت) تبدیل کرده‌ایم، یعنی حتی برای این مثال خیلی کوچک ۱۲٫۵ درصد صرفه جویی در حافظه داشته‌ایم. برای رشته‌های زیر ۵۰۰ بایت کاهش بیشتر از این مقدار نداریم. درعمل اغلب فایل‌های متنی بزرگ با ضریب ۲ و تصاویر با ضریبی بیشتر از این فشرده می‌شوند.
Lzw.jpg

منابع[ویرایش]

  • یوسفی، جواد. «[Programming.Blogpars.Com.pdf الگوریتم فشرده‌سازی LZW] فرمت (PDF)». ۱۳۸۹.