تالار گفتمان مانشت
کد هافمن - نسخه‌ی قابل چاپ

کد هافمن - Sanazzz - 03 اردیبهشت ۱۳۹۸ ۰۴:۲۰ ب.ظ

سلام
میشه در مورد این سوال کمکم کنین ممنون میشم
[تصویر:  467672_i3td_p_20190423_155418_vhdr_on_1.jpg]
جوابش رو گفته گزینه فقط ب
من یه مدل کوچیکشو برای خودم کشیدم ولی درست در نیومد
[تصویر:  467672_d3gh_p_20190423_155541_vhdr_on_1.jpg]
من میگم چون هر کارکتر ۸ بیتی و ما اینجا سر جمع ۱۵ تا کاراکتر داریم تعداد بیت لازم برای قبل از فشرده سازی میشه ۱۵×۸=۷۵
و برای حالت بعد از فشرده سازی از فرمول عمق هر کاراکتر ×فراوانی هر کاراکتر= تعدادکل بیت لازم برای کاراکتر استفاده کردیم که برای کاراکتر a جوابش ۵ برای کاراکتر b جوابش ۶ و برای کاراکتر c جوابش ۸
ولی الان نمیدونم اینکه هر کاراکتر ۸ بیت رو چجوری باید برای حالت بعد از فشرده سازی حساب کنم
خواهشا کمک کنین
ممنون میشم

RE: کد هافمن - ph0en1x - 03 اردیبهشت ۱۳۹۸ ۰۸:۲۷ ب.ظ

(۰۳ اردیبهشت ۱۳۹۸ ۰۴:۲۰ ب.ظ)Sanazzz نوشته شده توسط:  سلام
میشه در مورد این سوال کمکم کنین ممنون میشم
[تصویر:  467672_i3td_p_20190423_155418_vhdr_on_1.jpg]
جوابش رو گفته گزینه فقط ب
من یه مدل کوچیکشو برای خودم کشیدم ولی درست در نیومد
[تصویر:  467672_d3gh_p_20190423_155541_vhdr_on_1.jpg]
من میگم چون هر کارکتر ۸ بیتی و ما اینجا سر جمع ۱۵ تا کاراکتر داریم تعداد بیت لازم برای قبل از فشرده سازی میشه ۱۵×۸=۷۵
و برای حالت بعد از فشرده سازی از فرمول عمق هر کاراکتر ×فراوانی هر کاراکتر= تعدادکل بیت لازم برای کاراکتر استفاده کردیم که برای کاراکتر a جوابش ۵ برای کاراکتر b جوابش ۶ و برای کاراکتر c جوابش ۸
ولی الان نمیدونم اینکه هر کاراکتر ۸ بیت رو چجوری باید برای حالت بعد از فشرده سازی حساب کنم
خواهشا کمک کنین
ممنون میشم

مشکل اینجاست که شما حالتی که در نظر گرفتید با صورت سوالی که داده شده تطابق نداره.
برای اینکه مدل کوچیک شده شما با صورت سوال مطابقت داشته باشه باید تعداد نوع کاراکترها توانی از ۲ باشه؛ این حالتو در نظر بگیرید:
یک فایل متنی متشکل از ۸ نوع کاراکتر ۳ بیتی
حالا بدترین حالت هافمن زمانی اتفاق میفته که فراوانی کاراکتر‌ها نزدیک به هم باشه و تمام کاراکتر‌ها تو یه سطح قرار بگیرن و در این صورت یه درخت کامل تشکیل میشه که هر کاراکتر دارای کد ۳ بیتی تو هافمن میشه که برابر میشه با حالت بدون فشرده‌سازی.
حالا گزینه فقط ب این حالت رو بیان میکنه. یعنی اگه بیشترین فراوانی، کمتر از دوبرابر کمترین فراوانی باشه حالتی پیش میاد که تمام کاراکتر‌ها تو یه سطح قرار می‌گیرن و اون حالتی که گفتم پیش میاد.

RE: کد هافمن - Sanazzz - 04 اردیبهشت ۱۳۹۸ ۰۳:۴۷ ب.ظ

(۰۳ اردیبهشت ۱۳۹۸ ۰۸:۲۷ ب.ظ)ph0en1x نوشته شده توسط:  
(03 اردیبهشت ۱۳۹۸ ۰۴:۲۰ ب.ظ)Sanazzz نوشته شده توسط:  سلام
میشه در مورد این سوال کمکم کنین ممنون میشم
[تصویر:  467672_i3td_p_20190423_155418_vhdr_on_1.jpg]
جوابش رو گفته گزینه فقط ب
من یه مدل کوچیکشو برای خودم کشیدم ولی درست در نیومد
[تصویر:  467672_d3gh_p_20190423_155541_vhdr_on_1.jpg]
من میگم چون هر کارکتر ۸ بیتی و ما اینجا سر جمع ۱۵ تا کاراکتر داریم تعداد بیت لازم برای قبل از فشرده سازی میشه ۱۵×۸=۷۵
و برای حالت بعد از فشرده سازی از فرمول عمق هر کاراکتر ×فراوانی هر کاراکتر= تعدادکل بیت لازم برای کاراکتر استفاده کردیم که برای کاراکتر a جوابش ۵ برای کاراکتر b جوابش ۶ و برای کاراکتر c جوابش ۸
ولی الان نمیدونم اینکه هر کاراکتر ۸ بیت رو چجوری باید برای حالت بعد از فشرده سازی حساب کنم
خواهشا کمک کنین
ممنون میشم

مشکل اینجاست که شما حالتی که در نظر گرفتید با صورت سوالی که داده شده تطابق نداره.
برای اینکه مدل کوچیک شده شما با صورت سوال مطابقت داشته باشه باید تعداد نوع کاراکترها توانی از ۲ باشه؛ این حالتو در نظر بگیرید:
یک فایل متنی متشکل از ۸ نوع کاراکتر ۳ بیتی
حالا بدترین حالت هافمن زمانی اتفاق میفته که فراوانی کاراکتر‌ها نزدیک به هم باشه و تمام کاراکتر‌ها تو یه سطح قرار بگیرن و در این صورت یه درخت کامل تشکیل میشه که هر کاراکتر دارای کد ۳ بیتی تو هافمن میشه که برابر میشه با حالت بدون فشرده‌سازی.
حالا گزینه فقط ب این حالت رو بیان میکنه. یعنی اگه بیشترین فراوانی، کمتر از دوبرابر کمترین فراوانی باشه حالتی پیش میاد که تمام کاراکتر‌ها تو یه سطح قرار می‌گیرن و اون حالتی که گفتم پیش میاد.

بی نهایت تشکر
وااقعا ممنونممممممم
دوباره نوشتم درست شد
واقعا ممونمممم
[تصویر:  467724_kz0x_p_20190424_154918_vhdr_on_1.jpg]