PDA

View Full Version : LZW



fazel-d
پنج شنبه 22 اسفند 1387, 19:47 عصر
این الگوریتم فشرده سازی رو کسی می دونی ؟

BOB
دوشنبه 26 اسفند 1387, 08:52 صبح
سلام

LZW مخفف Lempel-Ziv-Welch است.

الگوريتم و شرح:
http://en.wikipedia.org/wiki/Lempel-Ziv-Welch
http://marknelson.us/1989/10/01/lzw-data-compression/

پياده‌سازي در جاوا:
http://www.codeproject.com/KB/java/lzw.aspx

اجتناب از آن:
http://www.frugalcorner.com/lzw/lzwfree.html

fazel-d
یک شنبه 06 اردیبهشت 1388, 18:23 عصر
در مورد این الگوریتم / واقعا توضیحات مختصر بود. ولی می شد چیز هایی رو هم فهمید.
سوال1 : این نوع از الگوریتم > فشرده سازی بر روی محتوای فیل را دارند یا اصل فایل ( همراه Header و ...)؟

سوال2 : LZW دارای یک Knowledge base هست که یک سری از حروف به طور پیش فرض در داخل آن است.این Table چگونه و در کجای فایل فشرده شده قرار می گیره؟

fazel-d
چهارشنبه 09 اردیبهشت 1388, 19:54 عصر
جوابی براش نیست
خواهشا پست ها رو رها نکنید.

fazel-d
شنبه 12 اردیبهشت 1388, 18:09 عصر
به نظر می یاد کسی این تایپیک رو سر نمی زنه!!!!

afsharan
دوشنبه 05 مرداد 1388, 09:01 صبح
من به اين الگوريتم احتياج دارم لطفا راهنمايي كنيد نحوه دي كد كردن

fazel-d
شنبه 10 مرداد 1388, 20:30 عصر
در مورد فشرده سازی:

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 ذخیره شود

Ebrahim.Javan
جمعه 17 خرداد 1392, 06:59 صبح
از مطالبتون استفاده کردم ... من می خوام الگوریتم lzw به زبان c# پیاده سازی کنم . اما نمی دونم باید از کجا شروع کنم .. مثلا اطلاعات تویه دیکشنری باید فرق گذاشت بین حروف بزرگ یا کوچیک یا نه ؟ .....