سورس کد الگوریتم هافمن (Huffman) در سی پلاس پلاس ++C

الگوریتم هافمن (Huffman) یکی از الگوریتم های فشرده سازی می باشد که این روش بوسیلهٔ دیوید هافمن توسعه یافت. وی دانشجوی دورهٔ دکتری در دانشگاه MIT بود و در سال ۱۹۵۲ مقالهٔ «روشی برای تولید کدی با کمترین تکرار » را منتشر کرد. در الگوریتم هافمن با توجه به تکرار کارکترها کد باینری به آن ها تعلق می گیرد بدین صورت که برای کاراکترهای با تعداد تکرار بالا کدهای کوتاه و برای کاراکترهای با تکرار کم کدهای با طول بالا. این شیوه در نهایت منجر به ایجاد ساختاری از بیت ها برای ذخیره سازی می شود که فضای کمتری را نسبت به روش های معمولی اشغال می کند.

به بیان دیگر یا علمی تر می توان گفت در کدگذاری هافمن، از روشی خاص برای انتخاب نحوهٔ نمایش هر نماد استفاده می‌شود. یعنی در این روش رشته‌ای که نشان دهندهٔ یک کاراکتر خاص است هیچ گاه پیشوند رشتهٔ دیگر که نمایانگر نویسهٔ دیگر است، نمی‌باشد. در این روش کاراکترهای پرکاربردتر با رشته‌های بیتی کوتاهتری نسبت به آن‌هایی که کاربردشان کمتر است، نشان داده می‌شوند. دیوید هافمن روشی که کارآمدترین کد برای فشرده سازی از این نوع را می سازد طراحی کرد.

 

تشریح الگوریتم هافمن

فرض کنید می خواهید تکه اطلاعات زیر رافشرده کنید:

ACDABA

از آنجایی که 6 کاراکتر داریم، این متن 6 بایت یا 48 بیت می باشد. (یعنی برای هر کاراکتر یک بایت ) با رمز گزاری هافمن، فایل برای بیشترین تکرار ظاهر شدن کاراکترها(در این مثال نماد A سه بار تکرار می شود) جستجو می شود و سپس یک درخت ساخته می شود که کاراکترها را با رشته بیت های کوتاه تر جایگزین می کند. در این حالت خاص الگوریتم از جدول جایگزینی زیر استفاده می کند:

A=0 , B=10 , C=110 , D=111.

اگر این کد برای فشرده سازی فایل استفاده شود، اطلاعات فشرده شده به صورت زیر در می آیند:

01101110100

این به این معنی است که 11 بیت به جای 48 بیت مصرف می شود. کد گذاری به روش هافمن، روشی است برای بهینه سازی مقدار حجم استفاده شده برای نگهداری داده های معلوم است.

مراحل روش هافمن

  1. چگالی هر کاراکتر را محاسبه میکنیم (تعداد دفعات حضور کاراکتر در متن مورد نظر).
  2. دو کاراکتر با کمترین میزان تکرار (چگالی) را انتخاب میکنیم.
  3. کاراکتر های مرحله 2 را با کاراکتر جدیدی که دارای چگالی برابر با مجموع چگالی دو کاراکتر فوق است جایگزین میکنیم.
  4. تا زمانی که فقط یک کاراکتر باقی مانده باشد، به مرحله 2 میرویم.
  5. از عملیات فوق یک درخت حاصل می شود، بر روی این درخت هر مسیر به سمت چپ با 0 و هر مسیر به سمت راست با 1 وزن دهی میشود.
  6. کد هر کاراکتر با کنار هم گذاشتن وزن ها از ریشه تا آن کاراکتر به دست می آید.

در الگوریتم هافمن مسئله ادغام د ودويي فايل ها استفاده می شود که جهت فشرده سازی فايل ها يا ارسال کم حجم تر اطلاعات بر روی خطوط شبکه مورد استفاده قرار مي گيرد . در ابتدا يك جدول درنظر مي گيريم در ستون ابتدايي مقادير (داده ها) را وارد مي كنيم در ستون دوم تعداد تكرار داده ها را محاسبه كرده و براساس آن درخت مي سازيم سپس يال هاي چپ را صفر و يال هاي راست را يك .در ستون آخر جدول كدهاي جديد را که برچسب يالهای درخت حاصله از ريشه تا هر برگ است را درج مي كنيم. اين برچسب ها را كدينگ هافمن مي ناميم. برچسب های جديد کدهای جايگزين کدهای قبلی خواهند شد که در فشرده سازی فايل ها حجم کمتری را به خود اختصاص مي دهد . جهت بازگرداندن فايل به حالت اوليه نيز از برعکس همين روش مي توان استفاده کرد.

مثالی از نحوه ساختن درخت هافمن

فایل متنی زیر را در نظر بگیرید

xxyzpxxsxyyxpyzrrrzxxqyttq

در این متن تعداد کلمات تکرار شده را مطابق جدول زیر بدست می آوریم.

کد گذاری هافمن

نمودار درخت هافمن بصورت زیر خواهد بود. که از fi های کوچک باهم جمع شده و تا ریشه درخت ادامه پیدا می کند.

کد هافمن

سپس سمت چپ با صفر و سمت راست با یک برچسب گذاری می شود و در نهایت برای پیدا کردن کد یک کاراکتر از ریشه به سمت آن کاراکتر در برگ پی می رویم. جدول زیر کد تولید شده را نشان می دهد.

رمزنگاری هافمن

فضای مصرفی در روش معمولی:

26×8=208 bit

فضای مصرفی در روش هافمن:

∑ fi ×n=16+10+9+8+4+9+8+8=72  bit

کد الگوریتم هافمن در ++C

  1. یک رشته را بعنوان ورودی میگیرد آنرا به لیستی از CharInfo تبدیل می کند.
  2. لیست را بر اساس فراوانی sort میکند (صعودی)
  3. با دو عضو اول لیست یک درخت تشکیل میدهد بطوریکه نود والد جمع دو نود فرزند باشد.
  4. دو عضو بعدی لیست را انتخاب میکند وبرای انجام مرحله بعدی یک شرط را بررسی میکند.
  5. توضیح شرط: اگر فراوانی تک تک این دو عضو از مجموع فراوانیهای دو نود ساخته شده در مرحله قبل کمتر باشد تشکیل یک زیردرخت جدید می دهد و درصورت برقرار نبودن شرط تنها یک عضو از لیست انتخاب کرده و با توجه به فراوانی آن تشخیص میدهد که آنرا در سمت چپ درخت قبلی قرار دهد یا در سمت راست.
  6. به همین منوال درخت پوشای مینیمم تشکیل می شود.

تکه کد تابع اصلی یا Main الگوریتم در سی پلاس پلاس بصورت زیر است:

برای دانلود کامل کد محصول را خریداری نمایید.

 

ویدئوی معرفی محصول

 

در باره محصول

سورس کد الگوریتم هافمن در سی پلاس پلاس با استفاده از Borland ++c نوشته شده است و بصورت کامل توسط گروه پشتیبانی پی استور تست و اجرا شده است محصول دارای نشان تضمین کیفیت پی استور می باشد. برای دانلود محصول آن را خریداری کنید.

15,000 تومان

1 دیدگاه برای سورس کد الگوریتم هافمن (Huffman) در سی پلاس پلاس ++C

  1. امتیاز 5 از 5

    programstore

    نظرات و دیدگاه های خود را با ما درمیان بگذارید.

دیدگاه خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

اطلاعات فروشنده