【发布时间】:2011-08-26 09:06:08
【问题描述】:
使用动态解析器在空间方面的好处是否超过了预先生成的查找表在时间方面的好处?
加长版:
我正在创作一个化学参考工具,并包含一个功能,可以自动命名符合特定模式的公式;例如C[n]H[2n+2] => [n]ane;其中[n] 是 LHS 的整数;以及 RHS 上名称数组的索引。 (meth, eth, ...)
据我所知,这可以通过以下两种方式之一实现:
我预先生成了
formula <=> name对的键/值双重查找字典;应用程序启动时(启动速度较慢),或随应用程序发布的静态列表(下载速度较慢)。由定制的解析器动态评估公式。
在方法 1. 中,名称 => 公式查找变得简单了一个数量级;但是生成器将,除非我想用应用程序传送几十兆字节的数据,否则必须有一个预设的相当低的 n 值。
公式可以有多个术语。如C[n]H[2n+1]OC[n']H[2n'+1];对于这些中的每一个,可能的匹配数量会随着n 而呈几何级数增加。此外,使用这种方法会像没人管一样吃掉 RAM。
方法 2. 让我可以使用相当小的查找表支持相当大的 n 值,但会使 name => 公式查找更加复杂。与与应用程序一起交付的预生成文件相比,它还可以让我纠正生成逻辑中的错误,而无需交付新的数据文件。
这也要求每个公式都与几个规则的粗略测试相匹配,以确定它是否可以匹配;如果有很多规则,这可能会导致界面明显变慢。
那么问题来了:
在权衡中是否有任何我没有考虑到的考虑因素,或者我没有考虑过的方法?
使用动态解析器的好处是否证明了增加的实现复杂性?
【问题讨论】:
标签: language-agnostic user-experience chemistry tradeoff