Допустим, у нас есть сообщение «habr», которое необходимо передать без ошибок. Для этого сначала нужно наше сообщение закодировать при Кода Хэмминга. Нам необходимо представить его в бинарном виде.На этом этапе стоит определиться с, так называемой, длиной информационного слова, то есть длиной строки из нулей и единиц, которые мы будем кодировать. Допустим, у нас длина слова будет равна 16. Таким образом, нам необходимо разделить наше исходное сообщение («habr») на блоки по 16 бит, которые мы будем потом кодировать отдельно друг от друга. Так как один символ занимает в памяти 8 бит, то в одно кодируемое слово помещается ровно два ASCII символа. Итак, мы получили две бинарные строки по 16 битбит. распараллеливается, и две части сообщения («ha» и «br») кодируются независимо друг от друга. Рассмотрим, как это делается на примере первой части.
Прежде всего, необходимо вставить контрольные биты. Они вставляются в строго определённых местах — это позиции с номерами, равными степеням двойки. В нашем случае (при длине информационного слова в 16 бит) это будут позиции 1, 2, 4, 8, 16. Соответственно, у нас получилось 5 контрольных бит (выделены красным цветом)Таким образом, длина всего сообщения увеличилась на 5 бит. До вычисления самих контрольных бит, мы присвоили им значение «0».
Карева Даниил1537
03.01.2023
Задача 1. Здесь используются перестановки с повторениями. Число расставить 4 различных цифры по 4 разрядам равно 4!. Но у нас есть повторяющиеся цифры. Число 2 повторяется 2 раза, поэтому результат нужно разделить на 2!. То есть 4!/2!=24/2=12. Задача 2. Поскольку скобок нет и приоритет одинаковых операций одинаков, то они выполняются слева направо. То есть сначала считается A=>B, затем (A=>B)=>C и т.д. Переобозначим буквы A, B, C как a_1, a_2, a_3 для простоты индексации. Введем функцию f(length, result), значение которой равно количеству решений уравнения вида a_1=>a_2=>=>a_length = result. Длина цепочки из букв a_1, a_2, ..., a_length равна числу length, а параметр result может принимать значения 0 и 1. Нам по условию необходимо найти значение f(6,1), поскольку длина цепочки равна 6, а конечный результат 1. Сначала решим уравнение a_1=0 - здесь всего 1 решение, поэтому f(1,0)=1. Количество решений уравнения a_1=1 тоже 1, поэтому f(1,1)=1. Начальные условия для функции f(length, result) определены. Теперь нужно определить формулу, по которой можно будет находить следующие элементы. Рассмотрим уравнение с цепочкой длины n: a_1=>a_2=>=>a_(n-1)=>a_n = result Можно расставить в нем скобки таким образом: (a_1=>a_2=>=>a_(n-1))=>a_n = result Пусть на данном этапе известно количество решений уравнений a_1=>a_2=>=>a_(n-1) = 0 - оно равно f(n-1,0) a_1=>a_2=>=>a_(n-1) = 1 - оно равно f(n-1,1) Требуется через них выразить количество решений для цепочки длины n с результатом 0 и 1. То есть найти значения функции f(n,0) и f(n,1) Вспомним таблицу истинности для импликации. Выражение A=>B = 0 только в том случае, когда A=1 и B=0. В остальных трех случаях A=>B = 1. Посчитаем значение f(n,0): Если результат равен 0, то в цепочке длины n должно выполняться: значение в цепочке длины n-1 равно 1, а значение a_n=0. То есть f(n,0)=f(n-1,1). Посчитаем значение для f(n,1): Если результат равен 1, то в цепочке длины n должно выполняться одно из трех условий: 1) значение в цепочке длины n-1 равно 0, а значение a_n=0. Этому соответствует количество 2) значение в цепочке длины n-1 равно 0, а значение a_n=1. Этому опять же соответствует количество 3) значение в цепочке длины n-1 равно 1, а значение a_n=1. Этому соответствует количество Таким образом, складывая эти получим количество решений для f(n,1): f(n-1)=f(n-1,0)+f(n-1,0)+f(n-1,1)=2f(n-1,0)+f(n-1,1). Осталось только посчитать f(6,1): f(1,0)=1 f(1,1)=1 f(2,0)=f(1,1)=1 f(2,1)=2f(1,0)+f(1,1)=3 f(3,0)=f(2,1)=3 f(3,1)=2f(2,0)+f(2,1)=5 f(4,0)=f(3,1)=5 f(4,1)=2f(3,0)+f(3,1)=11 f(5,0)=f(4,1)=11 f(5,1)=2f(4,0)+f(4,1)=21 f(6,0)=f(5,1)=21 f(6,1)=2f(5,0)+f(5,1)=43. А вообще, можно заметить, что сумма f(n,0)+f(n,1)=2^n, поскольку это количество всевозможных комбинаций 0 и 1 для n элементов. Тогда если известно f(n,0), то f(n,1)=2^n-f(n,0). Теперь можно рассмотреть нашу последовательность: f(1,0)=1 f(1,1)=2^1-1 f(2,0)=2^1-1 f(2,1)=2^2-(2^1-1)=2^2-2^1+1 f(3,0)=2^2-2^1+1 f(3,1)=2^3-(2^2-2^1+1)=2^3-2^2+2^1-1
f(n,0)=2^(n-1)-2^(n-2)+2^(n-3)--(-1)^n * 2^0 f(n,1)=2^n-2^(n-1)++(-1)^n*2^0 Каждая из формул - сумма геометрической прогрессии с первыми членами 2^(n-1) и 2^n соответственно, с количеством членов n и n+1 соответственно и со знаменателем (-1/2). То есть f(n,0)=b1*(q^n-1)/(q-1)=2^(n-1)*((-1/2)^n-1)/(-1/2-1)=-2^n / 3 * ((-1/2)^n-1) = 2^n / 3 - 1/3 * 2^n * (-1/2)^n = 2^n / 3 - (-1)^n / 3 = (2^n - (-1)^n) / 3 f(n,1) = 2^n - f(n,0) = 2^n - (2^n - (-1)^n) / 3 = (3*2^n - 2^n + (-1)^n) / 3 = (2^(n+1) + (-1)^n) / 3. Подставим n=6, чтобы проверить. f(6,0)=(2^6 - (-1)^6) / 3 = (64 - 1) / 3 = 21. f(6,1) = (2^(6+1) + (-1)^6) / 3 = 43. ответ: 43.
Объяснение:
Допустим, у нас есть сообщение «habr», которое необходимо передать без ошибок. Для этого сначала нужно наше сообщение закодировать при Кода Хэмминга. Нам необходимо представить его в бинарном виде.На этом этапе стоит определиться с, так называемой, длиной информационного слова, то есть длиной строки из нулей и единиц, которые мы будем кодировать. Допустим, у нас длина слова будет равна 16. Таким образом, нам необходимо разделить наше исходное сообщение («habr») на блоки по 16 бит, которые мы будем потом кодировать отдельно друг от друга. Так как один символ занимает в памяти 8 бит, то в одно кодируемое слово помещается ровно два ASCII символа. Итак, мы получили две бинарные строки по 16 битбит. распараллеливается, и две части сообщения («ha» и «br») кодируются независимо друг от друга. Рассмотрим, как это делается на примере первой части.
Прежде всего, необходимо вставить контрольные биты. Они вставляются в строго определённых местах — это позиции с номерами, равными степеням двойки. В нашем случае (при длине информационного слова в 16 бит) это будут позиции 1, 2, 4, 8, 16. Соответственно, у нас получилось 5 контрольных бит (выделены красным цветом)Таким образом, длина всего сообщения увеличилась на 5 бит. До вычисления самих контрольных бит, мы присвоили им значение «0».