کدگذاری هافمن: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
AliBot (بحث | مشارکت‌ها)
جز ربات:اصلاح فاصلهٔ مجازی
خط ۵۷:
در کد کذاری هافمن، از روشی خاص برای انتخاب نحوهٔ نمایش هر نماد استفاده می‌شود. روشی به نام [[کدهای بدون پیشوند]](گاهی هم روش «کدهای پیشوندی» گفته می‌شود. یعنی در این روش رشته‌ای که نشان دهندهٔ یک کاراکتر خاص است هیچ گاه پیشوند رشتهٔ دیگر که نمایانگر کاراکتری دیگر است، نمی‌باشد.).در این روش کاراکترهای پرکاربرد تر با رشته‌های بیتی کوتاهتری نسبت به آن‌هایی که کاربردشان کمتر است، نشان داده می‌شوند.
 
هافمن موفق شد کارآمد ترینکارآمدترین روش فشرده سازی از این نوع را طراحی کند:
نگاشت نکردن نشان‌های منفرد مبدا به رشته‌های بیتی یکتا، هرگاه تعداد تکرار نمادهای اصلی با آنهایی که برای ایجاد این کد مورد استفاده قرار گرفتند مطابقت کند، خروجی‌هایی با اندازهٔ کمتر تولید می‌کند.
بعدها روشی برای انجام این کار پیدا شد که این کار را در [[زمانی خطی]] انجام می‌داد.
خط ۷۱:
== تاریخچه ==
 
در سال ۱۹۵۱ [[David.A.Huffman]] و هم شاگردی‌هایش در کلاس «تئوری اطلاعات» دانشگاه MIT، حق انتخاب بین تحقیق در مورد یک مفهوم یا دادن امتحان پایانی را داشتند.استاد [[Robert M. Fano]] موضوع تحقیق را مسالهٔ پیدا کردن کارآمد ترینکارآمدترین کد دودویی تعیین کرد.
هافمن ناتوان در پیدا کردن کارآمد ترین، تصمیم گرفته بود خودش را برای امتحان پایانی آماده کندکه ایده‌ای به ذهنش رسید.
ایدهٔ استفاده از درخت دودیی مرتب شده بر حسب تکرار(frequency) وتوانست اثبات کند که این کارآمد ترینکارآمدترین روش است.
در انجام این کار، شاگرد از استادش که با مبدع تئوری اطلاعات، [[Claude Shannon]] برای ساختن کدی مشابه کار کرده بود، پیشی گرفت.
هافمن از مشکل اصلی روش کدگذاری نیم بهینهٔ [[Shannon-Fano coding]] جلوگیری کرده، درخت را به جای ساختن از بالا به پایین، از پایین به بالا ساخت.
خط ۸۶:
 
تاریخچه
در سال ۱۹۵۱ David.A.Huffman و هم شاگردی‌هایش در کلاس «تئوری اطلاعات» دانشگاه MIT، حق انتخاب بین تحقیق در مورد یک مفهوم یا دادن امتحان پایانی را داشتند.استاد Robert M. Fano موضوع تحقیق را مسالهٔ پیدا کردن کارآمد ترینکارآمدترین کد دودویی تعیین کرد. هافمن ناتوان در پیدا کردن کارآمد ترین، تصمیم گرفته بود خودش را برای امتحان پایانی آماده کندکه ایده‌ای به ذهنش رسید. ایدهٔ استفاده از درخت دودیی مرتب شده بر حسب تکرار(frequency) وتوانست اثبات کند که این کارآمد ترینکارآمدترین روش است. در انجام این کار، شاگرد از استادش که با مبدع تئوری اطلاعات، Claude Shannon برای ساختن کدی مشابه کار کرده بود، پیشی گرفت. هافمن از مشکل اصلی روش کدگذاری نیم بهینهٔ Shannon-Fano coding جلوگیری کرده، درخت را به جای ساختن از بالا به پایین، از پایین به بالا ساخت.
 
== انواع ==
خط ۱۱۲:
 
=== کد هافمن با ارزش حرفی متفاوت ===
در کد گذاری استاندارد هافمن، فرض شده است که هر نماد در مجموعه‌ای که کد هاکدها از آن استخراج می‌شوند،ارزشی یکسان با بقیه دارد: کد کلمه‌ای که طول آن ''N'' است ارزشی برابر ''N'' خواهد داشت ،مهم نیس که چند رقم آن 1 و چند رقم آن 0 است.
وقتی با این فرض کار می کنیم، کم کردن هزینهٔ کلی پیام ، با کم کردن تعداد رقم هایرقم‌های کل 2 چیز یکسانند.
''کد هافمن با ارزش حرفی متفاوت'' به نحوی عمومیت یافته که این فرض دیگر صحیح نیست:
حروف الفبای کدگذاری ممکن است طول هایطول‌های غیر همسانی داشته باشند ، به خاطر خصوصیت هایخصوصیت‌های واسطهٔ انتقال.
مثالی بر این ادعا،الفبای کد گذاری [[کد مورس]] است، که در آن فرستادن یک 'خط تیره' بیشتر از فرستادن یک 'نقطه' طول می‌کشد ، پس ارزش خط تیره در زمان انتقال بالاتر است.
درست است که هدف هنوز کم کردن میانگین طول وزنی کد است اما دیگر کم کردن تعداد نماد هاینمادهای بکار برده شده در پیام، به تنهایی کافی نیست.
هیچ الگوریتمی شناخته نشده است که این را به همان روش و همان کارآیی کد قراردادی هافمن انجام دهد.
 
 
=== کد قانونی هافمن ===
اگر وزن هایوزن‌های مربوط به ورودی هایورودی‌های مرتب شده بر اساس الفبا، به ترتیب عددی باشند، کد هافمن طولی برابر طول کد الفبایی بهینه دارد که می‌تواند از طریق محاسبه بدست آید.
کد بدست آمده از ورودی هایورودی‌های مرتب شده از نظر عددی ، ''' کد قانونی هافمن ''' گفته می‌شود و کدی است که به خاطر سادگی رمز کردن و رمز گشایی ،در عمل استفاده می‌شود.
تکنیک پیدا کردن این کد ، اکثرا '''کد گذاری Huffman-Shannon-Fano ''' نامیده می‌شود.
و این به خاطر آن است که مانند کدگذاری هافمن بهینه، ولی در احتمال وزن هاوزن‌ها مانند کد گذاری[[Shannon-Fano coding]] الفبایی است.
کد هافمن Shannon-Fano مربوط به این مثال <math>\{000,001,01,10,11\}</math> است که در آن طول کد کلمه‌ها ، همان مقداری است که در حل اصلی آمده است.