مشاهده نسخه کامل
: الگوريتم هافمن
سلام به همه دوستان
ببخشيد من مي خواستم الگوريتم هافمن رو پياده كنم و از اين طريق عمل فشرده سازي رو انجام بدم.اما متاسفانه بعد از اين كه كد معادل هر حرفي رو (مثلا براي فشرده سازي فايل متني ) بدست آوردم ، كدهاي 3 بيتي يا 5 بيتي و ... ميشه!!!
مثلا اگه بخوام اسم خودم رو كد كنم مثلا اگه
a=10
m=0001
e=11
n=00000
h=00001
b=0110
r=001
z=0111
g=0100
حالا تك تك اينا رو چطور وارد فايل كنم(چطوري تك تك بيتها رو مديريت مي شه كرد)
من نميدونم چه جوري مي شه با تك تك بيتها تو c كار كنم؟؟؟اگه كسي مي دونه كمكم كنه!!!!ممنونم بازم!!!:10::13:
mehdicracker
25-10-2007, 12:22
به نظر می یاد که همه ی عددهارو می شه به 5 بیت تبدیل کرد
پس باید شما خودتون بقیه ی بیت ها رو یه عددی بزارید تا برای عمل فشرده سازی با مشکل مواجه نشید
و البته برای عمل decompress
مثلا می توانید حرف a رو به 10222 تبدیل کنید
یا بین هر حرف یه حرف جدا کننده بزارید مثل ( , ) که در این حالت برای خارج کردن فایل از فشرده سازی
باید بیت هایی رو که بین این علامت ها است جدا کنید و بعد تبدیلش کنید به حرف صحیح
برای کار با بیت ها هم می تونید فایل رو در حافظه load کنید و به استفاده از ادرس اولین حافظه
مقادیر بیت ها رو بخوانید و ....
سلام
ممنون دوست عزيز
اينجا چند تا چيز هست
اول اينكه نمي شه به اين كدها چيزي اضافه كرد ،چون عمل فشرده سازي هست و بايد اين كاراكتر ها كه 8 بيت مي گيره كمترش كنيم،مثلا حرف a كه به طور معمول 8 بيت مي گيره با استفاده از الگوريتم بيت هاش كم شده و 2 بيت شده؛حالا اگه باز بخوام 3 تا بيت خودم اضافه كنم كه ديگه اصلا هدف اصلي كه فشرده سازي هست از بين رفته..:18:
از طرفي اگه فايل رو تو حافظه load كنم و آدرس شروع رو داشته باشم مي تونم 8 تا 8 تا رو بيت ها جلو برم(يا 16 تا 16 تاو ...) حالا چجوري بگم مثلا بيت سوم رو 1 كن ؟مشكلم اينه؟؟؟؟؟؟؟:41:
بازم ممنونم از كمكت...:20:
بي انصافا يكي جواب ما رو بده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟:42::41:
سلام. برای کار با بیت ها باید از عمگر های بیتی | & ^ و عملگر های شیفت دادن >> و << استفاده کنی.ساختار های بیتی و union هم میتونه بیشتر کمک کنه.توضیحش طولانیه میتونی به یه کتاب آموزش C مراجعه کنی.ولی برای مثال که ببینی کلا چطوری هست, اینجا یه char تعریف میکنیم 65 رو میریزیم توش و با استفاده کردن از عملگر | , بیت سوم رو 1 میکنیم و نتیجه رو توی یک char دیگه میریزیم :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نیوشـــــا
08-12-2007, 10:56
می شه کد هافمنت رو پس از تکمیل در سایت بگذاری؟؟؟
واقعا بهش نیازمندم :-)
خواهش می کنم این لطف رو بکن، یا به این میل بفرست
niosha98@yahoo.com
Mehran NZ
08-12-2007, 23:43
دوست عزيز مي تونم از شما بپرسم اين الگوريتمي كه گفتيد رو در چه كتابي مي شه در موردش خوند؟
منظورم اينه كه مثلا درساختمان هاي داده هست يا چيز ديگه اي؟
راستش به اين دليل مي پرسم كه گفتيد ميخوايد برنامه ها رو فشرده سازي كنيد منم خيلي دوست
دارم در اين مورد اطلاعاتي داشته باشم و مثلا اينكه برنامه اي مثل winrar چطور نوشته مي شه
سلام به همه دوستان
من شرمنده همتونم.ببخشید دیر جواب دادم.یه مدت نت نیومدم.
در ارتباط با نیوشا خانم باید بگو چشم رو چشم.حتما کامل کردم بهتون میدم.
اما در جواب چیزی که آقا مهران فرمودند:
این یکی از مسایل داخل کتاب طراحی اگوریتم هست. این سوال رو استادمون برای درس محیط های چند رسانه ای مربوط به فشرده سازی مطرح کرد.اگه الگوریتمشو بدونید میمونه پیاده سازی.
سلام
همون طور که بچه ها گفتند با عملگر های | و & و >> و << می تونید استفاده کنید
توضیح به صورت کاملش در کتاب پاسکال کافمن من دیدم
اگه بخوام تو ضیح بدم(البته با اجازه دوستان عزیزم)
| یعنی یا که مثلا می تونی یه عدد با یه عدد دیگه رو با هم یا بیتی کنی
مثلا
10001001
11100011
-------------
11101011
همون طور که متوجه شدی به ازای 1 ها 1 می شه و فقط در صورتی که هر دو صفر باشن 0 می شه
&
10101010
11010000
-----------
10000000
<<(شیفت به راست)
10010101
<<
01001010
کل عدد ها رو به یک خونه به سمت راست راست انتقال میده و به جای سمت چپ ترن بیت عدد 0 وارد میکنه
و شیفت به چپ بر عکس عمل می کنه
و عدد خروجی از بایت هم توی carry ریخته می شه و می تونی چک کنی که عدد 0 بوده یا 1
در ضمن با هر بار شیفت دادن به راست عدد تقسیم بر 2 و با هر بار شیفت به چپ عدد ضرب در 2 می شه
راستی از یه سری تر فند ها هم می تونی استفاده کنی
مثلا اگه یه بایت رو با 0 &(and) کنی بایتت 0 می شه (شاید بگی خوب با یتم رو مستقیما صفر می کنم اما بعضی جا ها نمی شه از این روش استفاده کرد و با & سرعت برنامه هم بالاتر می ره)
یا یه بایتو با خودش |(یا) کنی شاید به ظاهر هیچی نشه اما اگه Carry رو چک کنی می تونی بفهمی بایتت صفره یا عدد داره
نیوشـــــا
18-12-2007, 11:41
سلام
من کد هافمن رو به طور کامل نوشتم اگه لازم داری برات بفرستم.
سلام
نیوشا جان اگه می شه برام بفرست
abshar_shoorab@yahoo.com
asire-dell
28-12-2007, 00:08
کد گامل الگوریتم هافمن رو می تونید از سایت [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) بگیرید
البته به زبان vb ستش و من چون vb نصب نداشتم نتونستم امتحان کنم.
اگه شما امتحان کردید به من هم خبر بدبد ببینم درست کار می کنه یا نه.
در ضمن من هم احتیاج زیادی به این کد دارم.
در صورت پیدا کردن جواب به من هم بگید.
ممنون.
asire-dell
29-12-2007, 11:31
سلام.
نیوشا جان اگه می شه واسه من هم بفرست.
rgb_13007_83@yahoo.com
asire-dell
30-12-2007, 19:29
من امروز الگوریتمش رو توی کتاب ساختمان داده ها در c جعفر نژادقمی دیدم.
فکر می کنم کامل توضیح داده بود
سلا
بچه ها من مي خوام تعداد تكرار حروف انگليسي رو براي رسم نمودار درختي هافمن پيدا كنم. كسي مي تونه كمكم كنه يا بگه چي سرچ كنم؟ در ضمن آيا براي حروف فارسي هم تعداد تكرارها مشخص شدن يا نه؟
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.