Ну при большом числе коллизий же мапы перехэшируются, верно?
Я, конечно, глубоко в исходники не лазил, но давай подумаем логически, что такое коллизия?
Получение одинаковых хэшей при разных ключах. Из за чего данные попадают в одну и ту же корзину, что приводит со временем к обращению к ним за O(n)
вот, какой смысл брать еще раз хеш от этих значений, если оно всё равно выдаст тот же результат? :)
Хэш это же общее название. Понятно что он начинает браться по другому алгоритму или с другим сидом или с другой солью. Или как там назвать. Это и называется перехэширование
вам, кажется, надо перечитать работу хмапа (ну или мне) 😁
Нет такого, алгоритм не меняется, соль не добавляется.
Ну замечание законное, я на го относительно не давно пересел с других языков, да ещё и не окончательно. поэтому могу вспомнить алгоритм работы неотсюда
А если коллизий много... Работа мапы в го будет замедляться вплоть до О(n)? Я правильно понимаю? Или с этим как то борятся?
А в каких языках предусмотрен алгоритм "перехэширования"?
ну я в принципе не могу представить себе поведение, чтобы это могло понадобиться
Ну если у тебя абсолютно все хэши в мапе одинаковые, то будет O(n), если не ошибаюсь, но сам представь шанс всего этого. К тому же хэшфункция оптимизирована под каждый тип данных, чтобы максимально избегать коллизии
Ну я щас попробую на вопросы ответить по очереди А на счёт шансов что много совпадений будет - так это отчасти вопрос сколько я туда запихаю На счёт того что оптимизация под стандартные типы данных - у меня тип мой собственный, из трёх int и bool. Подозреваю что это внутри превращается в []byte и дальше уже идёт хэш
Ну я не знаю сколько должно быть значений в мапе, чтобы получить кучу коллизий до такой степени, чтобы взятие линейное стало. Если интересно как углублено мапа работает, то советую посмотреть видео Николая Тузова на эту тему
очевидно в данном контексте это когда для разных значений ключа получается одно значение хэша. на практике коллизий избежать невозможно например если у вас хэш имеет размер 32бита, а ключ - 64бита. так что это разговор ни о чем...
Обсуждают сегодня