
- •Метод 2. С использованием рекурсивной функции вычисления факториала
- •Требования к реализации
- •Лабораторная работа № 3. Библиотека Задание
- •Требования к реализации Язык реализации – Паскаль.
- •Метод 2. Алгоритм Дейкстры построения следующей по алфавиту перестановки
- •Метод 3. Инверсионный
- •Метод 1. Сортировка выбором
- •Метод 2. Сортировка простыми вставками
- •Язык реализации – Си.
- •Лабораторная работа № 13*. Декодирование Задание
- •Литература
Язык реализации – Си.
Приведем реализацию функции setbit на Си.
void setbit (unsigned char *b, int i)
{
*b |= 1<<(8-i);
}
Лабораторная работа № 13*. Декодирование Задание
Написать программу, которая декодирует заданный файл, заархивированный методом сжатия по Хаффману.
Входные данные
На вход программе подается заархивированный файл.
Выходные данные
Нужно вывести в выходной файл исходный декодированный текст.
Метод
Считать из входного файла длину исходного закодированного файла и записать в переменную L.
Считать из входного файла в переменную N целое число (1 байт) — размер алфавита.
Восстановить дерево Хаффмана (будем использовать массив T, описанный в лабораторной работе № 12):
i := 0;
пока i < N*2 – 1 выполнять
{ i := i + 1;
считать из входного файла три числа a, b
и с (каждое по 1 байту);
Т[i].символ := a;
T[i].левый := b;
T[i].правый := c;
}
Декодирование:
i:= 0; //—счетчик символов выходного файла
j:= 2*N–1;//—текущее положение в дереве Хаффмана
считать из входного файла в переменную b
очередной байт;
k := 0; // — номер текущего бита в b
пока i < L выполнять
{ если k = 8 то
{ считать из входного файла в переменную b
очередной байт;
k := 0;
}
c:= getbit(b, k);
k := k + 1;
если с = 0
то j := T[j].левый
иначе j := T[j].правый;
если j N то
{ записать в выходной файл T[j].символ;
j := 2*N – 1
}
}
Язык реализации – Си.
Приведем реализацию функции getbit на Си.
int getbit (unsigned char b, int i)
{
return ((b >> (8–i)) & 1);
}
Литература
В.А.Цикоза, Т.Г.Чурина. Методическое пособие к курсу “Методы программирования” (часть первая). Новосибирск: ВКИ НГУ, 1999.
Вирт Н. Алгоритмы и структуры данных. М.: Мир, 1989.–360с.
А.Ахо, Д.Хопкрофт, Д. Ульман. Структуры данных и алгоритмы. М.: Издательский дом “Вильямс”, 2000 – 384 с..
Хэзфилд Р., Кирби Л. Искусство программирования на C: Фундаментальные алгоритмы, структуры данных и примеры приложений (пер. с англ.) {Энциклопедия программиста} К: ДиаСофт`01- 736 с.
Содержание
Лабораторная работа № 1. Треугольник Паскаля 3
Лабораторная работа № 2. Простые числа 5
Лабораторная работа № 3. Библиотека 6
Лабораторная работа № 4. Системы счисления 8
Лабораторная работа № 5. Перестановки 10
Лабораторная работа № 6. Поиск подстроки в строке 13
Лабораторная работа № 7. Простые сортировки 15
Лабораторная работа № 8. Улучшенные сортировки 19
Лабораторная работа № 9. Сортировка файлов 23
Лабораторная работа № 10. Определение частоты встречаемости символов в файле 26
Лабораторная работа № 11. Построение кода Хаффмана 27
Лабораторная работа № 12. Архивирование 30
Лабораторная работа № 13*. Декодирование 32
Литература 34