Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Эффективность доступа и хранения данного метода зависит от того, насколько проектировщик выполняет требования, предъявляемые к хеш-функции.
Пример. Требуется для заданной последовательности значений ключа: 36, 26, 12, 5, 95 и адресного пространства от 1 до 10 построить функцию хеширования, не приводящую к коллизиям.
1. Пусть в качестве хеш-функции выбрана H(x)=x mod10 +1. Соответствие значений ключа физическим адресам представлено в табл.:
36 | 26 | 12 | 5 | 95 | |
H(x) | 7 | 7 | 3 | 6 | 6 |
При такой hash-функции будет две коллизии.
2. Пусть в качестве хеш-функции выбрана H(x)=(a+b) mod 10 + 1, где a – количество десятков в x, а b – количество единиц в x. Соответствие значений ключа физическим адресам представлено в табл.
36 | 26 | 12 | 5 | 95 | |
H(x) | 10 | 9 | 4 | 6 | 5 |
Данная хеш-функции не приводит к коллизиям.
Задания
Задание 1. В качестве ключей некоторой БД используются числовые поля целого типа. Имеется следующая последовательность ключей:
111 51 48 22 14 31 28 56 19 7 30 95 23 15 49
Размер хеш-таблицы – 20 строк. Строки нумеруются с 0. Нарисовать состояние хэш-таблицы при использовании случайного рехеширование с числами r=3, 8, 5,1
Хеш-функция: h(ai)=ai mod N
Формула для рехеширования: (h(ai)+r) mod N
Номер строки | Ключ |
0 | |
1 | |
2 | 22 |
3 | 23 |
4 | 56 |
5 | |
6 | |
7 | 19 |
8 | 48 |
9 | 49 |
10 | 7 |
11 | 111 |
12 | |
13 | 30 |
14 | 51 |
15 | 95 |
16 | 28 |
17 | 14 |
18 | 15 |
19 | 31 |
Попробуем выполнить поиск числа 56.
h(a)=56 mod 20=16 – неудачно
h(a)=(56+3) mod 20=19 - неудачно
h(a)=(56+8) mod 20=4 – удачно
Задание 2
Решим ту же задачу с использованием метода цепочек для рехеширования:
111 51 48 22 14 31 28 56 19 7 30 95 23 15 49
С использованием линейных списков | С использованием 2-х таблиц |
| ||||||
Номер строки | Ключ | Таблица объектов | Хеш-таблица | |||||
0 | Chain[2] | |||||||
1 | 1 | 111 | 2 | 0 | ||||
2 | 22 | 2 | 51 | 6 | 1 | |||
3 | 23 | 3 | 48 | 7 | 2 | 4 | ||
4 | 4 | 22 | 3 | 13 | ||||
5 | 5 | 14 | 4 | |||||
6 | 6 | 31 | 5 | |||||
7 | 7 | 7 | 28 | 6 | ||||
8 | 48->28 | 8 | 56 | 7 | 10 | |||
9 | 49 | 9 | 19 | 8 | 3 | |||
10 | 30 | 10 | 7 | 9 | 15 | |||
11 | 111->51->31 | 11 | 30 | 10 | 11 | |||
12 | 12 | 95 | 14 | 11 | 1 | |||
13 | 13 | 23 | 12 | |||||
14 | 14 | 14 | 15 | 13 | ||||
15 | 95->15 | 15 | 49 | 14 | 5 | |||
16 | 56 | 15 | 12 | |||||
17 | 16 | 8 | ||||||
18 | 17 | |||||||
19 | 19 | 18 | ||||||
19 | 9 | |||||||
При использовании метода цепочек в худшем случае все объекты могут собраться в одну цепочку и эта ситуация будет соответствовать списковому характеру объектов. В лучшем – каждая цепочка будет содержать только по одному элементы и эта ситуация будет соответствовать хранению объектов в массиве. Достоинство – необходимость одной хеш-функции, а также то, что размеры таблицы объектов и хеш-таблицы могут не совпадать.
Задание 3
Пусть коды букв имеют значения: A-1, B-2, C-3, D-4, E-5, F-6, G-7, H-8, I-9, J-10, K-11, L-12, M-13, N-14, O-15, P-16, Q-17, R-18, S-19, T-20, U-21, V-22, W-23, X-24, Y-25, Z-26. Размер хеш-таблицы N=24. Строки нумеруются с 0. Нарисовать состояние таблицы после записи в нее последовательно идентификаторов: HOME, PLACE, FACE, TABLE, KINO, RENO, PEN, MAN, GO, TRACE, EDIT, COPY, CUT, PUT, DOWN, PAGE, END, если используется случайное рехеширование с числами ri=5,3,9,7. Хеш-функция равна сумме кодов букв.
№ | Сумма кодов букв (Sum) | Sum mod 24 | |
1 | HOME | 41 | 17 |
2 | PLACE | 37 | 13 |
3 | FACE | 15 | 15 |
4 | TABLE | 40 | 16 |
5 | KINO | 49 | 1 |
6 | RENO | 52 | 4 |
7 | PEN | 35 | 11 |
8 | MAN | 28 | 4 |
9 | GO | 22 | 22 |
10 | TRACE | 47 | 23 |
11 | EDIT | 38 | 14 |
12 | COPY | 59 | 11 |
13 | CUT | 44 | 20 |
14 | PUT | 57 | 9 |
15 | DOWN | 56 | 8 |
16 | PAGE | 29 | 5 |
17 | END | 23 | 23 |
При случайном рехешировании получаем:
0 | |
1 | КINO |
2 | END |
3 | |
4 | RENO |
5 | CUT |
6 | |
7 | |
8 | DOWN |
9 | MAN |
10 | PAGE |
11 | PEN |
12 | PUT |
13 | PLACE |
14 | EDIT |
15 | FACE |
16 | TABLE |
17 | HOME |
18 | |
19 | |
20 | COPY |
21 | |
22 | GO |
23 | TRACE |
При линейном рехешировании таблица выглядит так:
0 | END |
1 | KINO |
2 | |
3 | |
4 | RENO |
5 | MAN |
6 | PAGE |
7 | |
8 | DOWN |
9 | PUT |
10 | |
11 | PEN |
12 | COPY |
13 | PLACE |
14 | EDIT |
15 | FACE |
16 | TABLE |
17 | HOME |
18 | |
19 | |
20 | CUT |
21 | |
22 | GO |
23 | TRACE |
Попробуем выполнить поиск идентификатора PAGE:
h(PAGE)=5 – неудачно.
h(PAGE)=(5+1) mod 24=6 – удачно.
Задание 4
Напишите программу на языке Паскаль, в которой для заданных текстовых файлов, содержащих идентификаторы, производится хеширование тремя разными способами и сравнение эффективности этих трех хеш-функций (функции вы выбираете сами, их можно взять из лекций, литературы или придумать самим). Размер хеш-таблицы равен размеру файла. Использовать метод случайного рехеширования. (подбирать randomом). Для каждого файла и для каждой функции нужно подсчитать среднее и максимальное количество попыток при включении значения в хеш-таблицу и сделать выводы о том, какая хеш-функция является более эффективной. Результаты эксперимента оформить в виде таблицы примерно следующего вида:
Имя и размер файла | метод | Среднее кол-во попыток | Максимальное кол-во попыток |
inp1.txt 67 элементов | 1 | ||
2 | |||
3 | |||
inp2.txt 117 элементов | 1 | ||
2 | |||
3 | |||
inp3.txt 178 элементов | 1 | ||
2 | |||
3 |
[1] С хешированием мы сталкиваемся едва ли не на каждом шагу: при работе с браузером (список Web-ссылок), текстовым редактором и переводчиком (словарь), языками скриптов (Perl, Python, PHP и др.), компилятором (таблица символов).
[2] Цепочки.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


