Теория информации
c = DataFile.ReadSymbol(); i++; li = li-1 + a[c]*(hi-1 - li-1); hi = hi-1 + b[c]*(hi-1 - li-1); }; Алгоритм декомпрессии можно записать так: l0=0; h0=1; value=File.Code(); for(i=1; i<=File.DataLength(); i++) { for(для всех cj) { li = li-1 + a[cj]*(hi-1 - li-1); hi = hi-1 + b[cj]*(hi-1 - li-1); if ((li <= value) && (value < hi)) break; }; DataFile.WriteSymbol(cj); }; Может показаться, что приведенный выше пример не производит никакого сжатия. Для того чтобы выяснить степень сжатия результаты кодирования нужно перевести в двоичную форму. Так как из конечного интервала: [0.71753375 0.717535) можно выбрать любое число, выберем наименьшее для хранения – это 717534, которому соответствует битовое представление 10101111001011011110 и составляет 20 бит. И строка из 10 символов сжимается в 20 бит. Хорошее ли это сжатие? Для того, чтобы выяснить степень сжатия результаты кодирования переводят в двоичную форму (выбрав наименьшее для хранения) и для нее находят энтропию кодируемой последовательности и умножают на количество букв. Энтропия кодируемой последовательности будет равна:
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy