Вы спросили:
Так что оптимальный BST оптимален только для определенного порядка пар, верно?
Вот что говорится в статье в Википедии:
... - это двоичное дерево поиска, которое предоставляет наименьшее возможное время поиска (или ожидаемое время поиска) для данной последовательности обращений (или вероятностей доступа).
Другими словами, если вы измените частоты отдельных слов, вы по необходимости измените порядок ключей в дереве.
Вы также спросили:
Если это так, для какой сцены мы можем применить эту структуру данных?
Вы можете использовать его как любое дерево двоичного поиска. Идея состоит в том, что оно упорядочивает дерево таким образом, что для часто просматриваемых элементов требуется меньше узлов для поиска за счет редко используемых элементов, которые требуют большего количества запросов. Он превосходит общее двоичное дерево поиска (включая сбалансированные деревья), когда вероятности доступа отдельных элементов сильно различаются.
Несмотря на то, что вы можете иметь динамический оптимальный BST, изменение формы дерева может обойтись дорого, если у вас есть много модификаций. Лучшее применение этого - когда дерево статично или если у дерева на несколько порядков больше запросов, чем модификаций.