обработка коллизий в ассоциативном массиве, реализованном с использованием самобалансирующегося дерева - PullRequest
2 голосов
/ 16 марта 2011

Как обрабатываются коллизии в ассоциативных массивах с использованием самоуравновешенного дерева?Если два объекта имеют одинаковый хэш, хранятся ли они в связанном списке, прикрепленном к узлу дерева, или создаются два узла?В первом случае как O(log n), а во втором - как дерево двоичного поиска может обрабатывать одни и те же ключи (хэши)?

1 Ответ

3 голосов
/ 17 марта 2011

Деревья поиска определенно не могут обрабатывать два узла с одним и тем же ключом, поэтому вам нужно хранить записи со встречными ключами в отдельной структуре данных (обычно, как вы говорите, связанный список, прикрепленный к узлу дерева).У вас действительно не будет сложности O в худшем случае O (log n), так же как ассоциативный массив, реализованный в виде хеш-таблицы, не будет иметь операций O (1) в худшем случае.

Как отмечает Эпитафия, одинпопробуйте увеличить длину ваших хеш-ключей, чтобы не возникало коллизий.Однако вы не можете гарантировать, что этого не сделаете, и вам нужно сделать какое-то условие для двух объектов с одинаковым хешем.Однако, если вы правильно выберете алгоритм хеширования, это должно быть редким случаем, и ваша средняя сложность времени для поисков будет O (log n), даже если он может ухудшиться до O (n) ввырожденный случай, когда все имеет одинаковый хэш-ключ.

...