Как извлечь значения из хеш-таблицы после разрешения коллизий с помощью линейного зондирования?

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

Это моя программа: 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

Другие вопросы по тегам