- •1 Вопрос
- •5.Методы решения линейных неоднородных дифференциальных уравнений первого порядка.
- •6.Числовые характеристики случайных величин.
- •2 Вопрос
- •5.Коды исправляющие ошибки. Код Хемминга
- •Как это работает.
- •Подготовка
- •Вычисление контрольных бит.
- •6.Методы шифрования информации перестановкой и полиалфавитной подстановкой. Шифрование методом замены (подстановки)
- •Одноалфавитная подстановка
- •Многоалфавитная одноконтурная обыкновенная подстановка
- •Декодирование и исправление ошибок.
- •Многоалфавитная одноконтурная монофоническая подстановка
- •Многоалфавитная многоконтурная подстановка
- •Шифрование методом перестановки
- •Простая перестановка
- •Перестановка, усложненная по таблице
- •3 Вопрос
- •5.Макроязыки и их место в языках программирования. Схема работы макропроцессора.
- •6.Ускорение работы приложений за счет программно-аппаратных решений. Ускорение работы приложений
- •Специализированные аппаратные ускорители
- •Оптимизированное по
- •Устранение избыточности кода
- •Возможности ускорения xml
- •Разрешение проблем функциональной совместимости
2 Вопрос
5.Коды исправляющие ошибки. Код Хемминга
Ко́ды Хэ́мминга — вероятно, наиболее известный из первых самоконтролирующихся и самокорректирующихся кодов. Построены применительно к двоичной системе счисления. Позволяет исправлять одиночную ошибку (ошибка в одном бите) и находить двойную.
Как это работает.
Для того, чтобы понять работу данного алгоритма, рассмотрим пример.
Подготовка
Допустим,
у нас есть сообщение «habr», которое
необходимо передать без ошибок. Для
этого сначала нужно наше сообщение
закодировать при помощи Кода Хэмминга.
Нам необходимо представить его в бинарном
виде.
На
этом этапе стоит определиться с, так
называемой, длиной информационного
слова, то есть длиной строки из нулей и
единиц, которые мы будем кодировать.
Допустим, у нас длина слова будет равна
16. Таким образом, нам необходимо разделить
наше исходное сообщение («habr») на блоки
по 16 бит, которые мы будем потом кодировать
отдельно друг от друга. Так как один
символ занимает в памяти 8 бит, то в одно
кодируемое слово помещается ровно два
ASCII символа. Итак, мы получили две бинарные
строки по 16 бит:
и
После
этого процесс кодирования распараллеливается,
и две части сообщения («ha» и «br») кодируются
независимо друг от друга. Рассмотрим,
как это делается на примере первой
части.
Прежде
всего, необходимо вставить контрольные
биты. Они вставляются в строго определённых
местах — это позиции с номерами, равными
степеням двойки. В нашем случае (при
длине информационного слова в 16 бит)
это будут позиции 1, 2, 4, 8, 16. Соответственно,
у нас получилось 5 контрольных бит
(выделены красным цветом):
Было:
Стало:
Таким
образом, длина всего сообщения увеличилась
на 5 бит. До вычисления самих контрольных
бит, мы присвоили им значение «0».
Вычисление контрольных бит.
Теперь
необходимо вычислить значение каждого
контрольного бита. Значение каждого
контрольного бита зависит от значений
информационных бит (как неожиданно), но
не от всех, а только от тех, которые этот
контрольных бит контролирует. Для того,
чтобы понять, за какие биты отвечает
каждых контрольный бит необходимо
понять очень простую закономерность:
контрольный бит с номером N контролирует
все последующие N бит через каждые N бит,
начиная с позиции N. Не очень понятно,
но по картинке, думаю, станет яснее:
Здесь
знаком «X» обозначены те биты, которые
контролирует контрольный бит, номер
которого справа. То есть, к примеру, бит
номер 12 контролируется битами с номерами
4 и 8. Ясно, что чтобы узнать какими битами
контролируется бит с номером N надо
просто разложить N по степеням двойки.
Но
как же вычислить значение каждого
контрольного бита? Делается это очень
просто: берём каждый контрольный бит и
смотрим сколько среди контролируемых
им битов единиц, получаем некоторое
целое число и, если оно чётное, то ставим
ноль, в противном случае ставим единицу.
Вот и всё! Можно конечно и наоборот, если
число чётное, то ставим единицу, в
противном случае, ставим 0. Главное,
чтобы в «кодирующей» и «декодирующей»
частях алгоритм был одинаков. (Мы будем
применять первый вариант).
Высчитав
контрольные биты для нашего информационного
слова получаем следующее:
и
для второй части:
Вот
и всё! Первая часть алгоритма завершена.
