Я читал о хэш-таблицах и открытых адресах. Если вы хотите вставить ключи: 18,32,44 в хеш-таблицу с размером 13:
18 gets index 5 (18 modulus 13 = 5)
32 gets index 6 (32 modulus 13 = 6)
44 gets index 5 (44 modulus 13 = 5)
Вы получите столкновение, потому что в индексе 5 уже есть что-то.
Если вы используете линейное зондирование, вы будете делать hashfunction = (key+i) modulus N
, где i = 0,1,2..
, пока не найдете пустое место в хеш-таблице. Тогда 44 будет вставлено в индекс 7.
Что, если вы удалите 32, а затем захотите удалить 44. Сначала вы посмотрите на hashfunction(44)=5
- это было не 44, а затем hashfunction(44 + 1) = 6
- пусто. Тогда вы можете подумать, что 44 прошло. Как пометить место в хеш-таблице, что это место на самом деле не пустое, но не содержит ключа, и что вы должны продолжать искать 44 при следующем индексе?
Если вам необходимо вставить другой ключ с индексом 6, тогда ключ просто перезаписывает «метку» в хеш-таблице.
Что вы могли бы использовать для маркировки индекса - скажем, здесь был ключ, но он был удален - поэтому вы продолжаете смотреть на следующий индекс? Вы не можете просто написать ноль или 0, потому что тогда вы либо думаете, что ключ был удален (ноль), либо что ключ со значением 0 перезаписал 44.