Slide 1

Slide 1 text

3 декабря 2021 [email protected] Олисеенко Валерий Дмитриевич Ассистент кафедры информатики Шифрование. Хеш-таблицы. Ассоциативные массивы.

Slide 2

Slide 2 text

2/25 2/25 Шифрование Шифрование — обратимое преобразование информации в целях сокрытия от неавторизованных лиц, с предоставлением, в это же время, авторизованным пользователям доступа к ней. С помощью шифрования обеспечиваются три состояния безопасности информации: ● Конфиденциальность – для скрытия информации от неавторизованных пользователей при передаче или при хранении. ● Целостность – для предотвращения изменения информации при передаче или хранении. ● Идентифицируемость – шифрование используется для аутентификации источника информации и предотвращения отказа отправителя информации от того факта, что данные были отправлены именно им.

Slide 3

Slide 3 text

3/25 3/25 Вопрос Какие способы шифрования знаете Вы?

Slide 4

Slide 4 text

4/25 4/25 Шифр знакомый с детства

Slide 5

Slide 5 text

5/25 5/25 Избыточное кодирование 1/2 Пример возникновения проблем при передаче информации Избыточное кодирование — вид кодирования, использующий избыточное количество информации с целью последующего контроля целостности данных при записи/воспроизведении информации или при её передаче по линиям связи. Параметры помехоустойчивого кодирования: ● Скорость кода R = k/n=k/m+k. ● Кратность обнаруживаемых ошибок – количество ошибочных символов, которые код может обнаружить. ● Кратность исправляемых ошибок – количество ошибочных символов, которые код может исправить (обозначается буквой t).

Slide 6

Slide 6 text

6/25 6/25 Избыточное кодирование 2/2

Slide 7

Slide 7 text

7/25 7/25 Код Хэмминга Исходное слово: 1110110011100000 Избыточность: код длиной n необходимо увеличить на log2(n)+1 битов, для того, чтобы можно было обнаружить и исправить одну ошибку.(в нашем случае 4 дополнительных контрольных бита) Код Хэмминга — наиболее известный из первых самоконтролирующихся и самокорректирующихся избыточных кодов.

Slide 8

Slide 8 text

8/25 8/25 Код Хэмминга: кодирование Исходное слово: 1110110011100000

Slide 9

Slide 9 text

9/25 9/25 Код Хэмминга: декодирование Принятое слово: 111111011110111000000 т.е. без кодирования получили бы “оа” Итоговое слово (после исправления ошибки): 1110110011100000 Сумма индексов не совпавших битов: 1 + 2 + 8 = 11

Slide 10

Slide 10 text

10/25 10/25 Код Хэмминга: мат. подход Исходное слово: 1010 ● Представляем в виде многочлена: ● Кодирование (через порождающий многочлеен): или [1010] х [1011] ● Закодированное слово: 1001110 ● Декодирование:

Slide 11

Slide 11 text

11/25 11/25 Ассоциативные массивы #include #include • Имеет вид: «Ключ» – «Значение». • Реализация в компьютере: красно-чёрные деревья. • Асимптотическая сложность поиска, вставки и удаления: О(logN).

Slide 12

Slide 12 text

12/25 12/25 Красно-чёрные деревья • Каждая вершина может быть либо красной, либо чёрной. • Бесцветных вершин, или вершин другого цвета быть не может. • Каждый лист (NIL) имеет чёрный цвет. • Если вершина красная, то оба её потомка – чёрные. • Все пути от корня к листьям содержат одинаковое число чёрных вершин. Источник:https://rsdn.org/article/alg/binstree.xml

Slide 13

Slide 13 text

13/25 13/25 Работа с map Задание и инициализация: Вывод:

Slide 14

Slide 14 text

14/25 14/25 Основные операторы • empty() — возвращает истину, если размер отображения 0; • size() — возвращает число элементов; • max_size() — максимально возможный размер отображения. • count(key) — число элементов соответствующих указанному ключу. • find(key) — итератор на первый элемент с указанным ключом; • lower_bound(key) — итератор на первый элемент, чей ключ >= указанному ключу; • upper_bound(key) — итератор на первый элемент, чей ключ > указанного ключа; • equal_range(key) — диапазон элементов, чей ключ == указанному ключу; • erase (key) — удаление элемента. Не так if( mymap["one"] == 0), а так if( mymap.count("one") == 0 )

Slide 15

Slide 15 text

