Точка 1:
Это из-за функции поиска. Посмотрите на функцию поиска по ссылке, пожалуйста.
void search(string s)
{
//Compute the index using the hash function
int index = hashFunc(s);
//Search for an unused slot and if the index will exceed the hashTableSize then roll back
while(hashTable[index] != s and hashTable[index] != "")
index = (index + 1) % hashTableSize;
//Check if the element is present in the hash table
if(hashTable[index] == s)
cout << s << " is found!" << endl;
else
cout << s << " is not found!" << endl;
}
Так что, если они использовали размер как 20, то цикл while в поиске иногда продолжается бесконечность, если строка запроса отсутствует в хеш-таблице и в каждом индексе hashTable есть строка.
Точка 2:
Нет! цикл while не будет выполняться бесконечно, потому что количество элементов / строк будет не более 20, а данный массив может содержать 21 элемент / строку. Поэтому всегда будет один индекс, в котором hashTable [index] содержит "" / пустую строку.
Примечание:
В этом алгоритме, где будет храниться строка, определяется из ее хеш-значения. Но некоторые строки могут иметь аналогичное значение хеш-функции. Вот почему он искал следующий незанятый индекс с круговой модой.
Когда он ищет строку, находится ли она в хеш-таблице или нет, он выполняет поиск по индексу, где хранится пустая строка, потому что, если строка находится в хеш-таблице, она будет сохранена, по крайней мере, в этой пустой позиции.