Связь между коэффициентом загрузки и сложностью времени в таблицах ha sh? - PullRequest
0 голосов
/ 29 апреля 2020

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

1 Ответ

0 голосов
/ 29 апреля 2020

Это отличный вопрос, и ответ таков: «это зависит от того, какую таблицу 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 ). Интересно построить эту функцию и посмотреть, как растет время выполнения, когда α становится все ближе и ближе к единице.)

Надеюсь, это поможет!

...