降低有序二元判定圖(ROBDD)是否有一個軟件包(最好的應用程序,而不是庫)從一個給定的事實表中創建精簡有序二叉決策圖(ROBDDs)(在某些文本格式)?創建真值表
創建真值表
回答
隨着任何BDD庫,你可以做你想做的。當然,你必須自己寫一段代碼。
如果你正在尋找一個輕量級的工具,我經常使用這樣的小應用程序有一個快速預覽功能的BDD:
你也可以試試這個:http://formal.cs.utah.edu:8080/pbl/BDD.php
這是我迄今使用的BDDs的最佳工具。
的BDD是因爲在檢測到重複的子truthtables的嚴重依賴的存儲器約束的數據結構。你會發現大多數BDD包不完全是一個很好的適合大,一般真值表,非常稀少或高度重複表達而不是優化。
使用標準的BDD軟件包,您可以使用對變量進行操作的表達式。所以你必須迭代你的真值表,在表中構造一個類似於1的和的表達式。一路上,大多數圖書館將動態地重新排列變量以適應內存限制,導致另一個巨大的放緩。在大約24個變量之後,即使具有非常稀疏的真值表,這些庫也將開始在現代系統上發生顛簸。
如果您只是在給出一個真值表的最終BDD節點,並且它的變量排序已經隱式定義了,那麼使用一些Unix文本處理工具就可以省略外部庫和可怕運行時的很多複雜性。
上BDD的,Knuth的TAOCP v4.1b,良好的資源顯示BDD節點和他們的「珠」,子truthtables那些非方形字符串的等價性。我將解決一個更簡單的版本,ZDD具有類似的結構,稱爲「宙斯」:積極的部分子不完全爲零的真理。爲了推廣到BDD,用管道中的sed + grep替換正方形字符串來代替正數部分的非零字符串。
要打印truthtable(給定爲ASCII的單行文件「1'和」 0',換行符在端)的所有zeads,設定的變量和文件名的數目之後運行下面的命令:
MAX=8; FILENAME="8_vars_truthtable.txt"; for ((ITER=0; ITER<=${MAX}; ITER++)) ; do INTERVAL=$((2 ** ${ITER})); fold -w ${INTERVAL} ${FILENAME} | sed -n '1~2!p' | grep -v "^0*$" | sort -u ; done
這個擁有超過BDD包很多好處:
- 簡單,基本上沒有多餘的依賴關係。
- 外部排序意味着不像內存中的散列表那樣顛簸。
- 輕鬆parallelizeable &可擴展的,如果你瞭解行緩衝和磁盤緩存在for循環分叉的時候。
- 如果寫入中間文件,排序也會並行。
我經常使用它的真值表最多32個變量大,這是不可能現實地拿出使用BDD庫。它根本不會對內存系統徵稅,幾乎不會使用幾個MB。但是如果你擁有大量的RAM,像Linux這樣的像樣的操作系統將很樂意將它全部用於緩存磁盤,以使其更快。
- 1. 用多種表情創建真值表
- 2. 創建二進制真值「表」
- 3. 我如何在turbo c中創建真值表
- 4. Matlab/Simulink仿真:創建事實表
- 5. 創建串行列時真空表
- 6. 真值表
- 7. 真值表VHDL
- 8. 如何構建真值表生成器?
- 9. 休眠@DynamicUpdate(值=真)@SelectBeforeUpdate(值=真)表現
- 10. 創建熊貓dataframes修真
- 11. 創建MyTouch 3G仿真器
- 12. 真值表陣列
- 13. 創建表單控件值
- 14. 從表值創建DataGridView列
- 15. 證明論證真值表真/假
- 16. 如何結合多索引和樞軸在熊貓中創建真值表?
- 17. 創建列表和選擇列表值
- 18. 從鍵值列表創建列表
- 19. Excel仿真根據行中的值創建列
- 20. 蟒蛇 - 創建使用修真特定鍵值
- 21. 需要幫助創建一個給定真值的二叉樹
- 22. Javascript中的真值表
- 23. 帶動作的真值表
- 24. 錯誤真值表VHDL
- 25. 3D矩陣真值表
- 26. 真值表與/〜爲J
- 27. 使用表中的值列表和更新值創建表單?
- 28. 如何用給定的兩列創建真假表?
- 29. 我真的需要創建臨時表嗎?
- 30. 如果條件爲真,則將XSLT轉換爲HTML創建表
提供的頁面並不完全是我想要的。我想提供一個真值表並計算它的ROBDD(即Reduced OBDD),它是給定函數的基於BDD的最小表示。該頁面不允許任何這樣的。 – tomash
好吧,它從作爲表達式給出的函數(實際上不是真值表)繪製出ROBDD。輸出是一個ROBDD,雖然標題只說BDD。或者你正在尋找最好的變量順序? – Lorenzo