##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読み物]]