Удаление из хеш-таблицы с открытым зондом с линейным зондированием является простым. На протяжении многих лет на странице хэш-таблицы Википедии существовал псевдокод. Я не знаю, почему его больше нет, но здесь есть постоянная ссылка на то, когда это было: Старая страница хеш-таблицы Wikipedia , и здесь для вашего удобства есть псевдокод:
function remove(key)
i := find_slot(key)
if slot[i] is unoccupied
return // key is not in the table
j := i
loop
j := (j+1) modulo num_slots
if slot[j] is unoccupied
exit loop
k := hash(slot[j].key) modulo num_slots
if (j > i and (k <= i or k > j)) or
(j < i and (k <= i and k > j)) (note 2)
slot[i] := slot[j]
i := j
mark slot[i] as unoccupied
На этой странице также есть ссылка на некоторый реальный код . Я считаю, что это имеет точно такую же характеристику производительности, как и вставка.
Этот метод удаления лучше, чем часто используемый «пометить удаленный и иногда перефразировать все», потому что вышеупомянутый метод - постоянное время, а не амортизированное постоянное время. Если у вас есть хеш-таблица из миллиона элементов, из которых вы добавляете и удаляете, в методе «пометить как удаленное» случайное добавление или удаление займет в миллион раз больше, чем те, которые были до и после него, что не является Хорошая производительность.