Кодирование информации по Алгоритму Хаффмана (Huffman) C# Visual Studio
Учебная программа по алгоритму сжатия и восстановления информации (кодирования и декодирования данных) без потерь на C#.
Суть Алгоритма Хаффмана можно изложить так:
Считаем частоты символов – т.е. количество вхождений каждого символа в исходный текст. Для наиболее часто встречающихся символов назначаем сочетание бит (код) меньшего размера, а по мере уменьшения частот символов в тексте их код будет более длинным.
Для автоматизации подсчета частот символов и назначения кода оптимальной длины используется специальный математический аппарат:
- создание очереди символов (сортированного списка)
- создание очереди узлов дерева (каждый символ - это листок, т.е. конечный узел)
- создание дерева Хаффмана
- создание таблицы Хаффмана
Для выполнения задачи кодирования используется таблица Хаффмана, а для декодирования - дерево Хаффмана.
Задание:
Написать программу сжатия и восстановления текста, состоящего из символов уникода.
Представить сжатый текст в виде последовательности битов и в виде последовательности символов уникода.
Решение:
По органам управления на форме все понятно. Одна кнопка вызывает «метод сжатия» 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 .
Другие примеры на тему «Шифрование, Кодирование и/или Сжатие Информации»
Другие примеры на языке «C#»
Поделиться в соц сетях: