Какие функциональные словарные структуры данных важно знать?
Сбалансированные по высоте бинарные деревья и их попытки являются хорошим всесторонним компромиссом. Также:
- Патриция деревья.
- Хэш пытается
Каковы плюсы и минусы этих подходов?
Бинарные деревья с сбалансированной высотой и их попытки являются хорошим универсальным компромиссом для атомарных ключей. Попытки одинаковы для ключей, которые являются последовательностями, например строковые ключи.
Деревья Патриции могут быть в несколько раз быстрее, но разрешать только целочисленные ключи.
Попытки хеширования могут быть в несколько раз быстрее, чем сбалансированные двоичные деревья, особенно если хеширование дешевле, чем сравнение, и полиморфизм имеет накладные расходы (например, строки в .NET), а запись указателей в кучу выполняется быстро (например, виртуальные машины, такие как JVM и CLR, которые были оптимизирован для императивных языков, а не функциональных языков). Попытки хэширования также позволяют использовать мутацию для оптимизации.
Красно-черные деревья менее важны, потому что они не имеют каких-либо существенных преимуществ по сравнению с деревьями с сбалансированной высотой, но имеют существенный недостаток, заключающийся в том, что они не допускают эффективного объединения, пересечения и различия.
Точно так же пальчики не намного лучше на практике.
Когда имеет смысл использовать более императивную структуру данных?
Когда ваш словарь заполняется один раз, а затем используется только для поиска, то есть заморожен.
Когда вам нужна производительность (приличная хеш-таблица, такая как .NET, Dictionary
как правило, в 10-40 раз быстрее любого обычного чисто функционального словаря).
Когда нужен слабый словарь, потому что нет известного чисто функционального слабого словаря.