システム開発実験No.7        解 説       “論理式の簡略化方法”.

Slides:



Advertisements
Similar presentations
コンピュータと情報 第10回 Excel を使ってみる. Excel の起動 ① 「スタート」ボタンをク リック ② すべてのプログラムにマ ウスカーソルをあわせる ③ 「 Microsoft Office 」 → 「 Microsoft Excel 2003 」 にマウスをあわせて,ク リック ④.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
【事例演習5】  字句解析     解 説  “ハッシュを用いた字句解析の方法”.
【事例演習1】 CGプログラム基礎      解 説        “Windowsプログラムにおける      ダイアログボックスの作成方法”    
3次元nクイーン問題の 解に関する研究 論理工学研究室 伊藤精一
  スケジュール管理手法PERT-Time      解 説    “最早開始時間計算のアルゴリズム”
初年次セミナー 第8回 データの入力.
富山大学 公開講座 2008 「QRコードを作ろう!」 ~ QRコードを作ろう! ~.
第6回 仮想記憶とページング ページング ページ取り出し方式 ページ置き換え方式 中間テスト(40分)
数当てゲーム (「誤り訂正符号」に関連した話題)
プログラミング基礎I(再) 山元進.
ラベル付き区間グラフを列挙するBDDとその応用
プログラミング言語としてのR 情報知能学科 白井 英俊.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
エクセル(2)の目次 セル範囲の指定方法 データの消去法 アクティブセルの移動 セル内容の複写と移動 セル幅の変更方法
地理情報システム論 第3回 コンピュータシステムおける データ表現(1)
【事例演習2】               2001年11月更新      「最短経路探索 (1)」           その1      解 説    “最短ルート探索のアルゴリズム”
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
香川大学工学部 富永浩之 情報数学1 第5-2章 命題論理式の 同値変形とカルノー表 香川大学工学部 富永浩之
2008年度 情報数理 ~ QRコードを作ろう!(1) ~.
第4回 カルノー図による組合せ回路の簡単化 瀬戸 目標 ・AND-OR二段回路の実現コスト(面積、遅延)が出せる
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
プログラムはなぜ動くのか.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
第5回 統計処理(2) 塩浦 昭義 東北大学全学教育科目 情報基礎 A 1セメスター 木曜1,3講時 経済学部・法学部
2010年度 情報数理 ~ QRコードを作ろう!(1) ~.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
4. 組み合わせ回路の構成法 五島 正裕.
情報処理A 第?回 Excelを使ってみる.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
数理論理学 第3回 茨城大学工学部情報工学科 佐々木 稔.
前回の練習問題.
段落書式設定 段落とは: Enterキーを押すまでに入力した文字列や図などのまとまり
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
第2回課題 配布した通り.氏名・学生番号を忘れないこと.
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
エクセル(2)の目次 セル範囲の指定方法 データの消去法 アクティブセルの移動 セル内容の複写と移動 セル幅の変更方法
コンパイラ 2011年10月20日
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
統計ソフトウエアRの基礎.
  第3章 論理回路  コンピュータでは,データを2進数の0と1で表現している.この2つの値,すなわち,2値で扱われるデータを論理データという.論理データの計算・判断・記憶は論理回路により実現される.  コンピュータのハードウェアは,基本的に論理回路で作られている。              論理積回路.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
5.チューリングマシンと計算.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
アルゴリズムとプログラミング (Algorithms and Programming)
論理回路 第5回
精密工学科プログラミング基礎 第7回資料 (11/27実施)
情報処理Ⅱ 第7回 2004年11月16日(火).
情報処理Ⅱ 2005年10月28日(金).
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
香川大学工学部 富永浩之 情報数学1 第5-2章 命題論理式の 同値変形とカルノー表 香川大学工学部 富永浩之
PROGRAMMING IN HASKELL
参考:大きい要素の処理.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
情報処理Ⅱ 2005年11月25日(金).
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
6.2 高速フーリエ変換 (1)FFT(fast Fourier transform)とは
各種荷重を受ける 中空押出形成材の構造最適化
アルゴリズム ~すべてのプログラムの基礎~.
Presentation transcript:

システム開発実験No.7        解 説       “論理式の簡略化方法”

真 or 偽 => 常に真 => 結果に影響を与えないので省略 【0】 簡略化で用いる基本的な規則 高速である A 高速でかつ(大容量か または大容量でない) A ( B + B ) A B + A B 高速で大容量であるか     または 高速で大容量でない (例)   A: 高速である   B: 大容量である 真 or 偽 =>   常に真 =>  結果に影響を与えないので省略

論理式の各項を座標空間内に配置されたトークンとして捉える 【1】 簡略化アルゴリズムの考え方     論理式の各項を座標空間内に配置されたトークンとして捉える 《例1》 A B + A B + A B 入力論理式: 座標値: (0 0) (1 0) (1 1) 0,0 座標空間に配置する 1,0 1,1 B 1 簡略化可能なので移動   変数が異なるので   もはや簡略化できない 1, -1 -1は,この変数に関して簡略化したことを意味する -1, 0 A 0         1 B     +   A

