Binary 如何将自枚举pangram表示为布尔函数?

Binary 如何将自枚举pangram表示为布尔函数?,binary,logic,hashtable,boolean-expression,boolean-operations,Binary,Logic,Hashtable,Boolean Expression,Boolean Operations,wiki上关于自枚举Pangram的文章指出,它们是使用二进制决策图计算的。我一直在阅读有关BDD的内容,据我所知,在为BDD构造BDD之前,需要将一些问题表示为布尔函数 我该怎么做呢 我已经考虑这个问题好几天了,我非常确定您可以使用简单的编码来表示布尔函数的输入: 10000 01010 01011 10101 ... 16A's 10B's 11C's 21D's ... 因此,对于一个以“十六个a,十个B,十一个C,二十一个D”开头的pangram,您可以将其表示为10000010010

wiki上关于自枚举Pangram的文章指出,它们是使用二进制决策图计算的。我一直在阅读有关BDD的内容,据我所知,在为BDD构造BDD之前,需要将一些问题表示为布尔函数

我该怎么做呢

我已经考虑这个问题好几天了,我非常确定您可以使用简单的编码来表示布尔函数的输入:

10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
因此,对于一个以“十六个a,十个B,十一个C,二十一个D”开头的pangram,您可以将其表示为100000100101110101

这意味着布尔函数中有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

我很确定我能想出如何使用布尔函数进行加法,以及如何检查两个数字是否相等。但是,我不知道从何处开始将哈希表表示为布尔函数。而且,将所有的部分连接在一起可能会让我感到困惑

有什么想法吗?思想?协作我想看看这是怎么回事


提前感谢。

在我看来,在本文中使用的BDD只是一种表示和帮助操作表达式的方法,用于评估(例如)您的句子是否满足作为自枚举pangram的要求。有一些规则在概念上比布尔代数中的语句更容易操作它们,因为它们在该符号中比在布尔符号中更容易表示,同样,8000个变量中的多项式在其一般形式下比在表示其来源的其他符号中更难处理。计算机算法可以处理这四种算法中的任何一种,所以您最好的选择可能是查找并根据您的需要调整一种算法。你可能会发现这很有帮助


也可能有助于寻找其他资源。

有一些线索:这是一个非常有趣的问题,我在过去几个小时里一直在思考这个问题。就我个人而言,我会尝试用搜索来解决这个问题,而不是尝试用布尔函数来数学地解决它。我看了一些关于这方面的文献,这些论文提出了解决这一问题的方法,比我所能做的更有说服力。希望这能有所帮助,非常感谢你花了几个小时的时间思考。每件事都很有趣。也许你会发现这篇关于二元决策图的文档很有用:这是一个有趣的问题,你最终有什么收获吗?我试着通读了一些论文,但大部分旧的都很难找到/似乎没有提供足够的细节。另外,据我所知,你的方法应该是可行的,我只是想知道可能会进行哪些优化/现代计算机是否需要任何优化(我猜不是)让我知道你是否最终构建了这个,因为如果你没有,我可能不得不自己尝试一下。对于任何在这个问题上遇到障碍的人,我确实做到了这一点。最后,我将自枚举Pangram问题简化为布尔可满足性问题,并围绕这一思想构建了一种编程语言,如下所示: