Кодирование с использованием алгоритма LZW (Lempel

advertisement
Группа 1201. II семестр. Терминальное задание №4 (архивация,
разбор выражений)
Для сдачи задания необходимо выполнить 2 задачи. Все задачи из этого раздела должны
решаться за приемлемое время для тестов, что прилагаются к заданию. Тесты можно найти
на странице http://ccfit.nsu.ru/~den Дополнительную информацию можно найти на странице
http://iclub.nsu.ru/~andy/
4-1. Калькулятор
Необходимо написать калькулятор, позволяющий производить следующие арифметические
действия:
 +,-,/,*
 ()
 sin, cos, exp
 ^ (возведение в степень)
Программа должна получать на вход файл input.txt, содержащий набор арифметических
выражений (каждое выражение на новой строке). На выходе программы выдает результат
вычисления заданного арифметического выражения (вещественные числа - с точностью до 2й цифры) и выражение, записанное в польской записи (через 3 пробела). Токены польской
записи выводятся через пробел, все числа выводятся в вещественном формате (до 2-го знака).
Пример:
input.txt
2-3*3
4*(2-9)
sin(2)+2
output.txt
-7 2.00 3.00 3.00 * -28 4.00 2.00 9.00 - *
2.03 2.00 sin 2.00 +
Если не задан входной файл, то программа переходи в консольный режим и позволяет
вводить выражения из консоли. После ввода выражения и нажатия «Enter» программа
показывает результат и выражение в формате обратной польской записи.
4-2. Телефонная база данных
Реализовать телефонную базу данных с операциями:
1. Вставки в БД. int Insert(Card _person);
2. Удаления из БД. int Delete(char * _name) или int Delete(char * _phone) в зависимости
от индекса.
3. Поиск. Поиск осуществлять по ключу для конкретного значения (одно выходное
значение), а также для значений в промежутке (несколько значений с возможностью
последовательного выбора записей.
Card Search(char * _name) или Card Search(char * _phone)
CardArray Search(char * _StartName, char * _StopName).
Здесь возможна реализация такой абстракции как курсоры:
Cursor Search(char * _name)
Cursor Search(char * _startName, char * _stopName);
с дополнительными функциями:
Cursor Next(Cursor _cursor)
Card GetValue(Cursor _cursor).
В данном задании необходимо учитывать, что добавление и поиск данных осуществляется
прямо в файле, т.к. база должна сохранять большое кол-во записей (сотни тысяч). Нельзя
вытаскивать всю базу в оперативную память и производить поиск внутри нее.
Для быстрого поиска необходимо корректно создавать и поддерживать файл (файлы)
индексов, нельзя организовывать последовательный поиск данных в файле. Индексы
создаются на основе B-tree или расширяемого хэширования (что давалось на лекции). Все
записи имеют уникальные ключи (нельзя завести 2 человек с одинаковым именем или
одинаковым номером телофона).
Реализация курсоров остается на усмотрение выполняющего задание.
Замечания:
1. Реализация страниц базы данных, очевидно через сегментированный файл, т.е. файл
условно разделённый на странички.
2. Желательна реализация операций чтения-записи-добавления страниц с возможностью
кеширования.
3. Желательна поддержка нескольких индексов (по именам и телефонам).
4-3. Архивация по методу Хаффмана
Необходимо реализовать возможность архивации бинарных/текстовых данных по методу
Хаффмана. Набор команд, обрабатываемых программой, перечислен в таблице:
Команда
myarchiver.exe с myfile.txt
myarchiver.exe с myfile1.txt myfile2.txt
myfile3.txt
myarchiver.exe x myfile.txt.haf
Действие
Заархивировать файл myfile.txt в файл myfile.txt.haf,
созданный в текущей (рабочей) директории. Файл
myfile.txt не удалять.
Заархивировать файлы myfile1.txt, myfile2.txt,
myfile3.txt в файл myfile.txt.haf, созданный в
текущей (рабочей) директории. Файл myfile.txt не
удалять. Т.е. архиватор должен поддерживать
возможность архивирования нескольких файлов.
Разархивировать файл myfile.txt.haf.
Разархивированные файлы (файл) создавать в
текущей (рабочей) директории. Файл myfile.txt.haf
удалить.
Необходимо добиться максимальной скорости сжатия, чтобы файлы в 2-5 мегабайт могли
архивироваться/разархивироваться без задержек.
Дополнительную информацию о методе Хаффмана можно найти на странице:
http://ccfit.nsu.ru/~den/help/other/Haffman.htm
Download