Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Программирование – 1 курс осень 2021 – 11 занятие

ТиМПИ
December 03, 2021

Программирование – 1 курс осень 2021 – 11 занятие

ТиМПИ

December 03, 2021
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. 2/25 2/25 Шифрование Шифрование — обратимое преобразование информации в целях

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

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

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

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

    Представляем в виде многочлена: • Кодирование (через порождающий многочлеен): или [1010] х [1011] • Закодированное слово: 1001110 • Декодирование:
  6. 11/25 11/25 Ассоциативные массивы #include <map> #include <multimap> • Имеет

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

    красной, либо чёрной. • Бесцветных вершин, или вершин другого цвета быть не может. • Каждый лист (NIL) имеет чёрный цвет. • Если вершина красная, то оба её потомка – чёрные. • Все пути от корня к листьям содержат одинаковое число чёрных вершин. Источник:https://rsdn.org/article/alg/binstree.xml
  8. 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 )
  9. 15/25 15/25 Практическое задание 1 (до 10.12.2021) Реализовать структуру ассоциативного

    массива и методы для работы с ней: 1. Инициализация ассоциативного массива с клавиатуры/кода программы (метод). 2. Поиск по ключу элемента. 3. Вывод размера ассоциативного массива. 4. Вставка нового элемента ассоциативного массива (по принципу бинарного дерева поиска). 5. Удаление элемента по ключу (с сохранением целостности массива).
  10. 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)
  11. 17/25 17/25 Хеш-таблица: определение Хеш-таблица — структура данных, предназначенная для

    реализации ассоциативного массива, в котором адресация реализуется при помощи хеш-функции. Хеш-функция – функция, преобразующая ключ Х в некоторый индекс i = h(X), где h(X) – хеш X. Процесс создания индексов хеш-таблицы называется хешированием. Вопрос: как подобрать h()?
  12. 20/25 20/25 Открытое хеширование Источник: https://kvodo.ru/hash-table.html Хранение не в таблице,

    а в связном списке: • & — адрес элемента списка; • $ — данные; • * — указатель (ссылка). Сложность: O(1) в лучшем О(N) в худшем
  13. 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 ячеек таблицы заполнены.
  14. 22/25 22/25 Хеш-таблицы: C++ Методы для работы: • Множество на

    хеш-таблицах: https://www.cplusplus.com/reference/unordered_set/unordered_set/ • Ассоциативный массив: https://www.cplusplus.com/reference/unordered_map/unordered_map/
  15. 23/25 23/25 Практическое задание 2 (до 10.12.2021) Реализовать структуру хеш-таблицы

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

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