Как извлечь значения из хеш-таблицы после разрешения коллизий с помощью линейного зондирования?
Я пытаюсь реализовать хэш-программу на ходу, я сделал вставку и разрешил столкновения, используя линейное зондирование. Когда я пытаюсь получить значения обратно, я получаю разные значения, так как я использовал линейное зондирование для устранения коллизий.
Это моя программа: https://play.golang.org/p/7Pmqu6A313
1 ответ
Проблема в вашем решении состоит в том, что вы используете "линейное зондирование" для операции вставки, но вы не используете тот же подход для его извлечения.
Прежде всего - я бы изменил ваше хранилище подчеркивания, чтобы сохранить всю структуру вместо значения:
var hasharray [15]Item
Во-вторых, я бы изменил метод получения, чтобы проверить значение элемента с вычисленным хеш-индексом, и после этого повторять элементы один за другим, чтобы найти фактический элемент в случае столкновения:
func retrieve(key string) {
index := hashmethod(key)
found := false
for !found {
item:= hasharray[index];
if key == item.key {
found = true;
fmt.Println(index, item)
} else if index != size-1 {
index++
} else {
index = 0
}
}
}
Смотрите здесь: https://play.golang.org/p/8JfTpbJcWx