Теоретический материал

А. Климовский

Рассмотрим следующую простую задачу: реализовать множество строк (операции добавление, удаление и поиск). С этой задачей успешно справляется структура данных бор. Вместо того чтобы давать строгое определение, лучше рассмотрим, как он работает.

Заведем корневое дерево, у которого на каждом ребре написан символ алфавита. Из каждой вершины дерева существует ребро к потомкам, если и только если в том поддереве есть элементы. Каждая вершина соответствует строке, получающейся на пути от корня до этой вершины. Например, вершинам на рис. 1 соответствуют строки “”, “a”, “b”, “bx” (пустая строка соответствует корню). Это только строки, которые соответствуют вершинам, а не элементы реализуемого множества.

Реализуемым множеством будет часть этих строк. Для того чтобы хранить, какие именно строки входят в множество, а какие — нет, прикрепим к каждой вершине дерева флаг. Его истинность и будет означать, есть ли соответствующая строка в множестве.

Иногда бывает удобно по-другому маркировать элементы множества: заканчивать строки некоторым терминальным символом (например “$”). Здесь мы так делать не будем.