308
правок
Изменения
→Удаление элемента без пометок (в разработке)
== Удаление элемента без пометок (==<div style="background-color: #ABCDEF; font-size: 16px; font-weight: bold; color: #000000; text-align: center; padding: 4px; border-style: solid; border-width: 1px;">Эта статья находится в разработке) ==!</div><includeonly>[[Категория: В разработке]]</includeonly>
Рассуждение будет описывать случай с линейным поиском хеша. Будем при удалении элемента сдвигать всё последующие на шаг <tex>q</tex> позиций назад. При этом:
* если в цепочке встречается элемент с другим хешем, то он должен остаться на своём месте (такая ситуация может возникнуть если оставшаяся часть цепочки была добавлена позже этого элемента)
* в цепочке не должно оставаться "дырок", тогда любой элемент с данным хешем будет доступен из начала цепи
Учитывая это будем действовать следующим образом: при поиске следующего элемента цепочки будем пропускать все ячейки с другим значением хеша, первый найденный элемент копировать в текущую ячейку, и затем рекурсивно его удалять. Если такой следующей ячейки нет, то текущий элемент можно просто удалить, сторонние цепочки при этом не разрушатся (кстати это неверно для чего нельзя сказать про случай квадратичного поиска).
{{Утверждение
|about=о времени работы
|statement=Асимптотически время работы <tex>O(delete)=O(</tex> и <tex>find)</tex>совпадают
|proof=
Заметим что указатель <tex>j</tex> в каждой итерации перемещается вперёд на <tex>q</tex> (с учётом рекурсивных вызовов <tex>delete</tex>). То есть этот алгоритм просто проходит по всей цепочкеначиная с какой-то позиции до конца, примерно равно как и <tex>find</tex>в худшем случае.
}}
==Двойное хеширование==