15/25 15/25 Практическое задание 1 (до 10.12.2021) Реализовать структуру ассоциативного массива и методы для работы с ней: 1. Инициализация ассоциативного массива с клавиатуры/кода программы (метод). 2. Поиск по ключу элемента. 3. Вывод размера ассоциативного массива. 4. Вставка нового элемента ассоциативного массива (по принципу бинарного дерева поиска). 5. Удаление элемента по ключу (с сохранением целостности массива).

Slide 16

Slide 16 text

16/25 16/25 Хеш-таблица: теоретическая оценка Вставка Удаление Поиск Массив O(N) O(N) O(N) Сортированный массив O(N) O(N) O(logN) Список O(1) O(1) O(N) Бинарное дерево O(logN) O(logN) O(logN) Хеш таблица O(1) O(1) O(1)

Slide 17

Slide 17 text

17/25 17/25 Хеш-таблица: определение Хеш-таблица — структура данных, предназначенная для реализации ассоциативного массива, в котором адресация реализуется при помощи хеш-функции. Хеш-функция – функция, преобразующая ключ Х в некоторый индекс i = h(X), где h(X) – хеш X. Процесс создания индексов хеш-таблицы называется хешированием. Вопрос: как подобрать h()?

Slide 18

Slide 18 text

18/25 18/25 Хеш-таблица: представление Вопрос: что делать в случае совпадения моделей двух товаров?

Slide 19

Slide 19 text

19/25 19/25 Хеш-таблица: коллизии Коллизии Открытое хеширование (Метод цепочек) Закрытое хеширование (Открытая адресация)

Slide 20

Slide 20 text

20/25 20/25 Открытое хеширование Источник: https://kvodo.ru/hash-table.html Хранение не в таблице, а в связном списке: • & — адрес элемента списка; • $ — данные; • * — указатель (ссылка). Сложность: O(1) в лучшем О(N) в худшем

Slide 21

Slide 21 text

21/25 21/25 Закрытое хеширование Источник: https://kvodo.ru/hash-table.html 1) Пусть имеется пустая хеш-таблица T размера M, массив A размера N (M≥N) и хеш-функция h(), пригодная для обработки ключей массива A; 2) Элемент xi , ключ которого keyi , помещается в одну из ячеек хеш-таблицы, руководствуясь следующим правилом: a) если h(keyi ) – номер свободной ячейки таблицы T, то в последнюю записывается xi ; b) если h(keyi ) – номер уже занятой ячейки таблицы T, то на занятость проверяется другая ячейка, если она свободна то xi заноситься в нее, иначе вновь проверяется другая ячейка, и так до тех пор, пока не найдется свободная или окажется, что все M ячеек таблицы заполнены.

Slide 22

Slide 22 text

22/25 22/25 Хеш-таблицы: C++ Методы для работы: • Множество на хеш-таблицах: https://www.cplusplus.com/reference/unordered_set/unordered_set/ • Ассоциативный массив: https://www.cplusplus.com/reference/unordered_map/unordered_map/

Slide 23

Slide 23 text

23/25 23/25 Практическое задание 2 (до 10.12.2021) Реализовать структуру хеш-таблицы (любым способом) и методы для работы с ней: 1) Инициализация хеш-таблицы с клавиатуры/кода программы (метод). 2) Поиск элемента. 3) Вывод размера хеш-таблицы. 4) Вставка нового элемента хеш-таблицы. 5) Удаление элемента (с сохранением целостности таблицы).

Slide 24

Slide 24 text

24/25 24/25 Домашнее задание 2 (до 17.12.2021) 1) (Легко) Реализовать ассоциативный массив (см. слайд 15) и добавить функцию для вывода всего дерева в консоль. 2) (Medium) Реализовать ассоциативный массив (см. слайд 15) и добавить функции для записи в файл результата построенного массива, и для чтения подобного массива из файла. 3) (Hard) Реализуйте ассоциативный массив используя красно-чёрные деревья и методы для работы с ним: • инициализация ассоциативного массива с клавиатуры/кода программы (метод); • поиск элемента по ключу; • вывод размера ассоциативного массива; • вставка нового элемента ассоциативного массива (по принципу бинарного дерева поиска); • удаление элемента по ключу (с сохранением целостности массива).

Slide 25

Slide 25 text

3 декабря 2021 [email protected] Олисеенко Валерий Дмитриевич Ассистент кафедры информатики Шифрование. Хеш-таблицы. Ассоциативные массивы.