Кодирование информации по Алгоритму Хаффмана (Huffman).
Пример Исходного кода на C#.

Учебная программа по алгоритму сжатия и восстановления информации (кодирования и декодирования данных) без потерь на C#.

Суть Алгоритма Хаффмана можно изложить так:
Считаем частоты символов – т.е. количество вхождений каждого символа в исходный текст. Для наиболее часто встречающихся символов назначаем сочетание бит (код) меньшего размера, а по мере уменьшения частот символов в тексте их код будет более длинным.

Для автоматизации подсчета частот символов и назначения кода оптимальной длины используется специальный математический аппарат:

  • создание очереди символов (сортированного списка)
  • создание очереди узлов дерева (каждый символ - это листок, т.е. конечный узел)
  • создание дерева Хаффмана
  • создание таблицы Хаффмана

Для выполнения задачи кодирования используется таблица Хаффмана, а для декодирования - дерево Хаффмана.

Задание:

Написать программу сжатия и восстановления текста, состоящего из символов уникода.
Представить сжатый текст в виде последовательности битов и в виде последовательности символов уникода.

Решение:

C# - работа алгоритма Хаффмана (Huffman) сжатия (кодирования) данных

По органам управления на форме все понятно. Одна кнопка вызывает «метод сжатия» Encode , а вторая обратный метод Decode (восстановление первоначального текста из архива).

Вот так выглядит обработчик события нажатия кнопки «Создание таблицы»:

private void button1_Click(object sender, EventArgs e) //создание таблицы
{
if(textBox1.Text!=""){
    //Строим дерево по строке для кодирования
    codeTree = new hTree(textBox1.Text);

    //Строим таблицу Хаффмана по этому дереву
    codeTable = new hTable(codeTree);   

    //заполнение textBox2 для наглядности
    textBox2.Text="";
foreach(tableNode tn in codeTable){
textBox2.Text=" '"+tn.symbol+"' - "+tn.code+"\r\n"+textBox2.Text;
}       
    }
    else {    MessageBox.Show( "Отсутствует строка для кодирования",    "Внимание!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            textBox2.Text="";
        }
}

В файлах hQueue.cs, hTable.cs, hTree.cs содержатся все необходимые функции для обеспечения работы алгоритма.

Эта программа по алгоритму Хаффмана учебная и очень упрощена. Здесь не рассматривается вопрос передачи сжатой информации... Ведь надо понимать, что для передачи сжатой информации вместе с ней должна передаваться информация позволяющая декодировать ее в исходный текст. Это либо таблица, либо дерево, или хотя бы частоты встречаемости символов...

скачать exe-файл для тестирования (C#)

Имеется проект с точно таким же интерфейсом, но на C++ Visual Studio 2012 .


Условия получения кода?    Показать?




А это еще одна версия программы, демонстрирующая алгоритм Хаффмана, но написанная на С++ Borland Builder 6.0

C++ Builder 6.0 - работа алгоритма Хаффмана (Huffman) сжатия (кодирования) данных

Изменяя текст в первом окне и щелкнув кнопку «Сжатие», Вы увидите произошедшие изменения в частотах символов (окно 5… можете пересчитать, если не верите…), в Таблице Хаффмана (окно2), сжатом тексте (окно 3), последовательности битов сжатого текста (окно 4).

В процессе восстановления текста исходными данными будут являться последовательность битов и значения частот символов… По частотам символов строится дерево Хаффмана и с его помощью из последовательности битов получается первичный текст.

Чтобы убедиться, что программа честно работает с последовательностью битов, можете стереть в четверном окне (сжатый текст в битах), например, первые пять символов (00100). Из таблицы Хаффмана видно, что так (00100) кодируется символ заглавной буквы «Т». Щелкайте кнопку «Восстановление» и в шестом окне видите результат – начальная буква «Т» исчезла... Так же можно удалять любой другой символ или дописывать новые, использую 0 и 1 в соответствии с таблицей Хаффмана…., но если вы хоть один раз ошибётесь… (в разряде или цифре), получите значительные искажения…

скачать exe-файл для тестирования

Другие примеры на тему «Шифрование, Кодирование и/или Сжатие Информации»

Другие примеры на языках «C»,«C++»,«C#»




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...

исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
Весь код по 49 руб


Сайт помощи студентам по программированию и информатике

Program code