日期:2014-05-20  浏览次数:20747 次

结合律以及合并的算法
各位大侠,请教一个问题,有如下一个简化表达式的算法,请问有什么实现的思路吗?

变量:
str_1
str_2
str_3
...
str_N

条件:
condition_1
condition_2
...
condition_N

关系:
AND  并
OR   或
() 括号表示优先级


1. (condition_1 AND str_1) AND (condition_1 AND str_2) --> (str_1 OR str_2) AND condition_1
2. (condition_1 AND str_1) OR (condition_2 AND str_1) --> (condition_1 OR condition_2) AND str_1
3. (condition_1 AND str_1) OR (condition_2 AND str_1)  --> (condition_1 OR condition_2) AND str_1
4. (condition_1 AND condition_2 AND str_1) AND (condition_1 AND str2) --> ((condition_2 AND str_1) AND str2) AND condition_1
5. (condition_1 AND condition_2 AND str_1) AND ((condition_1 OR condition_2) AND str2) --> 不转换

------解决方案--------------------
按照你的说法,那你就计算哪一个表达式“最短”不就行了嘛。

至于是否需要运用什么“结合、合并”,这其实别无选择,这就好像走迷宫时不去找出路,而是硬要纠结什么“最短路径”这种变态的学究问题,那么只好:“只要还有可能性(路)没有试探过就必须回溯所有道路”。因此别无选择,你必须迭代所有可能能够使用任何“律”的道路。

其实我一直认为,那些动不动就问“最短、最好”这类问题的所谓智力测验,其实是最没有智慧的。这就好像高手下棋,他不是像电脑一样遍历棋盘,而是提前就分析局势。
------解决方案--------------------
一两步“化简”,能保证再做几步之后也更简吗?

如果你连深度的试探都不做了,那么这个问题就无解了。因为它本来就不是一个智能问题,而是简单的计算问题。你要搞出一个“玄”的一次性毫不回头的规律,我想只好去学古人求仙问道。
------解决方案--------------------
看数字电路或者离散数学教材。

人工解法是用卡诺图。机器解法就是布尔表达式化简。
------解决方案--------------------
引用:
看数字电路或者离散数学教材。

人工解法是用卡诺图。机器解法就是布尔表达式化简。


离散数学啊,以前学的还可以,现在全忘了