Это отличный вопрос, и ответ таков: «это зависит от того, какую таблицу ha sh вы используете».
A chained ha sh table где, чтобы сохранить предмет, вы должны поместить его в ведро, а затем сохранить предмет в этом ведре. Если несколько элементов попадают в одну корзину, вы просто сохраняете список всех элементов, которые попадают в эту корзину, внутри самой корзины. (Это наиболее распространенная версия таблицы ha sh.) В таблице такого типа ha sh ожидаемое количество элементов в корзине, при условии хорошей функции ha sh, равно O (α ), где коэффициент загрузки обозначается через α. Это имеет интуитивный смысл, поскольку, если вы распределяете свои вещи случайным образом по корзинам, вы ожидаете, что примерно α из них попадет в каждую корзину. В этом случае при увеличении коэффициента загрузки вам придется выполнять в среднем все больше и больше работы, чтобы найти элемент, поскольку в каждом сегменте будет больше элементов. Время выполнения поиска не обязательно достигнет O (n), так как у вас все еще будут элементы, распределенные по корзинам, даже если корзин недостаточно для go вокруг.
A линейное зондирование ha sh таблица работает с массивом слотов. Всякий раз, когда у вас есть sh элемент, вы go добираетесь до его слота, затем идите вперед по столу, пока не найдете элемент или не найдете свободный слот. В этом случае, когда коэффициент загрузки приближается к одному, будет заполняться все больше и больше слотов таблиц, и вы действительно окажетесь в ситуации, когда поиск действительно требует времени O (n) в худшем случае, потому что будет только несколько свободных слотов, чтобы остановить ваш поиск. (Есть прекрасный и знаменитый анализ Дона Кнута, который показывает, что если предположить, что функция ha sh ведет себя как случайно выбранная функция, то стоимость неудачного поиска или вставки в таблицу ha sh займет время O (1 / (1 - α) 2 ). Интересно построить эту функцию и посмотреть, как растет время выполнения, когда α становится все ближе и ближе к единице.)
Надеюсь, это поможет!