オンザフライパーサーを使用することのスペース関連の利点は、事前に生成されたルックアップテーブルの時間関連の利点を上回りますか?
ロングバージョン:
私は化学参照ツールを作成しており、特定のパターンに準拠する数式に自動的に名前を付ける機能が含まれています。例C[n]H[2n+2] => [n]ane
; ここ[n]
で、はLHSの整数です。RHS上の名前の配列へのインデックス。(meth
、、eth
…)
私が見る限り、これは2つの方法のいずれかで実装できます。
formula <=> name
ペアのキー/値デュアルルックアップディクショナリを事前に生成します。アプリケーションの起動時(起動が遅い)、またはアプリケーションとともに公開される静的リスト(ダウンロードが遅い)。数式は、カスタムビルドのパーサーによってその場で評価されます。
アプローチ1では、name =>式のルックアップは、桁違いに単純になります。ただし、ジェネレーターは、アプリケーションで数十メガバイトのデータを出荷する場合を除いて、の値を事前設定し、かなり低くする必要がありますn
。
これをさらに複雑にするのは、数式がいくつかの項を持つことができるという事実です。などC[n]H[2n+1]OC[n']H[2n'+1]
; そして、これらのそれぞれについて、可能な一致の数は、幾何学的に増加しn
ます。さらに、このアプローチを使用すると、誰のビジネスのようにRAMを消費します。
アプローチ2では、かなり小さいルックアップテーブルを使用するかなり大きな値をサポートできますn
が、name=>式のルックアップはやや複雑になります。アプリケーションと一緒に出荷するための事前生成ファイルと比較すると、新しいデータファイルを出荷しなくても、生成ロジックのエラーを修正できます。
これには、各式をいくつかのルールの大まかなテストと照合して、適合するかどうかを判断する必要もあります。ルールがたくさんある場合は、時間がかかり、インターフェイスの速度が著しく低下する可能性があります。
したがって、問題は次のとおりです。
私が説明できなかったトレードオフ、または私が考慮しなかったアプローチに考慮事項はありますか?
オンザフライパーサーを使用する利点は、実装の複雑さの増大を正当化するのでしょうか?