Linked lists. Односвязный и двусвязный списки. Концепция хеш-таблицы

Содержание

Слайд 2

Операции над списками

Операции над списками

Слайд 3

Random Access Memory У каждой ячейки свой адрес Быстрый доступ к

Random Access Memory
У каждой ячейки свой адрес
Быстрый доступ к ячейке по

адресу
Поддержка адресной арифметики
Слайд 4

Array Сплошной массив элементов в памяти Задан адрес начального элемента Быстрое

Array
Сплошной массив элементов в памяти
Задан адрес начального элемента
Быстрое вычисление адреса элемента

по индексу
Невозможность расширения
Сложность операций:
Слайд 5

Linked lists once again…. Произвольное расположение элементов Возможность расширения Медленный доступ по индексу:

Linked lists once again….
Произвольное расположение элементов
Возможность расширения
Медленный доступ по индексу:

Слайд 6

Формулировка проблемы Необходимость быстрого поиска данных в огромных массивах Где применить:

Формулировка проблемы

Необходимость быстрого поиска данных в огромных массивах
Где применить:
Справочники
Базы данных пользователей
Реализация

множеств
Ассоциативные массивы
Желаемая сложность выполнения операций:
Слайд 7

Создание баз данных логинов-паролей Огромное количество пользователей системы Время доступа –

Создание баз данных логинов-паролей

Огромное количество пользователей системы
Время доступа – критический

параметр
Огромное количество возможных комбинаций
Доступ по индексу не требуется
Безопасность хранения данных
Слайд 8

База данных телефонных номеров Ограниченное количество всевозможных номеров Ключевой параметр –

База данных телефонных номеров

Ограниченное количество всевозможных номеров
Ключевой параметр – скорость поиска
Каждый

номер уникален
Относительно небольшое количество номеров реально задействовано
База данных постоянно пополняется
Слайд 9

База данных телефонных номеров Решение – список Проблемы: Очень долгий поиск Решение – огромный массив

База данных телефонных номеров

Решение – список
Проблемы:
Очень долгий поиск
Решение – огромный массив

Слайд 10

Слайд 11

База данных телефонных номеров Решение – список Проблемы: Очень долгий поиск

База данных телефонных номеров

Решение – список
Проблемы:
Очень долгий поиск
Решение – огромный массив
Проблемы:
Массив

занимает очень много места
Большое количество полей массива не заполнено
Слайд 12

Концепция Хеш-таблицы Массив фиксированной длинны Положение элемента определяется хеш-функцией Отображение элементов

Концепция Хеш-таблицы

Массив фиксированной длинны
Положение элемента определяется хеш-функцией
Отображение элементов на множество индексов

не взаимно-однозначное
Достоинства:
Занимает относительно мало места
Быстрый поиск элемента
Недостатки:
Не сохраняется порядок
Не эффективны при малом количестве элементов
В одну ячейку могут попасть много элементов
Слайд 13

Организация хеш-таблицы и проблема коллизий

Организация хеш-таблицы и проблема коллизий

Слайд 14

Решение проблемы коллизий Метод цепочек (закрытая адресация) Элементы оформлены в список

Решение проблемы коллизий

Метод цепочек (закрытая адресация)

Элементы оформлены в список
Поиск элемента в

списке
Произвольный размер таблицы

Открытая адресация

Фиксированный размер таблицы
Вставка элемента в ближайшую свободную ячейку
Сложное удаление элемента
Порядок просмотра элементов – последовательность проб

Слайд 15

Закрытая адресация

Закрытая адресация

 

Слайд 16

Закрытая адресация

Закрытая адресация

Слайд 17

Открытая адресация

Открытая адресация

 

Слайд 18

Открытая адресация

Открытая адресация

Слайд 19

Последовательность проб: пробивание Линейное пробирование Квадратичное пробирование

Последовательность проб: пробивание

Линейное пробирование

 

Квадратичное пробирование

 

Слайд 20

Последовательность проб: double hashing

Последовательность проб: double hashing

 

Слайд 21

Слайд 22

Хеширование Хеширование (англ. hashing) — преобразование массива входных данных произвольной длины

Хеширование

Хеширование (англ. hashing) — преобразование массива входных данных произвольной длины в

битовую строку фиксированной длины, выполняемое определённым алгоритмом.
Хеш-функция – функция, реализующая алгоритм хеширования
Хеш (хеш-сумма, хеш-код) – результат выполнения хеширования
Слайд 23

Хеш-функции

Хеш-функции

Слайд 24

Хеш-функции Результат применения хеш-функции имеет фиксированную длину При небольшом изменении входных

Хеш-функции

Результат применения хеш-функции имеет фиксированную длину
При небольшом изменении входных данных существенно

меняется результат
Нет взаимно-однозначного соответствия между входными данными и ответом
Ключевые свойства хеш-функций:
Вычислительная сложность
Разрядность
Криптостойкость
Слайд 25

Хорошие хеш-функции Свойства «хорошоих» хеш-функций: Минимальное количество коллизий Равномерное распределение ответов

Хорошие хеш-функции

Свойства «хорошоих» хеш-функций:
Минимальное количество коллизий
Равномерное распределение ответов
Быстрое вычисление
Идеальная хеш-функция –

хеш-функция которая отображает каждый ключ из набора S во множество целых чисел без коллизий
Слайд 26

Применение хеш-функций Хранение и поиск данных Компьютерная графика Контрольные суммы Информационная безопасность

Применение хеш-функций

Хранение и поиск данных
Компьютерная графика
Контрольные суммы
Информационная безопасность

Слайд 27

Примеры хеш-функций

Примеры хеш-функций

 

Слайд 28

Примеры хеш-функций

Примеры хеш-функций

 

Слайд 29

Примеры хеш-функций XOR – хеширование Не криптостойкий Отсутствует лавинный эффект

Примеры хеш-функций

XOR – хеширование
Не криптостойкий
Отсутствует лавинный эффект

Слайд 30

Примеры хеш-функций

Примеры хеш-функций

 

Слайд 31

Примеры хеш-функций Семейство MD (Message Digest) MD4 (взломан) MD5 (взломан) MD6

Примеры хеш-функций

Семейство MD (Message Digest)
MD4 (взломан)
MD5 (взломан)
MD6
Семейство SHA (Secure Hash Algorithm)
SHA-1 (взломан)
SHA-2 (взломан)
SHA-224,

SHA-256, SHA-384, SHA-512, SHA-512/256, SHA-512/224
SHA-3 (Keccak)
Слайд 32

Слайд 33

Слайд 34

Слайд 35

Слайд 36

Сравнение производительности Добавление 10000 элементов

Сравнение производительности Добавление 10000 элементов

Слайд 37

Сравнение производительности Поиск несуществующего элемента

Сравнение производительности Поиск несуществующего элемента

Слайд 38

Сравнение производительности Поиск 1000 случайных элементов

Сравнение производительности Поиск 1000 случайных элементов

Слайд 39

Сравнение производительности Поиск 1000 существующих элементов

Сравнение производительности Поиск 1000 существующих элементов

Слайд 40

Слайд 41

Встроенные хеш-таблицы в Python Словари (dict) Ассоциативный массив Хранит пары ключ-значение

Встроенные хеш-таблицы в Python

Словари (dict)
Ассоциативный массив
Хранит пары ключ-значение
Быстрый поиск по ключам
Множества

(set)
Операции над множествами
Быстрый поиск элемента