Самостоятельная работа / Гайд по СР ТИ
.pdf
ГАЙД ПО ВЫПОЛНЕНИЮ САМОСТОЯТЕЛЬНОЙ РАБОТЫ ПО ТИ
1 Кодирование Фано
Выписать свои имя и фамилию прописными буквами, посчитать общее количество символов в сообщении и количество уникальных символов, включая пробел. Выделите повторяющиеся буквы и посчитайте сколько раз они встречаются:
АJNQА_DАХТNGА всего 13 символов 9 уникальных символов
Записать повторно встречающиеся буквы, начиная с самой встречающейся, и далее по убыванию. Остальные символы, которые встречаются по одному разу расположить по алфавиту:
А – 4 символа N – 2 символа D – 1 символ G – 1 символ J – 1 символ
Q– 1 символ
Т– 1 символ Х – 1 символ _ – 1 символ
Столбец уникальных символов нужно разделить пополам таким образом, чтобы общее количество символов в каждой половине было примерно равным (т.е. если всего символов нечетное количество, то в одной половине будет на 1 символ больше, чем в другой). Делить можно как угодно, хоть начиная сверху, хоть снизу, главное делить таким образом на протяжении всей работы.
А – 4 |
символа |
<– тут 6 |
|
N – 2 |
символа |
||
|
|||
__________________ |
|
||
D – 1 символ |
|
||
G – 1 символ |
|
||
J – 1 символ |
<– тут 7 |
||
Q – 1 символ |
|||
Т – 1 символ |
|
||
Х – 1 символ |
|
||
_ – 1 |
символ |
|
|
Верхнюю половину записать, как нули, нижнюю половину – как единицы Этот принцип будет работать таким образом до тех пор, пока мы не сможем больше делить столбцы на половины:
А0
N0
D1
G1
J 1
Q1
Т1
Х1
_ 1
А 0 0
N 0 1
D 1 0
G 1 0
J 1 0
Q 1 1 Т 1 1 Х 1 1 _ 1 1
А |
0 |
|
0 |
|
|
|
||
N |
0 |
|
1 |
|
|
|
||
D |
1 |
|
0 |
|
0 |
|||
G |
1 |
|
0 |
|
1 |
|||
J |
1 |
|
0 |
|
1 |
|||
Q |
1 |
|
1 |
|
0 |
|||
Т |
1 |
|
1 |
|
0 |
|||
Х |
1 |
|
1 |
|
1 |
|||
_ |
|
1 |
|
1 |
|
1 |
||
|
|
|
|
|
|
|
|
|
А |
|
0 |
0 |
|
|
|
|
|
N |
|
0 |
1 |
|
|
|
|
|
D |
|
1 |
0 |
|
0 |
|
|
|
G |
|
1 |
0 |
|
1 |
|
0 |
|
J |
|
1 |
0 |
|
1 |
|
1 |
|
Q |
|
1 |
1 |
|
0 |
|
0 |
|
Т |
|
1 |
1 |
|
0 |
|
1 |
|
Х |
|
1 |
1 |
|
1 |
|
0 |
|
_ |
|
1 |
1 |
|
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
Получившиеся кодировки для удобства можно выписать в отдельный столбец.
А |
0 |
0 |
|
|
N |
0 |
1 |
|
|
D |
1 |
0 |
0 |
|
G |
1 |
0 |
1 |
0 |
J |
1 |
0 |
1 |
1 |
Q |
1 |
1 |
0 |
0 |
Т |
1 |
1 |
0 |
1 |
Х |
1 |
1 |
1 |
0 |
_ |
1 |
1 |
1 |
1 |
|
|
|
|
|
2 Вектор Крафта
Для проверки правильности кодировки проверяем выполнение неравенства Крафта (вектор Крафта):
∑2−q 1 , гдеq – количествонулейиединиц,приходящеесянабуквувкодировке
ВК=2 2−2+2−3+6 2−4=1
Чаще всего ВК получается равным единице. Если же получилось большее число, то перепроверьте предыдущие шаги.
3 Кодирование Хэмминга
Для выполнения этого этапа советую воспользоваться сайтом по ссылке: https://allcalc.ru/node/1977
Первую букву фамилии (заглавную!!) переведите в двоичный код в кодировке UTF-16. Первые пять нулей числа не имеют значения, их в последствии можно не использовать в расчетах. Посчитать количество символов без первых пяти нулей.
Б → 0000010000010001 m = 11
Для того, чтобы узнать количество контрольных битов, нужно, чтобы выполнялось следующее неравенство:
2r m+r +1 , гдеr – количествоконтрольныхбит
Методом подбора выясняется, что для выбранной буквы r = 4:
24 11+4+1;
16 16
Сумма m и r – количество разрядов двоичного числа, их должно быть больше 14, так как по заданию в 14 разряде мы будем делать намеренную ошибку…
Выписываем все разряды в строку. Те разряды, которые являются степенью двойки (1, 2, 4, 8 и т. д.), оставляем пустыми; над оставшимися разрядами записываем посимвольно двоичное число:
|
|
1 |
|
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
23 |
|
|
|
|
|
|
|
Рассчитываем каждый контрольный бит. Для каждого контрольного бита свое особое правило расчета, но на самом деле логику легко проследить:
Контрольный бит 1
Рассчитываем сумму всех нечетных «значимых битов», нужные выделены зеленым цветом, все контрольные биты на данном этапе принимаются за ноль:
|
|
1 |
|
0 |
|
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
3 |
4 |
5 |
|
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
0 + 1 + 0 + 0 + 0 + 1 + 0 + 1 = 3 |
|
|
|
|
||||||
Если сумма нечетная, то бит принимает значение «1», иначе бит принимает значение «0». Это условие распространяется на все правила для расчета контрольных битов.
Исходя из полученной суммы контрольный бит 1 принимает значение «1».
Контрольный бит 2
Для контрольного бита 2 используется правило суммы «два через два», начиная со 2 бита:
|
|
1 |
|
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
23 |
|
|
|
|
|
|
|
0 + 1 + 0 + 0 + 0 + 1 + 0 + 1 = 3 => контрольный бит 2 принимает значение «1»
Контрольный бит 4
Для контрольного бита 4 используется правило суммы «четыре через четыре», начиная с 4 бита:
|
|
1 |
|
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
23 |
|
|
|
|
|
|
|
0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 = 1 => контрольный бит 4 принимает значение «1»
Контрольный бит 8
Для контрольного бита 8 используется правило суммы «восемь через восемь», начиная с 8 бита. Если у вас осталось меньше 8 битов после контрольного бита, то ничего страшного, просто суммируйте все до конца:
|
|
1 |
|
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
23 |
|
|
|
|
|
|
|
0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 = 2 => контрольный бит 8 принимает значение «0»
Подставляем найденные значения в ряд:
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
23 |
|
|
|
|
|
|
|
Предположим, что в 14 разряде была сделана ошибка (то есть ставим противоположное значение):
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
20 |
21 |
|
22 |
|
|
|
23 |
|
|
|
|
|
|
|
С учетом допущенной ошибки и полученных ранее правильных значений контрольных битов пересчитаем контрольные биты:
Контрольный бит 1: 1 + 1 + 0 + 0 + 0 + 1 + 0 + 1 = 4 => принимает значение «0» Контрольный бит 2: 1 + 1 + 0 + 0 + 0 + 1 + 1 + 1 = 5 => принимает значение «1» Контрольный бит 4: 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 = 3 => принимает значение «1» Контрольный бит 8: 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 = 3 => принимает значение «1»
Выпишем полученные новые контрольные биты в столбик, а затем в строку читая снизу вверх. Переводим полученное двоичное число в десятичное, полученное число показывает в каком разряде была допущена ошибка:
1)0 ↑
2)1 ↑
4)1 ↑
8)1 ↑
11102 = 1410
