自枚举的句子维基文章指出,它们是使用二叉决策图计算的。我一直在阅读有关BDD的内容,据我理解,您需要将某些问题表示为布尔函数,然后才能为其构建BDD。
我该如何做?
我已经思考了几天,我相当确定您可以使用简单的编码来表示布尔函数的输入:
如果从E哈希表中查找的所有值的总和等于与E相对应的五个输入位,则自枚举排列的该部分是正确的。如果所有部分都正确,则布尔函数应该产生1,否则为0。
我相当确定我可以想出如何使用布尔函数进行加法运算以及如何检查两个数字是否相等。然而,我不知道如何将哈希表表示为布尔函数。此外,连接所有部分在我看来可能会使我困惑。
有什么想法?创意?合作?我想看看这个项目的发展。
提前致谢。
我该如何做?
我已经思考了几天,我相当确定您可以使用简单的编码来表示布尔函数的输入:
10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
因此,对于以“十六个A,十个B,十一个C,二十一个D”开头的完美句子(pangram),您可以将其表示为10000010100101110101...。
这意味着布尔函数中有26 * 5 = 130个变量,假设您将字符的最大频率限制为32次出现。
输出应该是表示是否为自计数完美句子,即句子是否描述了其自己的频率集。
要做到这一点,肯定需要使用散列表(或几个)。
因此,对于字母E,散列表可能如下开始:
one -> 1
two -> 0
three -> 2
four -> 0
five -> 1
...
在二进制中,它可能看起来像:
1 -> 1
10 -> 0
11 -> 10
100 -> 0
101 -> 1
如果从E哈希表中查找的所有值的总和等于与E相对应的五个输入位,则自枚举排列的该部分是正确的。如果所有部分都正确,则布尔函数应该产生1,否则为0。
我相当确定我可以想出如何使用布尔函数进行加法运算以及如何检查两个数字是否相等。然而,我不知道如何将哈希表表示为布尔函数。此外,连接所有部分在我看来可能会使我困惑。
有什么想法?创意?合作?我想看看这个项目的发展。
提前致谢。