Я реализую хеш-таблицу для проекта, используя 3 различных типа зондирования. Сейчас работаю над линейкой.
Для линейного зондирования я понимаю, как работает зондирование, и мой инструктор подразумевал, что он хочет, чтобы размер шага был равен 1. Дело в том, что дубликаты не допускаются. Так что я должен «искать» значение, прежде чем вставить его, верно? Но что, если таблица используется до такой степени, что все ячейки либо «заняты», либо «удалены»? Затем, чтобы найти конкретный ключ и убедиться, что его нет в таблице, мне придется выполнить поиск по всей таблице. Это означает, что операция поиска (и, соответственно, операция вставки) выполняется за O(n).
Это не кажется правильным, и я думаю, что я что-то неправильно понял.
Я знаю, что мне не придется сталкиваться с той же проблемой при квадратичном зондировании, поскольку таблица должна быть по крайней мере наполовину пустой, и она будет проверять только определенное количество элементов. И для двойного хэширования я не уверен, как это будет работать, потому что мне также нужно будет выполнить поиск в таблице, чтобы доказать, что ключ, который нужно вставить, отсутствует. Но откуда мне знать, как остановить поиск, если ни одна из ячеек «никогда не занята»?
Итак: при открытом хешировании, где каждая запись в таблице уже была занята в прошлом, требуется ли O(n) проб для поиска элемента (и вставки, если дубликаты не допускаются)?