Этот класс обеспечивает основу для построения контейнера на основе Trie.
В его основной форме класс TTRIE можно использовать для хранения 16, 32 и 64 бит.
Структура обеспечивает фиксированную реализацию TRIE Deenge, которая, в свою очередь, делает равное время для поиска, удаления и добавления узлов.
Порядок структуры составляет O (d), где D - глубина Trie, которая зависит от того, что построено для хранения 16, 32 или 64 бит. Для 16 бит D = 4 для 32 бит D = 8 и для 64 бит D = 16
Чтобы сохранить размер узла небольшим, будут использоваться только 16 ветвей на узел, а флаги индикатора и индексы внутренних указателей кодируются в словом 16 бит и в целом 64 бит.
Указатели на ветви управляются динамически, поэтому на массиве указателей выделяется только указатель, когда необходимо добавить новую ветвь, это сводит к минимуму отходы предварительно выделенного массива указателей до ветвей более низкого уровня. Это будет замедление добавляет, хотя.
Листья выделяются на месте, а не как отдельные узлы, указанные последним узел ветвей.
Наконец, узлы листьев могут динамически управлять полученным классом из TTRIE, позволяя легко реализовать словаря, используя TTRIE в качестве базы.
В целом, выполнение некоторых тестов, хранящих память, выделенную Allocator Lazarus (Freepascal) в Mac, производит около 40% эффективности хранения, пропорционально размеру хранимых объектов, что неплохо, учитывая производительность для добавления и удаления операций.
Класс также предоставляет метод пакета, который используется для контроля хранилища, когда было выпущено много удаленных.
Tintegerhashtrie и Tstringhashtrie предоставляются в качестве потомков общего класса Thashtrie. У Thashtrie есть два режима работы:
Хэш -таблица обеспечивает лучшую производительность, конечно, но хэштри имеет более эффективную площадь памяти при хранении небольшого количества элементов.
Протестировал tstringhashtrie против Tdictionary Delphi <> и C# Dictionary <> классы.
Tstringhashtrie бьет оба, C# и Delphi реализации. Разница больше, когда используется хэш -таблица для корневого узла.
Основная площадь памяти в целом для больших нагрузок также лучше, на 30-40% лучше. Для небольшого количества элементов окончательно, используя чистую хэштрию, а не хэш -таблицу, корневой узел будет использовать значительно меньше памяти.
Тесты, составленные в Delphi 2007, дали еще лучшие результаты, потому что строки не должны были преобразовать конверсию из UTF16 в ANSI, прежде чем вставить в структуру.
Tstringhashtrie Поддержите Unicode в форме UTF8.