|
1 |
| -# hashing-algorithms |
| 1 | +# hashing-algorithms |
| 2 | + |
| 3 | +## Лабораторная работа №1 Построение идеальной хеш-таблицы (без коллизий). |
| 4 | +Целью данной работы является сравнение следующих подходов: |
| 5 | +1) Квадратичный подход к построению идеальной хеш-таблицы; (см. Кормен, 3-е издание, |
| 6 | +11.5 Идеальное хеширование, или видео запись) |
| 7 | +2) Двух-уровневый подход к построению идеальной хеш-таблицы; (см. Кормен, 3-е издание, |
| 8 | +11.5 Идеальное хеширование, или видео запись) |
| 9 | +3) (опционально) Графовый подход к построению идеальной хеш-таблицы |
| 10 | +(см. https://habrahabr.ru/post/254431/, вот исходная статья, обязательно посмотрите |
| 11 | +http://cmph.sourceforge.net/papers/chm92.pdf). |
| 12 | +Что измеряется? |
| 13 | +1) Время построения хеш-таблицы; |
| 14 | +2) Время операции поиска элемента; |
| 15 | +3) Затрачиваемая память |
| 16 | +Замечание: В качестве хеш-функций используйте только функции из универсальных |
| 17 | +семейств, про них рассказывалось на семинарах. Список универсальных хеш-функций |
| 18 | +можно найти здесь https://en.wikipedia.org/wiki/Universal_hashing. |
| 19 | +Замечание: Для двух-уровневой хеш-таблицы нужно обязательно провести эксперименты с |
| 20 | +разлиными значениями параметров, разобраться как различные значения параметров влияют |
| 21 | +на производительность и найти оптимальный выбор параметров. Без этих экспериментов |
| 22 | +работа не будет зачтена. Про какие именно параметры идет речь смотрите в записи лекции. |
| 23 | +Входные данные: |
| 24 | +a) Случайные натуральные числа. |
| 25 | +б) Случайные вектора или строки. |
| 26 | +с) Очень бы хотелось увидеть как поведут себя таблицы на real life данных, например на |
| 27 | +словарях или словах какого нибудь литературного произведения. |
| 28 | +Ваш вывод должен содержать: |
| 29 | +1) Графики сравнения скорости построения и количества занимаемой памяти для подхода 1) |
| 30 | +при различных значениях параметров. Выбор оптимального, с Вашей точки зрения, набора |
| 31 | +параметров. |
| 32 | +2) График сравнения скорости построения хеш-таблиц для подходов 1) 2) 3), причем для |
| 33 | +подхода 2) нужно использовать оптимальный набор параметров. |
| 34 | +3) График сравнения скорости поиска для обоих подходов. |
| 35 | +4) Все графики нужно продублировать, если Вы используете разные входные данные: |
| 36 | +случайные строки и real life данные. |
| 37 | +Итого, должно быть как минимум 4 картинки с несколькими кривыми на каждой. |
| 38 | + |
| 39 | +## Лабораторная работа № 2. Сравнение различных подходов к хешированию. |
| 40 | +Целью данной работы является сравнение различных методов борьбы с коллизиями: |
| 41 | +1) Метод цепочек; |
| 42 | +2) Метод открытой адресации (см. Кормен, 3-е издание, 11.4 Открытая адреация); |
| 43 | +3) Метод кукушки (см. https://en.wikipedia.org/wiki/Cuckoo_hashing). |
| 44 | +4) Для интереса, предлагается также сделать сравнения со стандартными средствами языка |
| 45 | +c++: std::map, std::hash_map. Вдруг получится их обогнать. |
| 46 | +Замечание: В качестве хеш-функций используйте только функции из универсальных |
| 47 | +семейств, про них рассказывалось на семинарах. Список универсальных хеш-функций |
| 48 | +можно найти здесь https://en.wikipedia.org/wiki/Universal_hashing. |
| 49 | +Что измеряется? |
| 50 | +1) Время вставки; |
| 51 | +2) Время удаления; |
| 52 | +3) Время поиска. |
| 53 | +Более конкретно об измерении: |
| 54 | +Нужно выбрать какое-то стартовое значение N, скажем 100, выбрать шаг step, скажем пусть |
| 55 | +step = 100, и выбрать максимальное значение, скажем 100 000. После чего нужно для каждого |
| 56 | +N с шагом step от минимального значения до максимального построить таблицу размера N |
| 57 | +(из случайных элементов, или сделать выборку из заранее подготовленной базы) и |
| 58 | +произвести одну или несколько операций (если несколько, скажем 10, то нужно усреднить). |
| 59 | +Измеряем именно время одной операции. Некоторые допускают ошибку и делают N вставок |
| 60 | +с замером времени, но не понятно, что в итоге Вы измерили. |
| 61 | +Входные данные: |
| 62 | +a) Случайные натуральные числа. |
| 63 | +б) Случайные вектора или строки. |
| 64 | +с) Очень бы хотелось увидеть как поведут себя таблицы на real life данных, например на |
| 65 | +словарях или словах какого нибудь литературного произведения. |
| 66 | +Ваш вывод должен содержать: |
| 67 | +1) График зависимости скорости вставки от количества элементов в таблице; |
| 68 | +2) График зависимости скорости удаления от количества элементов в таблице; |
| 69 | +3) График зависимости скорости поиска от количества элементов в таблице; |
| 70 | +На каждом графике должно быть несколько кривых, по одной или больше для каждого |
| 71 | +подхода. Заметим также, что таблицы из подходов 1) и 2) имеют дополнительный параметр m |
| 72 | +– ёмкость таблицы. Хорошо бы построить на графиках кривые для разных значений m, |
| 73 | +например m = 2n, m = n, m = ½ n. Но это не обязательно. |
0 commit comments