PDA

View Full Version : محاسبه میزان صرفه جویی در الگوریتم فشرده سازی هافمن



mehdikhazaei
سه شنبه 20 تیر 1391, 07:30 صبح
یک تکست باکس داریم و می خواهیم ببینیم برفرض از 34تا حرف وارد شده چندتا حرف و چندبار در تکست باکس وارد شده اند؟

aaaabbbbbcccccccccdddddggggggggggg

4تا a
5تا b
9تا c
5تا d
11تا g

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

the king
سه شنبه 20 تیر 1391, 15:54 عصر
در الگوریتم فشرده سازی هافمن مواردی که برای باز کردن داده فشرده لازمه صرفا داده فشرده شده نیست، جدول بیت های معادل هر کاراکتر هم هست،
به همین جهت چیزی که الان محاسبه میشه صرفا مقایسه حجم داده خالص فشرده شده است با حجم داده غیر فشرده، چیزی که به دست میاد مقدار بایت های
صرفه جویی شده نیست، چون باید حجم جدول هم از این مقدار بدست آمده کسر بشه، شاید بجای صرفه جویی حجیم تر هم بشه.

متغیر n تعداد کاراکتر ها است و اگه یک listBox1 روی فرم قرار دهید تعداد نمونه های هر کاراکتر رو هم نشون میده.

string inputText = "aaaabbbbbcccccccccdddddggggggggggg";
Dictionary<char, int> chars = new Dictionary<char, int>();
foreach (char c in inputText)
{
if (chars.ContainsKey(c) == false)
{
chars.Add(c, 1);
}
else
{
chars[c]++;
}
}
int n = chars.Count;
Dictionary<char, int>.KeyCollection charKeys = chars.Keys;
foreach (char c in charKeys)
{
listBox1.Items.Add(c.ToString() + " " + chars[c].ToString());
}