QM法

2

主加法標準形、主乗法標準形をどうやって導くかについては、
http://www.akita-nct.ac.jp/yamamoto/lecture/2003/2E/canonical_expansion/node2.html
このページなどがわかりやすいでしょう。

パースなどはCなどで書いてもよいですが、ML演習の初期のインタプリタを流用する手もあります。

3

基本的には解説ページに書いてあるとおりです。
得意な言語で書けば良いと思うのですが、Cでは最小項のグループが少し表しづらいかもしれません。
個人的にはC++,Javaや、スクリプト言語を推します。OCamlでもよいかも。[要出典]

F(w,x,y,z) = Σ(1,4,...)とは?

(数学的に正しいかは知りませんが)
ブール値w,x,y,zを4桁の2進数と見たときに、(10進数で)1,4,6,...の時に真になるような関数。
この関数の最小項は2番で求めました。

2進数に直して1を含む数が共通?

ビット演算で頑張る。

ハミング距離が1?

2つの数のXORを取るとわかりやすいかも。

1と9をマージした後の*001とかってどう扱う?

筆者は*(0でも1でもよい部分)の部分のビットを最小項のグループごとに持っておいた。(一例です)

マージ

マージ時に、同じ最小項のグループが出来ることがある。(例の場合は10**,8,9,10,11)
これをいちいち1つにまとめると、マージがかなり早くなる。

集合被覆問題?

たしか全探索でよいです。


勝手に追記:ビット演算とか、Don't careの扱いがめんどくさい人へ。
OCaml、Scheme、Haskell、Prolog、LiLFeSとかリストを扱える言語だったら、真理値表を0、1、-1(Don't care)のリストに直して扱っても時間的には間にあうと思う。
Haskellでは大丈夫でしたので少なくともOCaml・Schemeあたりなら問題ないかと。 -- TakuyaKuwahara


Category読み物

ハードウェア実験/第9回 (最終更新日時 2011-08-26 16:46:10 更新者 TakuyaKuwahara)