《例2》 A B C + A B C + A B C + A B C + A B C + A B C C (1,0,1) B A 入力論理式: 座標値に変換する 座標値 : 1,0,0 0,1,1 0,1,0 1,1,0 0,0,1 1,1,1 3次元空間の各座標番号で示される位置にトークンを配置する 3 1 4 2 6 7 A B C 1,0,0 1,1,0 0,0,1 1,1,1 0,1,0 0,1,1 5 (1,0,1) 座標番号とは,空間の各点の 座標値を2進数のビット列と解釈し 10進数に変換したものである

AC B AC 第2回目の移動 簡略結果へ変換 第1回目の移動 例2の簡略化動作 C 1 3 0,-1, 1 0,0,1 0,1,1 5 7 移動可能な方向へすべて動いたら移動元のトークンを消す 例2の簡略化動作 1 3 第2回目の移動 簡略結果へ変換 第1回目の移動 0,-1, 1 0,0,1 0,1,1 AC 5 7 -1,1,1 (1,0,1) 0, 1, -1 -1,1,-1 1,1,1 -1,1,-1 0,1,0 1,1,-1 B -1, 1, 0 1,-1, 0 1,0,0 2 B 1,1,0 AC A 4 6

【2】データ構造の設計 ① 簡略化されたトークンを含め どんなトークンが存在するかを 識別するためのデータ         アルゴリズムを実現するにはどんなデータ構造が必要か! ① 簡略化されたトークンを含め       どんなトークンが存在するかを       識別するためのデータ       (テーブルCoord) p.126参照 C 1 -1,1,1 0,0,1 0,1,1 3 ② 存在するトークンの     移動可能な軸方向を示すデータ      (テーブル pair_tbl)  p.127参照 5 7 (1,0,1) 1,1,1 0,1,0 ③ 各座標点にどんなトークンが    あるかを記録しておくデータ (テーブル reduce_tbl) p.128参照 4 2 B 1,0,0 1,1,0 A 1,1,-1 6

< 配列coord > (1) 各トークンは,001や010のような値を識別子としてもつ. (1) 各トークンは,001や010のような値を識別子としてもつ.     配列coordは,どのようなトークンが存在するかを格納しておく配列である.    簡略化された結果,変数値がー1になったトークンも,この配列に格納される. < 配列coord > 座標番号位置(=配置されたトークンの識別番号でもある) 1 2 3 4 5 6 7 8 9 10 11 12 13 0 0 1 0 1 0 0 1 1 1 0 0 1 1 0 1 1 1 1 1 -1 -1 1 1 1 -1 0 -1 1 0 0 1 -1 0 -1 1 初期配置されたトークンの識別子     nPoint 初期配置されたトークンの数 新たに生成された(簡略化された) トークンの識別子 nCoord 簡略化されたトークンも含めた   トークンの最大数 図3-17 座標番号に置かれたトークンと識別子を管理するテーブル

< 配列pair_tbl > (2) 存在するトークンの移動可能な軸方向を示す配列 始端座標番号(from) (2) 存在するトークンの移動可能な軸方向を示す配列      < 配列pair_tbl > 始端座標番号(from) 終端座標番号(to) 移動可能な軸(axis)方向 を示したもの.例えば,0ならば変数Aの軸方向, 1なら変数Bの軸方向,2なら変数Cの軸方向へ移動可能である.   3 1   6 1 7 2 3 2 6 2 7 3 7 4 6 4 7 6 7 1 2 fromとtoの差が2のべき乗でないものは移動可能な軸方向を示す配列から削除する. なぜなら,座標点は2進点の値と解釈している{例えば座標(110)や座標(010)等}. そこでトークンが進める方向を2つの座標点の差で表すと,その間には上記の例で言うと(100)(=23)の差がある. したがって,トークンが移動可能な軸方向は,始端座標番号(2進数を10進数に置き換えたもの)と終端座標番号の間には,2のべき乗の差がなくてはいけない. nPair (辺の数 + 1)

(3) 各座標点にどんなトークンが存在しているかを記録しておく配列 p.132参照 (3) 各座標点にどんなトークンが存在しているかを記録しておく配列                                        p.132参照 各座標番号に存在しているトークン数 ⑥もはやトークンが動けなるなるまでこの操作を繰り返す 座標番号 reduce_tbl reduce_tbl 1 2 3 4 5 6 7 2 1 13 3 2 11 12 2 3 9 2 4 10 2 6 8 1 7 ⑤ すべてのトークンを移動したら簡略化に使用されたトークンを消す 1 2 3 4 5 6 7 1 13 2 11 12 1 9 1 10 1 8 reduce_tbl 1 2 3 4 5 6 7 1  1 1  2 1  3 1  4 1   6 1  7 ②2つのノードを接続する辺の両端にトークンが存在するときのみ調べる ④ 簡略化に使用されたトークン であることを示す丸印を付ける ③簡略化の結果,生成したトークンの識別番号を置く ① 初期配置として各座標位置に 座標番号をもったトークンを置く

