由于缓存原因,将布尔表达式标准化。有没有比真值表更有效的方法?
|
我当前的项目是具有布尔检索功能的高级标记数据库。正在使用类似这样的布尔表达式来查询记录(例如在音乐数据库中):
funky-music and not (live or cover)
它将产生音乐数据库中所有时髦的音乐,但不包含歌曲的现场或翻唱版本。
当涉及到缓存时,问题在于存在相同但结构不同的查询。例如,应用de Morgan \规则,上面的查询可以这样写:
funky-music and not live and not cover
例如,如果通过对查询字符串进行哈希处理来实现缓存,则这将产生完全相同的记录,但会导致中断缓存。
因此,我的首要目的是创建查询的真值表,然后将其用作缓存键,因为等效表达式形成了相同的真值表。不幸的是,这是不切实际的,因为真值表随输入(标签)的数量呈指数增长,我不想限制一个查询中使用的标签的数量。
另一种方法可能是遍历语法树,应用由布尔代数定义的规则以形成(最小)规范化表示,这似乎也很棘手。
因此,总的问题是:是否存在一种可行的方法来实现等效查询的识别,而无需电路最小化或真值表(编辑:或任何其他具有NP难点的算法)?
ne plus ultra将识别已经缓存的子查询,但这不是主要目标。
没有找到相关结果
已邀请:
3 个回复
敦肌
吠强祷豪硅
响摔衅幸