##master-page:ReadingTemplate
#format wiki
#language ja
= 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読み物]]