自我枚舉龐氏硬幣的維基文章指出,它們是使用二元判定圖計算出來的。我一直在閱讀有關BDD的信息,從我的理解中,您需要將某個問題表示爲布爾函數,然後才能爲其構建BDD。如何將一個自枚舉的pangram表示爲一個布爾函數?
我該怎麼做呢?
我一直在思考了好幾天的問題了,我敢肯定,你可以使用代表一個簡單的編碼輸入布爾函數:
10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
所以對於一個全字母短句出發「十六個A,十個B,十一個C,二十一個D」,你可以把它表示爲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的五個輸入比特,那麼自列舉的部分是正確的。如果所有部分都是正確的,那麼布爾函數應該產生1,否則爲0.
我很確定我可以弄清楚如何使用布爾函數執行加法以及如何檢查兩個數字是否相等。但是,我不知道從哪裏開始將哈希表表示爲布爾函數。而且,把所有的東西連接在一起可能會令我困惑。
有什麼想法?想法?合作?我想看看這是怎麼回事。
在此先感謝。
有一些線索:http://www.fatrazie.com/EWpangram.html –
這是一個非常有趣的問題,我很享受在過去幾個小時的思考。就我個人而言,我會嘗試用搜索來解決問題,而不是用布爾函數嘗試和數學解決它。我瀏覽了一下這個[link](http://scholar.google.com/scholar?q=pangram+search)上的一些文獻,這些論文提出瞭解決這個問題的方法。比我能。希望有所幫助,並且非常感謝幾個小時的非常有趣的想法。戴夫 – stormCloud
確實很有趣。也許你可以找到這個關於二元決策圖的文檔很有用:http://www.voronkov.com/lics_doc.cgi?what=chapter&n=10 – cprogcr