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