Кодирование информации — различия между версиями
(→Примеры кодов) |
|||
Строка 20: | Строка 20: | ||
==== Примеры кодов ==== | ==== Примеры кодов ==== | ||
− | * ASCII — блочный. | + | * [[Представление символов, таблицы кодировок#Кодировки стандарта ASCII | ASCII]] — блочный. |
* [[Алгоритм Хаффмана | Код Хаффмана]] — префиксный. | * [[Алгоритм Хаффмана | Код Хаффмана]] — префиксный. | ||
* Азбука Морзе — не является ни блочным, ни префиксным, тем не менее, однозначно декодируемый засчет использования пауз. | * Азбука Морзе — не является ни блочным, ни префиксным, тем не менее, однозначно декодируемый засчет использования пауз. | ||
Строка 36: | Строка 36: | ||
<tex>n = m</tex> и <tex>b_{i_1} = b_{j_1}</tex>; <tex>b_{i_2} = b_{j_2}</tex>; ... <tex>b_{i_n} = b_{j_m}</tex>; | <tex>n = m</tex> и <tex>b_{i_1} = b_{j_1}</tex>; <tex>b_{i_2} = b_{j_2}</tex>; ... <tex>b_{i_n} = b_{j_m}</tex>; | ||
Заметим, что если среди кодовых слов будут одинаковые, то однозначно декодировать этот код мы уже не сможем. | Заметим, что если среди кодовых слов будут одинаковые, то однозначно декодировать этот код мы уже не сможем. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Префиксный код == | == Префиксный код == | ||
{{Определение | {{Определение | ||
|id=def4 | |id=def4 | ||
− | |definition='''Префиксный код''' — код, в котором никакое кодовое слово не является префиксом какого-то другого кодового слова. | + | |definition='''Префиксный код'''(англ. ''prefix code'') — код, в котором никакое кодовое слово не является префиксом какого-то другого кодового слова. |
}} | }} | ||
− | |||
Предпочтение префиксным кодам отдается из-за того, что они упрощают декодирование. Поскольку никакое кодовое слово не выступает в роли префикса другого, кодовое слово, с которого начинается файл, определяется однозначно, как и все последующие кодовые слова. | Предпочтение префиксным кодам отдается из-за того, что они упрощают декодирование. Поскольку никакое кодовое слово не выступает в роли префикса другого, кодовое слово, с которого начинается файл, определяется однозначно, как и все последующие кодовые слова. | ||
− | Пример | + | === Пример кодирования === |
<tex>U = \mathcal {f} a, b, c \mathcal {g}</tex>; <tex>Z = \mathcal {f} 0, 1 \mathcal {g}</tex> | <tex>U = \mathcal {f} a, b, c \mathcal {g}</tex>; <tex>Z = \mathcal {f} 0, 1 \mathcal {g}</tex> | ||
<tex>c(a) = 00; c(b) = 01; c(c) = 1;</tex> | <tex>c(a) = 00; c(b) = 01; c(c) = 1;</tex> | ||
Строка 67: | Строка 52: | ||
Такой код можно однозначно разбить на слова: | Такой код можно однозначно разбить на слова: | ||
<tex>00\ 01\ 00\ 1\ 00\ 01\ 00</tex> | <tex>00\ 01\ 00\ 1\ 00\ 01\ 00</tex> | ||
− | |||
− | + | === Преимущества префиксных кодов === | |
* Однозначно декодируемый и разделимый | * Однозначно декодируемый и разделимый | ||
* Возможности декодировки сообщения, не получая его целиком, а по мере его поступления. | * Возможности декодировки сообщения, не получая его целиком, а по мере его поступления. | ||
− | + | === Недостатки префиксных кодов === | |
* Так как префиксные коды являются кодами переменной длины, а данные, в основном, считываются блочно, код приходится считывать побитово, что значительно замедляет скорость считывания данных | * Так как префиксные коды являются кодами переменной длины, а данные, в основном, считываются блочно, код приходится считывать побитово, что значительно замедляет скорость считывания данных | ||
* При появлении ошибок в кодовой комбинации, при определенных обстоятельствах, может привести к неправильному декодированию не только данной, но и последующей кодовой комбинации, в отличии от равномерных кодов, где ошибка в кодовой комбинации приводит к неправильному декодированию только ее. | * При появлении ошибок в кодовой комбинации, при определенных обстоятельствах, может привести к неправильному декодированию не только данной, но и последующей кодовой комбинации, в отличии от равномерных кодов, где ошибка в кодовой комбинации приводит к неправильному декодированию только ее. | ||
− | + | ==== Пример неудачного декодирования ==== | |
− | < | + | Предположим, что последовательность из примера передалась неверно и стала: |
− | + | <math>0001001{\color{Red}1}00100</math> | |
+ | Разобьем ее согласно словарю: | ||
<tex>00\ 01\ 00\ 1\ 1\ 00\ 1\ 00</tex> | <tex>00\ 01\ 00\ 1\ 1\ 00\ 1\ 00</tex> | ||
<tex>a\quad b\quad a\ c\ c\quad a\ c\ a</tex> | <tex>a\quad b\quad a\ c\ c\quad a\ c\ a</tex> | ||
Полученная строка совпадает только в битах, которые находились до ошибочного, поэтому декодирование неравномерного кода, содержащего ошибки, может дать абсолютно неверные результаты. | Полученная строка совпадает только в битах, которые находились до ошибочного, поэтому декодирование неравномерного кода, содержащего ошибки, может дать абсолютно неверные результаты. | ||
− | ==== | + | |
− | + | ||
− | + | === Не префиксный однозначно декодируемый код === | |
+ | Как уже было сказано, префиксный код всегда однозначно декодируем. Обратное в общем случае неверно: | ||
+ | <tex>U = \mathcal {f} a, b, c \mathcal {g}</tex>; <tex>Z = \mathcal {f} 1, 2, 3 \mathcal {g}</tex>; | ||
+ | <tex>c(a) = 1; c(b) = 12; c(c) = 31;</tex> | ||
+ | Закодируем <tex>abbca</tex>, получим кодовую строку <tex>11212311</tex> | ||
+ | Мы можем ее однозначно декодировать, так как знаем, что слева от двойки и справа от тройки всегда стоит единица. | ||
+ | |||
+ | После декодирования получаем: | ||
+ | <tex>abbca</tex> | ||
== См. также == | == См. также == | ||
Строка 93: | Строка 86: | ||
* [[Неравенство Макмиллана]] | * [[Неравенство Макмиллана]] | ||
− | |||
− | |||
== Литература == | == Литература == |
Версия 01:22, 15 января 2012
Определение: |
Кодирование информации — отображение данных на кодовые слова. |
Обычно в процессе кодирования информация преобразуется из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической обработки. В более узком смысле кодированием информации называют представление информации в виде кода. Средством кодирования служит таблица соответствия знаковых систем, которая устанавливает взаимно однозначное соответствие между знаками или группами знаков двух различных знаковых систем.
Содержание
Код
Определение: |
Пусть Код — отображение . . | — множество исходных символов, — кодовый алфавит, — строчки из .
Виды кодов
- Код фиксированной длины (fixed-length code) — кодирование каждого символа производится с помощью строк одинаковой длины. Также он называется равномерным или блоковым кодом.
- Код переменной длины (variable-length code) — кодирование производится с помощью строк переменной длины. Также называется неравномерным кодом.
- Префиксный код — код, в котором, никакое кодовое слово не является началом другого. Аналогично, можно определить постфиксный код — это код, в котором никакое кодовое слово не является концом другого.
Все вышеперечисленные коды являются однозначно декодируемыми(англ. uniquely decodable) — для такого кода любое слово, составленное из кодовых слов, можно декодировать только единственным способом.
Примеры кодов
- ASCII — блочный.
- Код Хаффмана — префиксный.
- Азбука Морзе — не является ни блочным, ни префиксным, тем не менее, однозначно декодируемый засчет использования пауз.
Однозначно декодируемый код
Определение: |
Однозначно декодируемый код — код, в котором любое слово составленное из кодовых слов можно декодировать только единственным способом. |
Пусть есть код заданный следующей кодовой таблицей.; ; ... ; Код является однозначно декодируемым, толька тогда, когда для любых строк, составленных из кодовых слов, вида: Всегда выполняются равенства: и ; ; ... ;
Заметим, что если среди кодовых слов будут одинаковые, то однозначно декодировать этот код мы уже не сможем.
Префиксный код
Определение: |
Префиксный код(англ. prefix code) — код, в котором никакое кодовое слово не является префиксом какого-то другого кодового слова. |
Предпочтение префиксным кодам отдается из-за того, что они упрощают декодирование. Поскольку никакое кодовое слово не выступает в роли префикса другого, кодовое слово, с которого начинается файл, определяется однозначно, как и все последующие кодовые слова.
Пример кодирования
; Закодируем строку:
Такой код можно однозначно разбить на слова:
Преимущества префиксных кодов
- Однозначно декодируемый и разделимый
- Возможности декодировки сообщения, не получая его целиком, а по мере его поступления.
Недостатки префиксных кодов
- Так как префиксные коды являются кодами переменной длины, а данные, в основном, считываются блочно, код приходится считывать побитово, что значительно замедляет скорость считывания данных
- При появлении ошибок в кодовой комбинации, при определенных обстоятельствах, может привести к неправильному декодированию не только данной, но и последующей кодовой комбинации, в отличии от равномерных кодов, где ошибка в кодовой комбинации приводит к неправильному декодированию только ее.
Пример неудачного декодирования
Предположим, что последовательность из примера передалась неверно и стала:
Разобьем ее согласно словарю:
Полученная строка совпадает только в битах, которые находились до ошибочного, поэтому декодирование неравномерного кода, содержащего ошибки, может дать абсолютно неверные результаты.
Не префиксный однозначно декодируемый код
Как уже было сказано, префиксный код всегда однозначно декодируем. Обратное в общем случае неверно:
; ; Закодируем , получим кодовую строку Мы можем ее однозначно декодировать, так как знаем, что слева от двойки и справа от тройки всегда стоит единица.
После декодирования получаем:
См. также
Литература
- Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. «Алгоритмы. Построение и анализ» — Издательство: «Вильямс», 2011 г. - 1296 стр. — ISBN 978-5-8459-0857-5, 5-8459-0857-4, 0-07-013151-1
- Джеймс Андерсон. «Дискретная математика и комбинаторика» — Издательство: «Вильямс», 2004 г. - 960 стр. — ISBN 978-0-13-086998-2
- Новиков. Ф.А. «Дискретная математика для программистов» — Издательство: «Питер», 2001 г. - 304 стр. — ISBN 5-94723-741-5 978-5-94723-741-2
- Алексеев В.Б. «Дискретная математика (II семестр)»