Рассматривается задача сжатия данных без потерь при помощи разложения функции в ряд Фурье.
Дано: Функция, заданная в
точках
:
Пусть, для наглядности, значения
будут целыми от 0 до 255. То есть для хранения
значений функции потребуется
байт.
Требуется построить алгоритм, позволяющий сжать(уменьшить число байт, необходимых для хранения значений функции) и формулу для распаковки того, что сжали:).
Разложим функцию в ряд Фурье. (доопределив её так, как нам нужно)
;
;
после некоторых выкладок получим:
К сожалению сумму
свернуть не удалось. Разложив её в ряд Маклорена и перегруппировав получаем:
или
ну и, наконец,
Применение формулы.
Дано
значений функции(файл), например,
вычисляем нужное число сумм
,например,
. Сохраняем
в файл-это будет архив. Когда нужно разархивировать используем последнюю формулу.
Значения функции
могут быть и большими, в архиве хранится будут только
сумм
Придется использовать вычисления с большими числами.
В данное время пытаюсь оценить:
0. Применимо ли всё это на практике.(программу написал без Маклорена всё отлично сходится, теперь нужно с большими числами и разрядностью проверить)
1. Сколько сумм
хранить в архиве при различных ОДЗ
2. Какой должен быть
, чтобы можно было остановить процесс разархивации.
Пишите кому интересно..