Мы все знаем, что хэш-таблица имеет O (1) время для обеих вставок и look-ups, если хеш-функция была выбрана хорошо. Итак, в чем причина, по которой мы хотим использовать двоичное дерево поиска? Просто потому, что идеальную хеш-функцию сложно проектировать?
Вот как я придумал этот вопрос?
Я заметил, что Стандартная С++ STL имеет set
и map
, которые реализованы с деревом двоичного поиска, но не имеют хеша (не говоря уже о нестандарте hash_set
, hash_map
). Хотя, Ruby имеет только Hash
. Я хочу понять рациональность этой разницы.