【发布时间】:2012-09-05 21:42:55
【问题描述】:
关于自枚举 pangrams 的 wiki 文章指出,它们是使用二元决策图计算的。我一直在阅读有关 BDD 的文章,据我了解,您需要先将一些问题表示为布尔函数,然后才能为其构造 BDD。
我该怎么做呢?
我这几天一直在思考这个问题,我很确定您可以使用简单的编码来表示布尔函数的输入:
10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
因此,对于以“16 个 A,10 个 B,11 个 C,21 个 D”开头的 pangram,您可以将其表示为 10000010100101110101...
这意味着布尔函数中有 26 * 5 = 130 个变量,假设您将字符的最大出现频率限制为 32 次。
输出应该是表示是否是自枚举pangram,即句子是否描述了它自己的频率集。
为此,肯定需要一个(或多个)哈希表。
所以对于字母 E,哈希表可能开始:
one -> 1
two -> 0
three -> 2
four -> 0
five -> 1
...
在二进制中,可能如下所示:
1 -> 1
10 -> 0
11 -> 10
100 -> 0
101 -> 1
如果来自 E 哈希表的所有查找的总和等于 E 对应的五个输入位,则自枚举 pangram 的该部分是正确的。如果所有部分都正确,则布尔函数应产生 1,否则为 0。
我很确定我可以弄清楚如何使用布尔函数进行加法以及如何检查两个数字是否相等。但是,我不知道从哪里开始将哈希表表示为布尔函数。此外,将所有部分连接在一起可能会让我感到困惑。
有什么想法吗?想法?合作?我想看看这是怎么回事。
提前致谢。
【问题讨论】:
-
这是一个非常有趣的问题,过去几个小时我一直在思考这个问题。就我个人而言,我会尝试通过搜索来解决问题,而不是尝试用布尔函数在数学上解决它。我查看了link 上的一些文献,这些论文提出了解决问题的方法,比我更有说服力。希望能有所帮助,非常感谢几个小时非常有趣的想法。戴夫
-
确实很有趣。也许你会发现这个关于二元决策图的文档很有用:voronkov.com/lics_doc.cgi?what=chapter&n=10
-
这是一个有趣的问题,你最终得到了这个结果吗?我试过阅读一些论文,但大多数较旧的论文都很难找到/似乎没有提供足够的细节。附:据我所知,您的方法应该可行,我只是想知道可以执行的可能优化/现代计算机是否需要任何优化(我猜不是)让我知道您是否最终构建了它,因为如果您没有' t 我可能不得不自己试一试。
-
对于遇到此问题的任何人,我确实得到了这个。我最终将自枚举 pangrams 问题减少为布尔可满足性问题,并围绕这个想法构建了一种编程语言,如下所示:sentient-lang.org
标签: binary logic hashtable boolean-expression boolean-operations