自枚举 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。
我相当确定我可以弄清楚如何使用布尔函数进行加法以及如何检查两个数字是否相等。但是,我不知道从哪里开始将哈希表表示为布尔函数。此外,将所有部分连接在一起可能会让我感到困惑。
有什么想法吗?想法?合作?我想看看这是怎么回事。
提前致谢。