Аноним

Сжатие целочисленных последовательностей и множеств: различия между версиями

Материал из WEGA
м
Строка 6: Строка 6:


== Основные результаты ==
== Основные результаты ==
Основное ограничение на статические коды выражается неравенством Крафта-Макмиллана ([ ]): если кодовое слово для символа x имеет длину lx, то необходимо выполнение неравенства Y^=\ 2~^* 5 1 для того, чтобы код был декодируемым слева направо и ни одно кодовое слово не было префиксом любого другого кодового слова. Еще одним важным ограничением является комбинаторная стоимость описания множества. Если подмножество из n элементов множества 1, ..., U выбирается случайным образом, то для описания этого подмножества требуется log2 (n) Јrf nlog2(U/n) бит.
Основное ограничение на статические коды выражается неравенством Крафта-Макмиллана [13]: если кодовое слово для символа x имеет длину <math>\ell_x \;</math>, то необходимо выполнение неравенства <math>\sum_{x = 1}^U 2^{- \ell_x} \le 1</math> для того, чтобы код был декодируемым слева направо и ни одно кодовое слово не было префиксом любого другого кодового слова. Еще одним важным ограничением является комбинаторная стоимость описания множества. Если подмножество из n элементов множества 1, ..., U выбирается случайным образом, то для описания этого подмножества требуется <math>log_2 \; \binom{U}{n} \approx n \; log_2 \; \frac{U}{n}</math> бит.




'''Унарный и бинарный код'''
'''Унарный и бинарный код'''


В качестве первого примера рассмотрим метод унарного кодирования, в котором символ x представлен в виде x - 1 бит в значении «1», после которых идет один бит в значении «0». К примеру, три первых символа сообщения M1 будут кодироваться последовательностью «0-110-0»; дефисы здесь имеют исключительно иллюстративную цель и не являются частью кодированного представления. Поскольку унарный код символа x имеет длину ровно x бит, для этого способа кодирования крайне предпочтительны небольшие целые числа; он имеет соответствующее идеальное распределение вероятностей появления символов (распределение, для которого данный конкретный шаблон длин кодовых слов позволяет получить минимальную длину сообщения), задаваемое формулой Prob(x) = 2~x.
В качестве первого примера рассмотрим метод ''унарного кодирования'', в котором символ x представлен в виде x-1 бит в значении «1», после которых идет один бит в значении «0». К примеру, три первых символа сообщения <math>M_1 \;</math> будут кодироваться последовательностью «0-110-0»; дефисы здесь имеют исключительно иллюстративную цель и не являются частью кодированного представления. Поскольку унарный код символа x имеет длину ровно x бит, для этого способа кодирования крайне предпочтительны небольшие целые числа; он имеет соответствующее идеальное распределение вероятностей появления символов (распределение, для которого данный конкретный шаблон длин кодовых слов позволяет получить минимальную длину сообщения), задаваемое формулой <math>Prob(x) = 2^{-x} \;</math>.




У унарного кода есть полезное свойство – бесконечная длина. Однако, за исключением случаев, когда сообщение M состоит главным образом из небольших целых чисел, унарный код является достаточно дорогостоящим. В частности, представление сообщения M = hs1, , sni в виде унарного кода требует Pi si бит, а если M представляет собой представление подмножества 1, ..., U с пробелами, его длина может составить U бит.
У унарного кода есть полезное свойство – бесконечная длина. Однако, за исключением случаев, когда сообщение M состоит главным образом из небольших целых чисел, унарный код является достаточно дорогостоящим. В частности, представление сообщения <math>M = \langle s_1, ..., s_n \rangle</math> в виде унарного кода требует <math>\sum_i s_i \;</math> бит, а если M представляет собой представление подмножества 1...U с пробелами, его длина может составить U бит.




Лучшим известным кодом для вычислений считается бинарный (или двоичный). Если 2k~l < U < 2k для некоторого целочисленного k, то символы 1 < si < U могут быть представлены k > log2 U битами каждый. В этом случае код является конечным, а идеальное распределение вероятности задается формулой Prob(x) = 2 k. В случае U = 2k имеет место соотношение Prob(x) = 2^п = 1/ n.
Лучшим известным кодом для вычислений считается ''бинарный'' (или ''двоичный''). Если <math>2^{k - l} < U \le 2^k \;</math> для некоторого целого k, то символы <math>1 \le s_i \le U \;</math> могут быть представлены <math>k \ge log_2 \; U</math> битами каждый. В этом случае код является ''конечным'', а идеальное распределение вероятности задается формулой <math>Prob(x) = 2^{-k} \;</math>. В случае <math>U = 2^k \;</math> имеет место соотношение <math>Prob(x) = 2^{-log_2 \; n} = 1/n</math>.




Если U точно известно и не является степенью двойки, 2k — U кодовых слов можно сократить до длины k — 1 бит, получив минимальный двоичный код. Символам 1 • • • 2k — U удобно присвоить короткие кодовые слова. При этом кодовые слова для оставшихся символов, (2k — U + 1) • • • U, по-прежнему будут иметь длину k бит.
Если U точно известно и не является степенью двойки, <math>2^k — U \;</math> кодовых слов можно сократить до длины k — 1 бит, получив ''минимальный двоичный код''. Символам 1 • • • 2k — U удобно присвоить короткие кодовые слова. При этом кодовые слова для оставшихся символов, (2k — U + 1) • • • U, по-прежнему будут иметь длину k бит.




4430

правок