《 簡略化の基本的なアルゴリズム 》 関数 do_reduce ( ) Yes No Yes No 《 簡略化の基本的なアルゴリズム 》 関数 do_reduce ( ) 各座標点に入力された項に対応するトークンを初期配置する 移動可能な軸方向にもはやトークンが移動できなくなる(簡略化できなくなる)まで繰り返す 移動可能な軸の数だけ繰り返す            移動可能な辺の両端にトークンが存在するか Yes No          両端にあるトークンは簡略化が可能か matchToken(… ) Yes No 簡略化した結果を示す新たなトークンを簡略化の移動先に置く      moveToken(トークンID,到着ノード,軸方向) 両端のトークンに簡略化されたことを示す印を付ける 簡略化に使用したトークンを座標点から消去する

【課題】 欠損論理変数の個所を補い,あたかも標準形が入力されたかのようにデータを生成せよ A C (例1) A ( B + B ) C このように変形しても結果には影響ない.  A ( B + B ) C    A B C + A  B C このような標準形式の論理式が入力さ れたかのように変数データを生成する A   D   (例2)  A ( B + B ) ( C + C ) D  このような標準形式の論理式が入力さ れたかのように変数データを生成する  A B C D  + A  B C D  + A  B C D  + A  B  C D  

(1)欠損変数を補う方法について           生成する変数のパターンを見てみると…  A B C D  + A  B C D  + A  B C D  + A  B  C D   1  0 1  1 0  1 0  0 2進数のビットパターンになっている 欠損変数の数nが2なら,   nの2乗(=4)個のビットパターンを   あたかも入力されたかのように生成すればよい!!

(2) 具体的なプログラミングに必要なデータ (2) 具体的なプログラミングに必要なデータ ① 論理式の中の各項を格納しておくterm_tblとは! (例)入力された論理式  B  C  D   +   B  E minBit(Bより前の変数はない) maxBitSize(Eより後の変数はない) A   B C D E F 配列 term_tbl O 1 2 3 4 5 1 2 3 -1 1 1 1 -1 -1 -1 1 -1 -1 1 -1 第1項目 この変数が入力されなかった欠損変数であることを示している.これらの変数をあたかも入力されたかのように生成する 第2項目 nTerm False True   True True   True False 配列 exist 項の中で出現した変数=True

22 例えば,Term_tblの2行目を取り出したとき ●このようなビットパターンを欠損個所に 埋め込んだ入力変数データを作成する 配列 exist False True   True True   True False A   B C D E F -1 1 -1 -1 1 -1 配列 term_tbl [ 1 ] -1は欠損変数; 欠損変数の個数=2 ●このようなビットパターンを欠損個所に  埋め込んだ入力変数データを作成する 0 0 0 0 0 1 1 = -1 1 0 0 1 -1 -1 1 0 1 1 -1 -1 1 1 0 1 -1 -1 1 1 1 1 -1 22 欠損変数の個数 j= bit_pat = 0 j= bit_pat = 1 j= bit_pat = 2 j= bit_pat = 3

欠損変数を生成する手順の概要 【 関数translate_to_point 】 カウンタを i  として, 入力された項の数nTermだけ繰返す  すべての項に現れた変数が配列existに記録されている. それらを参照しながら  term_tblの i行目に格納された i番目の項に含めれる欠損変数の個数を見出す 欠損変数の個数 > 0  No Yes    生成する変数のビットパターン数nGenTerm =                    pow (2, 欠損変数の個数)  term_tblのi行目のデータを,一旦一次元配列termにコピーする. カウンタを n として, 生成する変数のビットパターン数nGenTerm だけ繰返す 関数store_to_coord(term)を呼出し,termを座標空間に配置する 欠損変数以外の変数は,そのまま用いるので,term_tblの i行目のデータを,一次元配列termにコピーする. // ビットパターンはtermに埋め込むものとする カウンタ n を 生成用のビットパターン(bit_pat)として用いる termの中の欠損変数の位置を探し出し, ビットパターンの1ビットをtermの欠損変数位置に次々と埋め込む この部分を作成する 関数store_to_coord(term)を呼出し,termを座標空間に配置する

【ヒント】 ビットパターンの最下位1ビットを取り出し,その値を埋め込む.  ビットパターンのそれぞれの1ビットを               変数位置に次々に埋め込むには 【ヒント】 ビットパターンの最下位1ビットを取り出し,その値を埋め込む. bit_pat >> = 1; 1ビット右シフト演算  ビットをシフトする演算 0 0 0 0 0 0 0 1  1ビットシフト後のビットパターン(bit_pat) 0 0 0 0 0 0 1 0 ビットパターン(bit_pat) & 演算 0 0 0 0 0 0 0 1 マスク(=1) & 演算 0 0 0 0 0 0 0 1 マスク(=1) 0 0 0 0 0 0 0 0 演算結果 X = bit_pat & 1; Xには0が入る 0 0 0 0 0 0 0 1 演算結果 X = bit_pat & 1; Xには1が入る