Является ли удаление менее дорогостоящим, если используется линейное зондирование, чем в случае отдельной цепочки?

Для хэш-таблиц, как известно, мы сначала вычисляем хеш-функцию. Затем нам нужно позаботиться о столкновениях; случаи, когда два или более ключей должны быть вставлены в хэш к одному и тому же индексу. Два метода сделать это включают раздельную цепочку и линейное зондирование. Мой вопрос еще раз, какой метод менее затратный, когда дело доходит до удаления?

Моя первоначальная идея состоит в том, что если кластеры в линейном зондировании большие, и мы хотим удалить какой-то ключ в начале кластера, повторная вставка всех ключей справа от удаленного ключа может стать дорогостоящей.

Является ли это утверждение, если оно вообще справедливо, достаточной причиной, чтобы предположить, что раздельное связывание более эффективно при удалении, чем линейное зондирование?


person 0jnats3    schedule 26.09.2019    source источник


Ответы (1)


В случае линейного зондирования удаление повлияет на поиск других ключей, которые имеют хеш-значение раньше, чем пустая ячейка, но хранятся в более поздней позиции, чем пустая ячейка. Пустая ячейка приведет к тому, что эти поиски будут неправильно сообщать об отсутствии ключа. Итак, когда ячейка пуста, необходимо выполнить поиск по следующим ячейкам таблицы, пока не будет найдена либо другая пустая ячейка, либо ключ, который можно переместить в ячейку, и процесс должен продолжаться до тех пор, пока не будет найдена пустая ячейка.

Но в случае отдельной цепочки нам просто нужно удалить значение из связанного списка, а удаление значения из связанного списка намного проще, чем описанный выше процесс в случае линейного зондирования.

person Amit Bera    schedule 26.09.2019