Вы находитесь на странице: 1из 4

Реализация закрытой хеш-таблицы

Условия:

• В наборе данных не более 20 элементов.

• Хеш-функция возвращает целое число от 0 до 19.

• Набор данных должен иметь уникальные элементы.

string hashTable[21];
int hashTableSize = 21;

Insert

void insert(string s)
{
//Подсчёт индекса с помощью хеш функции
int index = hashFunc(s);
//Поиск неиспользованной ячейки и если индекс превысит размер –
вернуться обратно.
while(hashTable[index] != "")
index = (index + 1) % hashTableSize;
hashTable[index] = s;
}

Search

void search(string s)
{
//Подсчёт индекса с помощью хеш функции
int index = hashFunc(s);
// Поиск неиспользованной ячейки и если индекс превысит размер –
вернуться обратно.
while(hashTable[index] != s and hashTable[index] != "")
index = (index + 1) % hashTableSize;
//Проверка присутствует ли этот элемент в массиве
if(hashTable[index] == s)
cout << s << " is found!" << endl;
else
cout << s << " is not found!" << endl;
}

Сложность:
Время поиска зависит от длины списка и в худшем случае
равно O(n).
Реализация открытой хеш-таблицы

Условия:

• В наборе данных не более 20 элементов.

• Хеш-функция возвращает целое число от 0 до 19.

• Набор данных должен иметь уникальные элементы.


vector <string> hashTable[20];
int hashTableSize=20;

Insert

void insert(string s)
{
// Подсчёт индекса с помощью хеш функции

int index = hashFunc(s);


// Вставить элемент в список по индексу
hashTable[index].push_back(s);
}

Search

void search(string s)
{
// Подсчёт индекса с помощью хеш функции
int index = hashFunc(s);
//Поиск в списке по ин

дексу
for(int i = 0;i < hashTable[index].size();i++)
{
if(hashTable[index][i] == s)
{
cout << s << " is found!" << endl;
return;
}
}
cout << s << " is not found!" << endl;
}

Сложность:
Если выбран этот метод, то вставка нового элемента происходит
за O(1), а время поиска зависит от длины списка и в худшем
случае равно O(n). Если количество ключей n, а распределяем
по m-ячейкам, то соотношение n/m будет коэффициентом

заполнения.
Сравнение: