Арифметическое кодирование: различия между версиями

Материал из in.wiki
Перейти к навигации Перейти к поиску
w>JaroslavleffBot
w>Halyavin
Строка 2: Строка 2:
  
 
== Характеристики ==
 
== Характеристики ==
; Степень сжатия : лучшая > 8, худшая - 1
+
Обеспечивает лучшую степень сжатия чем [[алгоритм Хаффмана]]. На каждый символ требуется почти <math>H</math> бит, где <math>H</math> — [[информационная энтропия]] источника.
 
 
Обеспечивает лучшую степень сжатия чем [[алгоритм Хаффмана]]. То есть в соответсвии с [[теоремой Шеннона]] — -log<sub>2</sub>(f) бит на цепочку.
 
  
 
== Принцип действия ==
 
== Принцип действия ==
Пусть у нас есть некий алфавит, а так-же данные о частотности использования символов (опционально). Тогда рассмотрим на координатной прямой отрезок о 0 до 1.  
+
Пусть у нас есть некий алфавит, а также данные о частотности использования символов (опционально). Тогда рассмотрим на координатной прямой отрезок о 0 до 1.  
  
 
Назовём этот отрезок рабочим. Расположем на нём точки таким образом, что длины образованных отрезков будут равны частоте использования символа и каждый такой отрезок будет соответсвовать одному символу.
 
Назовём этот отрезок рабочим. Расположем на нём точки таким образом, что длины образованных отрезков будут равны частоте использования символа и каждый такой отрезок будет соответсвовать одному символу.
  
Теперь возьмём символ из потока и найдём для него отрезок, среди только что сформированных, теперь отрезок для этого сомвола стал рабочим. Разобьём его таким же образом, как разбили отрезок от 0 до 1. Выполним эту операцию для следующего символа.
+
Теперь возьмём символ из потока и найдём для него отрезок, среди только что сформированных, теперь отрезок для этого сомвола стал рабочим. Разобьём его таким же образом, как разбили отрезок от 0 до 1. Выполним эту операцию для некоторого числа последовательных символов. Затем выберем любое число из рабочего отрезка. Биты этого числа вместе с длиной его битовой записи и есть результат арифметического кодирования использованных символов потока.
 
 
Как только символы закончатся, выберем число из рабочего отрезка — это единственное число, которое требуется, чтобы закодировать последовательность чисел.
 
 
 
=== Интервальное кодирование ===
 
То же самое, но с оговоркой, что мы работаем и используем [[дискретные]] величины.
 

Версия от 15:58, 3 января 2006

Шаблон:Cleanup-rewrite

Характеристики

Обеспечивает лучшую степень сжатия чем алгоритм Хаффмана. На каждый символ требуется почти H H бит, где H H информационная энтропия источника.

Принцип действия

Пусть у нас есть некий алфавит, а также данные о частотности использования символов (опционально). Тогда рассмотрим на координатной прямой отрезок о 0 до 1.

Назовём этот отрезок рабочим. Расположем на нём точки таким образом, что длины образованных отрезков будут равны частоте использования символа и каждый такой отрезок будет соответсвовать одному символу.

Теперь возьмём символ из потока и найдём для него отрезок, среди только что сформированных, теперь отрезок для этого сомвола стал рабочим. Разобьём его таким же образом, как разбили отрезок от 0 до 1. Выполним эту операцию для некоторого числа последовательных символов. Затем выберем любое число из рабочего отрезка. Биты этого числа вместе с длиной его битовой записи и есть результат арифметического кодирования использованных символов потока.