Одной из моих любимых структур данных в колледже была Trie. Это отличная структура данных для хранения большого набора строк, если префиксы являются общими. Поиск также хорош, поскольку они выполняются в строке O (| length |), независимо от того, сколько строк в наборе.
Для сравнения, сбалансированное дерево будет O (log N) в количестве заданных элементов, плюс все, что вы платите за сравнения. Хэш-таблица будет включать в себя вычисление хэша, сравнение и т.д.
Поэтому мне удивительно, что не существует реализации Trie в стандартной библиотеке большинства языков.
Единственная причина, по которой я мог придумать, - это возможность того, что затраты на доступ к памяти делают это слишком дорогостоящим. Вместо того, чтобы исследовать местоположения O (log N), если вы выполняете поиск по дереву, вы не делаете O (| length |) разных местоположений со всеми вытекающими последствиями. Если строки длинны, это может оказаться слишком большим.
Итак, мне интересно: сколько всего я только что назвал проблемой? Что вы делаете, когда вам нужно хранить большой набор или карту строк?