Кодирование информации — различия между версиями
Nechaev (обсуждение | вклад) |
|||
Строка 2: | Строка 2: | ||
Обычно в процессе кодирования информация преобразуется из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической переработки. | Обычно в процессе кодирования информация преобразуется из формы, удобной для непосредственного использования, в форму, удобную для передачи, хранения или автоматической переработки. | ||
В более узком смысле кодированием информации называют представление информации в виде кода. | В более узком смысле кодированием информации называют представление информации в виде кода. | ||
+ | Средством кодирования служит таблица соответствия знаковых систем, которая устанавливает взаимно однозначное соответствие между знаками или группами знаков двух различных знаковых систем. | ||
== Код == | == Код == | ||
− | Код | + | '''Код''' — правило (алгоритм) сопоставления каждому конкретному сообщению строго определённой комбинации символов (знаков или сигналов). Кодом также называется отдельная комбинация таких символов (знаков) — слово. Для различия этих терминов, код в последнем значении ещё называется ''кодовым словом''. |
+ | |||
+ | '''Код фиксированной длины''' (fixed-length code) {{---}} кодирование каждого символа производится с помощью строк одинаковой длины. Также он называется ''равномерным'' или ''блоковым'' кодом. | ||
+ | |||
+ | '''Код переменной длины''' (variable-length code) {{---}} кодирование производится с помощью строк переменной длины. Также называется ''неравномерным кодом''. | ||
+ | |||
+ | '''Разделимый код''' {{---}} код, в котором любое слово, составленное из элементарных кодов, единственным образом разлагается на элементарные коды. | ||
==== Примеры кодов ==== | ==== Примеры кодов ==== | ||
Строка 13: | Строка 20: | ||
== Префиксный код == | == Префиксный код == | ||
− | Префиксный код — код, не | + | '''Префиксный код''' — код, в котором никакое кодовое слово не является префиксом какого-то другого кодового слова. |
− | Любой префиксный код является однозначно декодируемым. | + | Любой префиксный код является однозначно декодируемым и разделимым. Также префиксный код иногда называют ''мнгновенным кодом''. |
+ | |||
+ | Оптимальное сжатие данных, которого можно достичь с помощью кодов, всегда достижимо при использовании префиксного кода. | ||
+ | |||
+ | Предпочтение префиксным кодам отдается из-за того, что они упрощают декодирование. Поскольку никакое кодовое слово не выступает в роли префикса другого, кодовое слово, с которого начинается закодированный файл, определяется однозначно. Начальное кодовое слово, с которого начинается закодированный файл, определяется однозначно. Начальное кодовое слово легко идентифицировать, преобразовать его в исходный символ и продолжить декодирование оставшейся части закодированного файла. | ||
+ | |||
+ | '''Кома-код''' {{---}} разновидность префиксного кода, в котором каждый символ кодируется строкой из единиц, в конце которой стоит ноль. Множество строк кода имеет вид {0,10,110,1110,11110,...}. Недостаток кома-кода в том, что элементы кода могут быть очень длинными и занимать большой объём памяти. | ||
+ | |||
+ | Рассмотрим пример кодирования с помощью префиксного кода. | ||
− | + | Пусть U {{---}} множество исходных символов, Z {{---}} кодовый алфавит, Z* {{---}} строчки из Z. | |
− | + | Код {{---}} отображение 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}; |
− | + | 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 : UZ*. c* : U* 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