Skip to content

Commit 47d8647

Browse files
author
Vadik Alperovich
committed
initial
1 parent dc08298 commit 47d8647

File tree

3 files changed

+205
-1
lines changed

3 files changed

+205
-1
lines changed

README.md

+73-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,73 @@
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. Но это не обязательно.

laby_ara_new_2.pdf

59.3 KB
Binary file not shown.

report.ipynb

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"## Лабораторная работа №1\n",
8+
"\n",
9+
"Седунов Илья,<br>\n",
10+
"Альперович Вадим,<br>\n",
11+
"17ПМИ"
12+
]
13+
},
14+
{
15+
"cell_type": "markdown",
16+
"metadata": {},
17+
"source": [
18+
"### Целью данной работы является сравнение следующих подходов:\n",
19+
"\n",
20+
"1) **Квадратичный подход** к построению идеальной хеш-таблицы; (см. Кормен, 3-е издание,\n",
21+
"11.5 Идеальное хеширование, или видео запись)\n",
22+
"\n",
23+
"2) **Двух-уровневый подход** к построению идеальной хеш-таблицы; (см. Кормен, 3-е издание,\n",
24+
"11.5 Идеальное хеширование, или видео запись)\n",
25+
"\n",
26+
"3) (опционально) **Графовый подход** к построению идеальной хеш-таблицы\n",
27+
"(см. https://habrahabr.ru/post/254431/, вот исходная статья, обязательно посмотрите\n",
28+
"http://cmph.sourceforge.net/papers/chm92.pdf). "
29+
]
30+
},
31+
{
32+
"cell_type": "markdown",
33+
"metadata": {},
34+
"source": [
35+
"### Что измеряется?\n",
36+
"\n",
37+
"1) Время построения хеш-таблицы;\n",
38+
"\n",
39+
"2) Время операции поиска элемента;\n",
40+
"\n",
41+
"3) Затрачиваемая память"
42+
]
43+
},
44+
{
45+
"cell_type": "markdown",
46+
"metadata": {},
47+
"source": [
48+
"**Замечание:** В качестве хеш-функций используйте только функции из универсальных\n",
49+
"семейств, про них рассказывалось на семинарах. Список универсальных хеш-функций\n",
50+
"можно найти здесь https://en.wikipedia.org/wiki/Universal_hashing.\n",
51+
" \n",
52+
"**Замечание:** Для двух-уровневой хеш-таблицы нужно обязательно провести эксперименты с\n",
53+
"разлиными значениями параметров, разобраться как различные значения параметров влияют\n",
54+
"на производительность и найти оптимальный выбор параметров. Без этих экспериментов\n",
55+
"работа не будет зачтена. Про какие именно параметры идет речь смотрите в записи лекции"
56+
]
57+
},
58+
{
59+
"cell_type": "markdown",
60+
"metadata": {},
61+
"source": [
62+
"### Входные данные:\n",
63+
"\n",
64+
"a) Случайные натуральные числа.\n",
65+
"\n",
66+
"б) Случайные вектора или строки.\n",
67+
"\n",
68+
"с) Очень бы хотелось увидеть как поведут себя таблицы на real life данных, например на\n",
69+
"словарях или словах какого нибудь литературного произведения."
70+
]
71+
},
72+
{
73+
"cell_type": "markdown",
74+
"metadata": {},
75+
"source": [
76+
"### Ваш вывод должен содержать:\n",
77+
"\n",
78+
"1) Графики сравнения скорости построения и количества занимаемой памяти для подхода 1)\n",
79+
"при различных значениях параметров. Выбор оптимального, с Вашей точки зрения, набора\n",
80+
"параметров.\n",
81+
"\n",
82+
"2) График сравнения скорости построения хеш-таблиц для подходов 1) 2) 3), причем для\n",
83+
"подхода 2) нужно использовать оптимальный набор параметров.\n",
84+
"\n",
85+
"3) График сравнения скорости поиска для обоих подходов.\n",
86+
"\n",
87+
"4) Все графики нужно продублировать, если Вы используете разные входные данные:\n",
88+
"случайные строки и real life данные.\n",
89+
"\n",
90+
"Итого, должно быть как минимум 4 картинки с несколькими кривыми на каждой."
91+
]
92+
},
93+
{
94+
"cell_type": "code",
95+
"execution_count": 1,
96+
"metadata": {},
97+
"outputs": [],
98+
"source": [
99+
"import numpy as np\n",
100+
"import pandas as pd"
101+
]
102+
},
103+
{
104+
"cell_type": "code",
105+
"execution_count": null,
106+
"metadata": {},
107+
"outputs": [],
108+
"source": []
109+
}
110+
],
111+
"metadata": {
112+
"kernelspec": {
113+
"display_name": "Python 3",
114+
"language": "python",
115+
"name": "python3"
116+
},
117+
"language_info": {
118+
"codemirror_mode": {
119+
"name": "ipython",
120+
"version": 3
121+
},
122+
"file_extension": ".py",
123+
"mimetype": "text/x-python",
124+
"name": "python",
125+
"nbconvert_exporter": "python",
126+
"pygments_lexer": "ipython3",
127+
"version": "3.7.7"
128+
}
129+
},
130+
"nbformat": 4,
131+
"nbformat_minor": 4
132+
}

0 commit comments

Comments
 (0)