Кодирование информации — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
Обычно в процессе кодирования информация преобразуется из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической переработки.
 
Обычно в процессе кодирования информация преобразуется из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической переработки.
 
В более узком смысле кодированием информации называют представление информации в виде кода.
 
В более узком смысле кодированием информации называют представление информации в виде кода.
 +
Средством кодирования служит таблица соответствия знаковых систем, которая устанавливает взаимно однозначное соответствие между знаками или группами знаков двух различных знаковых систем.
  
 
== Код ==
 
== Код ==
  
Код — набор условных обозначений (кодовых слов) для предоставления информации.
+
'''Код''' — правило (алгоритм) сопоставления каждому конкретному сообщению строго определённой комбинации символов (знаков или сигналов). Кодом также называется отдельная комбинация таких символов (знаков) — слово. Для различия этих терминов, код в последнем значении ещё называется ''кодовым словом''.
 +
 
 +
'''Код фиксированной длины''' (fixed-length code) {{---}} кодирование каждого символа производится с помощью строк одинаковой длины. Также он называется ''равномерным'' или ''блоковым'' кодом.
 +
 
 +
'''Код переменной длины''' (variable-length code) {{---}} кодирование производится с помощью строк переменной длины. Также называется ''неравномерным кодом''.
 +
 
 +
'''Разделимый код''' {{---}} код, в котором любое слово, составленное из элементарных кодов, единственным образом разлагается на элементарные коды.
  
 
==== Примеры кодов ====
 
==== Примеры кодов ====
Строка 13: Строка 20:
 
== Префиксный код ==
 
== Префиксный код ==
  
Префиксный код — код, не имеющий ни одного кодового слова, которое являлось бы префиксом любого другого кодового слова данного кода.
+
'''Префиксный код''' — код, в котором никакое кодовое слово не является префиксом какого-то другого кодового слова.
Любой префиксный код является однозначно декодируемым.
+
Любой префиксный код является однозначно декодируемым и разделимым. Также префиксный код иногда называют ''мнгновенным кодом''.
 +
 
 +
Оптимальное сжатие данных, которого можно достичь с помощью кодов, всегда достижимо при использовании префиксного кода.
 +
 
 +
Предпочтение префиксным кодам отдается из-за того, что они упрощают декодирование. Поскольку никакое кодовое слово не выступает в роли префикса другого, кодовое слово, с которого начинается закодированный файл, определяется однозначно. Начальное кодовое слово, с которого начинается закодированный файл, определяется однозначно. Начальное кодовое слово легко идентифицировать, преобразовать его в исходный символ и продолжить декодирование оставшейся части закодированного файла.
 +
 
 +
'''Кома-код''' {{---}} разновидность префиксного кода, в котором каждый символ кодируется строкой из единиц, в конце которой стоит ноль. Множество строк кода имеет вид {0,10,110,1110,11110,...}. Недостаток кома-кода в том, что элементы кода могут быть очень длинными и занимать большой объём памяти.
 +
 
 +
Рассмотрим пример кодирования с помощью префиксного кода.
  
Код, состоящий из слов 0, 10, 11 является префиксным, то есть строку
+
Пусть U {{---}} множество исходных символов, Z {{---}} кодовый алфавит, Z* {{---}} строчки из Z.
  100111010
+
Код {{---}} отображение c : U <tex>\rightarrow</tex> Z*. c* : U* <tex>\rightarrow</tex> Z*. c*(x1x2..xn) = c(x1)c(x2)..c(xn)
можно разбить на слова единственным образом:
+
U = {a,b,c}; Z = {0,1};
  10 0 11 10 10
+
c(a) = 00; c(b) = 01; c(c) = 1;
 +
Закодируем строку: abacaba
 +
  c*(abacaba) = 0001001000100
 +
Так как такой код можно однозначно разбить на слова:
 +
  00 01 00 1 00 01 00
 +
он является префиксным.
  
 
==== Примеры префиксных кодов ====
 
==== Примеры префиксных кодов ====
 
* Код Хаффмана
 
* Код Хаффмана
 
* Код Шеннона-Фано
 
* Код Шеннона-Фано
* UTF-8
+
* UTF-8 {{---}} префиксный, так как является блоковым.
  
 
== Ссылки ==
 
== Ссылки ==
 
* [http://ru.wikipedia.org Википедия — свободная энциклопедия]
 
* [http://ru.wikipedia.org Википедия — свободная энциклопедия]
  
 
+
== Литература ==
 +
* Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы. Построение и анализ {{---}} Издательство: «Вильямс», 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
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Представление информации]]
 
[[Категория: Представление информации]]

Версия 08:40, 16 октября 2011

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

Код

Код — правило (алгоритм) сопоставления каждому конкретному сообщению строго определённой комбинации символов (знаков или сигналов). Кодом также называется отдельная комбинация таких символов (знаков) — слово. Для различия этих терминов, код в последнем значении ещё называется кодовым словом.

Код фиксированной длины (fixed-length code) — кодирование каждого символа производится с помощью строк одинаковой длины. Также он называется равномерным или блоковым кодом.

Код переменной длины (variable-length code) — кодирование производится с помощью строк переменной длины. Также называется неравномерным кодом.

Разделимый код — код, в котором любое слово, составленное из элементарных кодов, единственным образом разлагается на элементарные коды.

Примеры кодов

  • Азбука Морзе
  • ASCII

Префиксный код

Префиксный код — код, в котором никакое кодовое слово не является префиксом какого-то другого кодового слова. Любой префиксный код является однозначно декодируемым и разделимым. Также префиксный код иногда называют мнгновенным кодом.

Оптимальное сжатие данных, которого можно достичь с помощью кодов, всегда достижимо при использовании префиксного кода.

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

Кома-код — разновидность префиксного кода, в котором каждый символ кодируется строкой из единиц, в конце которой стоит ноль. Множество строк кода имеет вид {0,10,110,1110,11110,...}. Недостаток кома-кода в том, что элементы кода могут быть очень длинными и занимать большой объём памяти.

Рассмотрим пример кодирования с помощью префиксного кода.

Пусть U — множество исходных символов, Z — кодовый алфавит, Z* — строчки из Z. 
Код — отображение c : U [math]\rightarrow[/math] Z*. c* : U* [math]\rightarrow[/math] Z*. c*(x1x2..xn) = c(x1)c(x2)..c(xn)
U = {a,b,c}; Z = {0,1};
c(a) = 00; c(b) = 01; c(c) = 1;
Закодируем строку: abacaba
c*(abacaba) = 0001001000100

Так как такой код можно однозначно разбить на слова:

00 01 00 1 00 01 00

он является префиксным.

Примеры префиксных кодов

  • Код Хаффмана
  • Код Шеннона-Фано
  • UTF-8 — префиксный, так как является блоковым.

Ссылки

Литература

  • Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы. Построение и анализ — Издательство: «Вильямс», 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