СБАЛАНСИРОВАННЫЙ BST является предпочтительным, если вам нужно, чтобы защитить вашу структуру данных от латентности пиков и хэша столкновений атак.
Бывший случается, когда массив спинок структура растет получает изменена, последний является неизбежным свойством алгоритма хеширования в качестве проекции из бесконечного пространства в ограниченный диапазон целого.
Еще одна проблема в .NET является то, что есть ЛОХ, и с достаточно большим словарем вы столкнетесь фрагментации LOH. В этом случае вы можете использовать BST, расплачивается большим алгоритмического класс сложности.
Короче говоря, с BST при поддержке кучи распределения вы получите худший случай O (журнал (N)) время, с Хеш вы получите O (N) в худшем случае.
BST поставляется по цене O (журнал (N)) среднего времени, хуже кэш местности и больше ассигнований кучи, но у него есть латентные гарантии и защита от атак по словарю и фрагментации памяти.
Стоит отметить, что БСТ также подвержены фрагментации памяти на других платформах, а не с помощью уплотн сборщика мусора.
Что касается размера памяти, класс .NET Dictionary`2 больше памятей эффективных, поскольку он хранит данные в виде не совсем куч связанного списка, значение, которое хранит только и информации смещения. ЛУЧШИЙ должен хранить заголовок объекта (так как каждый узел представляет собой экземпляр класса в куче), два указателя, и некоторые данные дополненной дерево для сбалансированных деревьев. Например, красно-черное дерево нужно будет логическое значение интерпретируется как цвет (красный или черный). Это, по крайней мере, 6 машинных слов, если я не ошибаюсь. Таким образом, каждый узел красно-черного дерева на 64-битной системе составляет минимум:
3 слова для заголовка = 24 байта 2 слова для ребенка указателей = 16 байтов 1 слово для цвета = 8 байт, по крайней мере 1 слово для значения 8+ байт = 24 + 16 + 8 + 8 = 56 байт (+8 байтов если дерево использует указатель родительского узла).
В то же время, минимальный размер словарного будет всего 16 байт.