Алгоритмы и структуры...
TRANSCRIPT
![Page 2: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/2.jpg)
Таблица
Элемент = Ключ + Данные
Ключи у разных элементов не совпадают
Операции
Search (Key)
Insert (Key, Value)
Remove (Key)
Таблицы и деревья
2
![Page 3: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/3.jpg)
Виды таблиц
С прямой адресацией
Таблицы и деревья
3
![Page 4: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/4.jpg)
Таблицы с прямой адресацией
Ключ = Целое неотрицательное число или может быть кнему преобразован (взаимно-однозначно)
Ключи не слишком большие
Таблицы и деревья
4
![Page 5: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/5.jpg)
Таблицы с прямой адресацией
Ключ = Целое неотрицательное число или может быть кнему преобразован (взаимно-однозначно)
Ключи не слишком большие
=> Используем ключ как индекс массива, а данные хранимв этом массиве
Достоинства, Недостатки?
Таблицы и деревья
5
![Page 6: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/6.jpg)
Таблицы с прямой адресацией
Ключ = Целое неотрицательное число или может быть кнему преобразован (взаимно-однозначно)
Ключи не слишком большие
=> Используем ключ как индекс массива, а данные хранимв этом массиве
Достоинства: трудоёмкость всюду O(1)
Недостатки?
Таблицы и деревья
6
![Page 7: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/7.jpg)
Таблицы с прямой адресацией
Ключ = Целое неотрицательное число или может быть кнему преобразован (взаимно-однозначно)
Ключи не слишком большие
=> Используем ключ как индекс массива, а данные хранимв этом массиве
Достоинства: трудоёмкость всюду O(1)
Недостатки: ресурсоёмкость O(MaxKey)
Таблицы и деревья
7
![Page 8: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/8.jpg)
Виды таблиц
С прямой адресацией
Хэш-таблицы
Используем для индексации hash(key) или hash(key) % 2N
Таблицы и деревья
8
![Page 9: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/9.jpg)
Виды таблиц
С прямой адресацией
Хэш-таблицы
Используем для индексации hash(key) или hash(key) % 2N
В отличие от случая с прямой адресацией, здесь не требуетсявзаимной однозначности
Можем управлять размером нашего массива
НО! Коллизии
Таблицы и деревья
9
![Page 10: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/10.jpg)
Виды таблиц
С прямой адресацией
Хэш-таблицы: как бороться с коллизиями?
Таблицы и деревья
10
![Page 11: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/11.jpg)
Виды таблиц
С прямой адресацией
Хэш-таблицы: как бороться с коллизиями?
С помощью цепочек
Каждому значению кода ставится в соответствие не одна параКлюч + Значение, а несколько, объединённых в связанный список
Достоинства = Размерность исходного массива ограничивается
Недостатки = ?
Таблицы и деревья
11
![Page 12: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/12.jpg)
Виды таблиц
С прямой адресацией
Хэш-таблицы: как бороться с коллизиями?
С помощью цепочек
Каждому значению кода ставится в соответствие не одна параКлюч + Значение, а несколько, объединённых в связанный список
Достоинства = Размерность исходного массива ограничивается
Недостатки = При фиксированной размерности массиватрудоёмкость операций O(N) – в общем случае O(1 + N / m), где m – размерность массива
Как с этим бороться?
Таблицы и деревья
12
![Page 13: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/13.jpg)
Виды таблиц
С прямой адресацией
Хэш-таблицы: как бороться с коллизиями?
С помощью цепочек
Каждому значению кода ставится в соответствие не одна пара Ключ + Значение, а несколько, объединённых в связанный список
Достоинства = Размерность исходного массива ограничивается
Недостатки = При фиксированной размерности массива трудоёмкостьопераций O(N) -- в общем случае O(1 + N / m), где m – размерностьмассива
Как с этим бороться? Понятно как – изменять размерность массивадинамически
Таблицы и деревья
13
![Page 14: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/14.jpg)
Таблица с открытой адресацией
Нет никаких цепочек и связанных списков
Всё хранится в едином массиве
Если есть возможность, хэш-код (по модулю) используемкак индекс в массиве
Если возникает коллизия, то сдвигаем
Таблицы и деревья
14
![Page 15: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/15.jpg)
HASH-INSERT(array[m], key)
i = hash(key) % m
start = i
do:
if (array[i] == null):
array[i] = key
return i
i = (i + 1) % m
while (i != start)
Error(“Overflow”)
Таблицы и деревья
15
![Page 16: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/16.jpg)
HASH-INSERT: пример
• Используем 3 бита хэша и массив из 8 элементов
• В качестве ключа используем символ
NN NN NN NN NN NN NN NN
Таблицы и деревья
16
![Page 17: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/17.jpg)
HASH-INSERT: пример
• Используем 3 бита хэша и массив из 8 элементов
• В качестве ключа используем символ
NN NN NN NN NN NN NN NNNN NN 2A NN NN 5B NN 7C
Таблицы и деревья
17
![Page 18: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/18.jpg)
HASH-INSERT: пример
• Используем 3 бита хэша и массив из 8 элементов
• В качестве ключа используем символ
NN NN NN NN NN NN NN NNNN NN 2A NN NN 5B NN 7C
NN NN 2A 2D NN 5B NN 7C
Таблицы и деревья
18
![Page 19: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/19.jpg)
HASH-SEARCH(array[m], key)
i = hash(key) % m
start = i
do:
if (array[i] == key):
return i
if (array[i] == null):
return null
i = (i + 1) % m
while (i != start)
return null
Таблицы и деревья
19
![Page 20: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/20.jpg)
HASH-DELETE
• Реализация «в лоб» не проходит
NN NN NN NN NN NN NN NN
NN NN 2A NN NN 5B NN 7C
NN NN 2A 2D NN 5B NN 7C
Таблицы и деревья
20
![Page 21: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/21.jpg)
HASH-DELETE
• Реализация «в лоб» не проходит
NN NN NN NN NN NN NN NN
NN NN 2A NN NN 5B NN 7C
NN NN 2A 2D NN 5B NN 7C
// Теперь стираем 2A
NN NN NN 2D NN 5B NN 7C
Таблицы и деревья
21
![Page 22: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/22.jpg)
HASH-DELETE
• Реализация «в лоб» не проходит
NN NN NN NN NN NN NN NN
NN NN 2A NN NN 5B NN 7C
NN NN 2A 2D NN 5B NN 7C
// Теперь стираем 2A
NN NN NN 2D NN 5B NN 7C
// И ищем 2D – NOT FOUND!!!
Таблицы и деревья
22
![Page 23: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/23.jpg)
HASH-DELETE
• А как «не в лоб»? Отдельный вариант “DD” -- DELETED
NN NN NN NN NN NN NN NN
NN NN 2A NN NN 5B NN 7C
NN NN 2A 2D NN 5B NN 7C
// Теперь стираем 2A
NN NN DD 2D NN 5B NN 7C
Таблицы и деревья
23
![Page 24: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/24.jpg)
HASH-DELETE
• А как «не в лоб»? Отдельный вариант “DD” – DELETED
• И при поиске DD не считается null
NN NN NN NN NN NN NN NN
NN NN 2A NN NN 5B NN 7C
NN NN 2A 2D NN 5B NN 7C
// Теперь стираем 2A
NN NN DD 2D NN 5B NN 7C
Таблицы и деревья
24
![Page 25: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/25.jpg)
Таблица с открытой адресацией
Трудоёмкость операций зависит от коэффициентазаполнения A = n / m (n = число элементов, m = размерность масссива)
Таблицы и деревья
25
![Page 26: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/26.jpg)
Таблица с открытой адресацией
Трудоёмкость операций зависит от коэффициентазаполнения A = n / m (n = число элементов, m = размерность масссива)
И равна ~ 1 / (1 – A) для большинства операций
Таблицы и деревья
26
![Page 27: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/27.jpg)
Таблица с открытой адресацией
Трудоёмкость операций зависит от коэффициентазаполнения A = n / m (n = число элементов, m = размерность масссива)
И равна ~ 1 / (1 – A) для большинства операций
Например, при таблице, заполненной на четверть, мы имеем трудоёмкость 4 / 3
Таблицы и деревья
27
![Page 28: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/28.jpg)
Таблица с открытой адресацией
Трудоёмкость операций зависит от коэффициентазаполнения A = n / m (n = число элементов, m = размерность масссива)
И равна ~ 1 / (1 – A) для большинства операций
Например, при таблице, заполненной на четверть, мы имеем трудоёмкость 4 / 3
А наполовину – уже 2
Таблицы и деревья
28
![Page 29: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/29.jpg)
Таблица с открытой адресацией
Трудоёмкость операций зависит от коэффициента заполненияA = n / m (n = число элементов, m = размерность масссива)
И равна ~ 1 / (1 – A) для большинства операций
Например, при таблице, заполненной на четверть, мы имеем трудоёмкость 4 / 3
А наполовину – уже 2
А на три четверти – уже 4
И наконец, если заполнены все элементы, кроме одного, тотребуется m операций
Таблицы и деревья
29
![Page 30: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/30.jpg)
Таблица с открытой адресацией
Последовательности проб: как мы переходим от ячейки кячейке, если не нашли то, что нужно, в ячейке, соответствующей хэш-коду
30
![Page 31: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/31.jpg)
Таблица с открытой адресацией
Последовательности проб
H = hashCode % N, N = размер таблицы
Линейная: H, H+1, H+2, …, N-1, 0, 1, 2, …, H-1
Рассмотренный нами вариант
31
![Page 32: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/32.jpg)
Таблица с открытой адресацией
Последовательности проб
H = hashCode % N, N = размер таблицы
Линейная: H, H+1, H+2, …, N-1, 0, 1, 2, …, H-1
Двойное хэширование: H, H+s, H+2s, … (% N), N и s – взаимно простые(обычно достигается выбором простого N или N=2P), s = anotherHashCode(key)
32
![Page 33: Алгоритмы и структуры данныхkspt.icc.spbstu.ru/media/files/2019/asd/06_Tables.pdfТаблица Элемент= Ключ+ Данные Ключиуразныхэлементовнесовпадают](https://reader033.vdocuments.pub/reader033/viewer/2022052017/602f734143202170c21c0568/html5/thumbnails/33.jpg)
Итоги
Рассмотрено
Таблицы и хэш-таблицы
На основе цепочек
С открытой адресацией
Далее
Графовые алгоритмы
Таблицы и деревья
33