Перевешивают ли связанные с пространством преимущества использования анализатора «на лету» преимущества, связанные со временем предварительно созданной таблицы поиска?
Длинная версия:
Я создаю справочный инструмент по химии и включаю функцию, которая будет автоматически называть формулы, соответствующие определенному шаблону; например C[n]H[2n+2] => [n]ane
; где [n]
- целое число для LHS; и индекс в массив имен на RHS. (meth
, eth
,…)
Насколько я понимаю, это можно реализовать одним из двух способов:
Я предварительно сгенерировал словарь двойного поиска ключ / значение из formula <=> name
пар; либо при запуске приложения (более медленный запуск), либо в виде статического списка, который публикуется вместе с приложением (более медленная загрузка).
Формулы вычисляются на лету с помощью специального анализатора.
При подходе 1. name => поиск формулы упрощается на порядок; но генератор, если я не хочу отправлять десятки мегабайт данных вместе с приложением, должен иметь предустановленное и довольно низкое значение для n
.
Усугубляет это тот факт, что формулы могут иметь несколько терминов; такие как C[n]H[2n+1]OC[n']H[2n'+1]
; и для каждого из них число возможных совпадений увеличивается геометрически с n
. Кроме того, при использовании этого подхода оперативная память будет поглощена, как никто другой.
Подход 2. позволяет мне поддерживать довольно большие значения n
, используя довольно маленькую справочную таблицу, но делает поиск по формуле name => несколько более сложным. По сравнению с предварительной генерацией в файл для отправки вместе с приложением, он также позволяет мне исправлять ошибки в логике генерации без необходимости отправлять новые файлы данных.
Для этого также необходимо, чтобы каждая формула сопоставлялась с беглым тестом по нескольким правилам, определяя, подходит ли она ; что, если правил много, требует времени, которое может привести к заметному замедлению интерфейса.
Тогда возникает вопрос:
Есть ли какие-то соображения в обмене, которые я не учел, или подходы, которые я не учел?
Оправдывают ли преимущества использования анализатора «на лету» повышенную сложность реализации?