Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекционные материалы.doc
Скачиваний:
49
Добавлен:
19.05.2015
Размер:
1.99 Mб
Скачать
    1. Сжатие числовой информации

Одним из широко известных способов сжатия последовательности цифровых данных (например результатов измерения процесса F(ti)в дискретные промежутки времениti, i=1..N) являетсяаппроксимация. Действительно, вместо передачи длинного набора чисел можно передать лишь набор коэффициентов аппроксимирующего полиномаPj, j=0..K. Степень сжатия в этом случае равна(K+1)/N.

В качестве аппроксимирующего полинома можно взять один из широко известных в математике или подобрать свой собственный, наиболее соответствующий задаче. От соотношения параметров К и N зависит компромисс между степенью сжатия и точностью восстановления, поскольку извлечение информации при таком методе возможно лишь с некоторой погрешностью (потерями), которые тем больше, чем выше степень сжатия.

А как быть, если требуется передать данные без потерь? И здесь предложенный способ может помочь, стоит его лишь несколько расширить:

Предположим, нам надо передать массив из N чисел, каждое из которых не превышает величиныn.При непосредственном представлении для этого потребуетсяNlog(n)бит. Пусть нам удалось подобрать такой аппроксимирующий полином порядкаК, что все погрешности (ошибки отклонения истинного значения от его аппроксимированного варианта) укладываются в диапазон значений k < n. Тогда, как нетрудно подсчитать, после сжатия длина массива составит N log(k) + (K+1) log(n) . При достаточно больших значениях N(N>>K) степень сжатия будет примерно равна

log(k) / log(n).

Рассмотренный способ особенно эффективно работает для данных, описываемых моделью Маркова 1 порядка, у которых большая часть условных вероятностей сосредоточена вблизи главной диагонали, т.е. pi,j тем больше, чем меньше разность между i и j. К таким процессам относятся, например, годовые или суточные колебания температуры. Маловероятно, что, если сегодня температура воздуха -20С, то завтра будет +10. Скорее ожидать -19 или -21.

Очень простым способом сжатия с потерями является отбрасывание незначащих разрядов или округление (о чем уже говорилось) или прореживание, т.е. простое отбрасывание некоторого количества результатов (обычно-через один, через два и т.д.). И то и другое, в конечном итоге, является методом снижения высокочастотного шума и сводится к более общему понятию низкочастотной фильтрации.

Рассмотрим особо очень часто возникающую задачу сжатия разряженных двумерных массивов (матриц). Один из возможных и изящных подходов изложен в книге:

Пусть имеется массив размера X·Y, верхняя левая часть которого имеет вид:

Столб.1

Столб.8

Стр. 1

98

162

17

1121

965

Стр.6

538

Если каждое число представлять двумя байтами, то такая матрица займет в памяти 2XY байт. Нельзя ли сократить этот объем? Вместо массива, оказывается, можно хранить только три одномерных вектора. Назовем их FirstInCol(ПервыйВКолонке),Row(Ряд) иValue(Значение)

Длина вектора FirstInCol равна количеству столбцов матрицы, а длиныRowиValue-количеству ее непустых элементов (в данном примере - 2000).i-ое число первого вектораFirstInColпоказывает, с какой позиции в вектореRow начинаются значенияi-го столбца. Числа вRow-номера строк, где находятся соответствующие непустые значенияValue. Так, второй столбец содержит два числа - 98 во второй строке и 15 в сто тридцать девятой. При определенных условиях с помощью приведенного метода можно получить существенное снижение объема числовой и прочей информации.