"2値行列とN次元の実数ベクトルとの行列演算を行う演算装置であって、M行N列M、Nは整数の前記2値行列のデータを入力するデータ入力部と、N次元の前記実数ベクトルを入力するベクトル入力部と、前記データ入力部により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築部と、前記構築部により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算部と、前記演算部による演算結果を出力する出力部とを有することを特徴とする演算装置。2値行列とN次元の実数ベクトルとの行列演算を行うコンピュータにより実行される演算方法であって、M行N列M、Nは整数の前記2値行列のデータを入力するデータ入力工程と、N次元の前記実数ベクトルを入力するベクトル入力工程と、前記データ入力工程により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築工程と、前記構築工程により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算工程と、前記演算工程による演算結果を出力する出力工程とを含むことを特徴とする演算方法。2値行列とN次元の実数ベクトルとの行列演算を行うコンピュータに実行させるための演算プログラムであって、前記コンピュータに、M行N列M、Nは整数の前記2値行列のデータを入力するデータ入力手順と、N次元の前記実数ベクトルを入力するベクトル入力手順と、前記データ入力手順により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築手順と、前記構築手順により構築された前記変換データと、前記ベクトル入力手順により入力された前記実数ベクトルとの行列演算を実行する演算手順と、前記演算手順による演算結果を出力する出力手順とを実行させることを特徴とする演算プログラム。一般に、M行N列の2値行列と、N次元の実数ベクトルとの行列演算を行う場合には、OMNの演算量に応じた計算時間および記憶容量とが必要となる。なお、Oオーは行列演算のオーダーを示し、MNは要素数を示す。一方で、上述したライブラリでは、行列が疎な場合、すなわち、非零である要素数KがK≪MNである場合に、非零成分のみについて行列計算を行うので、OKの演算量に応じた計算時間および記憶容量が必要となる。このように、上述したライブラリにより行列演算を行う場合には、非零である要素数Kに応じた計算時間および記憶容量が行列演算に必要となる。このため、上述したライブラリにより要素数が膨大な行列について演算を行う場合、演算量も膨大となる結果、演算に必要となる計算時間および記憶容量の規模が大きくなってしまうという問題がある。本発明は、上記に鑑みてなされたものであって、2値行列と実数ベクトルとの行列演算を効率的に実行することが可能な演算装置、演算方法および演算プログラムを提供することを目的とする。上述した課題を解決し、目的を達成するために、本発明は、2値行列とN次元の実数ベクトルとの行列演算を行う演算装置であって、M行N列M、Nは整数の前記2値行列のデータを入力するデータ入力部と、N次元Nは整数の前記実数ベクトルを入力するベクトル入力部と、前記データ入力部により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築部と、前記構築部により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算部と、前記演算部による演算結果を出力する出力部とを有することを特徴とする。また、本発明は、2値行列とN次元の実数ベクトルとの行列演算をコンピュータにより実行される演算方法であって、M行N列M、Nは整数の前記2値行列のデータを入力するデータ入力工程と、N次元Nは整数の前記実数ベクトルを入力するベクトル入力工程と、前記データ入力工程により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築工程と、前記構築工程により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算工程と、前記演算工程による演算結果を出力する出力工程とを実行することを特徴とする。また、本発明は、2値行列とN次元の実数ベクトルとの行列演算を行うコンピュータに実行させるための演算プログラムであって、前記コンピュータに、M行N列M、Nは整数の前記2値行列のデータを入力するデータ入力手順と、N次元Nは整数の前記実数ベクトルを入力するベクトル入力手順と、前記データ入力手順により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築手順と、前記構築手順により構築された前記変換データと、前記ベクトル入力手順により入力された前記実数ベクトルとの行列演算を実行する演算手順と、前記演算手順による演算結果を出力する出力手順とを実行させることを特徴とする。本発明によれば、2値行列と実数ベクトルとの行列演算を効率的に実行できるという効果を奏する。以下に、図面を参照しつつ、本願に係る演算装置、演算方法および演算プログラムの各実施例について詳細に説明する。後述する実施例は一例にすぎず、本願に係る演算装置、演算方法および演算プログラムを限定するものではない。また、後述する各実施例は処理内容に矛盾を生じさせない範囲で適宜組み合わせることもできる。[演算装置の概要と特徴実施例1]実施例1に係る演算装置は、2値行列と実数ベクトルとの行列演算を行うことを概要とする。そして、実施例1に係る演算装置は、2値行列を所定のデータ構造を用いて圧縮し、圧縮した2値行列を対象として演算を実行する点に特徴がある。具体的には、実施例1に係る演算装置は、M行N列M、Nは正の整数の2値行列を、ゼロサプレス型二分決定グラフZeroSuppressedBinaryDecisionDiagram,以下、適宜ZDDと記載するを用いたデータ構造に変換する。そして、実施例1に係る演算装置は、ZDDと実数ベクトルとの積の演算を、ZDD上で再帰的なアルゴリズムとして実行する。すなわち、実施例1に係る演算装置は、2値行列をZDDを用いたデータ構造に変換することにより2値行列のデータを圧縮して表現することができる。そして、実施例1に係る演算装置は、2値行列が有する非零の要素数Kに応じた演算を実行するのではなく、2値行列をZDDを用いたデータ構造に変換したときのZDDのノード数Wに応じた演算を実行できるようになる。このようなことから、実施例1に係る演算装置は、2値行列と実数ベクトルとの積の演算に必要となる計算時間や記憶容量を減らすことができ、行列演算を効率的に実行できる。[演算装置の構成実施例1]図1は、実施例1に係る演算装置の構成を示す機能ブロック図である。実施例1に係る演算装置100は、例えば、所定のプログラムなどに記述された手順に従い、所定の演算処理を行うパーソナルコンピュータやワークステーション、オフコンなどに相当する。なお、図1では、演算装置100を説明する上で必要となる機能を図示し、中央演算装置や主記憶装置、補助記憶装置などの一般的な機能の図示は省略する。図1に示すように、実施例1に係る演算装置100は、データ入力部110と、ZDD構築部120と、データ記憶部130と、ベクトル入力部140と、行列演算実行部150と、計算結果出力部160とを有する。データ入力部110は、M行N列M、Nは正の整数の2値行列要素が0もしくは1の値である行列を入力する。図2は、データ入力部が入力する2値行列の一例を示す図である。図2に示すように、データ入力部110は、例えば、3行3列の2値行列を入力する。なお、データ入力部110は、例えば、キーボードやマウスなどのユーザインターフェースや、USBUniversalSerialBusやイーサネット登録商標などのハードウェアインターフェースなどを介して2値行列を入力する。ZDD構築部120は、データ入力部110により入力されたM行N列の2値行列から、ZDDZeroSuppressedBinaryDecisionDiagramを構築する。まず、ZDD構築部120によるZDDの構築手順の説明に先立ち、ZDDについて説明する。ZDDは、組み合わせ集合を2分グラフの形で保持するデータ構造である。ここで、組み合わせ集合とは、あるアイテムの集合A={a1,a2,...,}に対して、e⊆Aであるようなeを要素とする集合である。一例を挙げれば、集合B={a,b,c}がある場合に、集合{{a,b},{b,c},{a,c}}は、集合Bの組み合わせ集合ということになる。図3は、ZDDの一例を示す図である。なお、図3は、組み合わせ集合{{a,b},{b},{c}}のZDDを表している。図3に示すように、ZDDI1は指向性を持ったグラフ構造で構成される。また、図3に示すように、ZDDI1は、0または1のラベルが貼り付けられた終端ノード図3の四角いノードと、a,bまたはcのラベルが貼り付けられた中間ノード図3の丸いノードとの2種類のノードを有する。また、図3に示すように、中間ノードは、それぞれ、HIリンク実線矢印およびLOリンク点線矢印を有する。中間ノードが有する各リンクは、それぞれが別の子ノードを指す。また、図3に示すように、ZDDには、先頭ノードを表すポインタfが設けられる。このように、ZDDは、終端ノード、中間ノード、HIリンク、LOリンクおよびポインタを有するグラフ構造によって組み合わせ集合を表現する。例えば、ある組み合わせeが、ZDDが表す組み合わせ集合に含まれるか否かは、以下に説明する手続きにより判明する。まず、ZDDの先頭ノードを表すポインタに沿って、先頭ノードに遷移する。そこで、先頭ノードのラベルが表すアイテムがeに含まれているならHIリンクが指すノードに遷移し、そうでないならLOリンクが指すノードに遷移する。以上の手続きを最終的に終端ノードにたどり着くまで実行し、最終的にラベル1をもつ終端ノードに遷移し、かつeに含まれるすべてのアイテムに対応するノードを遷移してきているなら、eは組み合わせ集合に含まれる。一方、以上の手続きを最終的に終端ノードにたどり着くまで実行し、最終的にラベル1をもつ終端ノードに遷移せず、かつeに含まれるすべてのアイテムに対応するノードを遷移してきていないなら、eは組み合わせ集合に含まれない。図4は、図3に示すZDDに対応するノード表の一例を示す図である。図4に示すように、ZDDは、コンピュータ上においては、ノードIDをインデックスとし、各要素を配列したノード表で表現される。図4に示すように、ノード表には、各要素として、ノードIDごとに、ノードのラベル、HIリンク先のノードID、LOリンク先のノードIDがそれぞれ格納されている。ところで、ある組み合わせをZDDで表現するときには、アイテム間にあらかじめ順序が定められている。具体的には、あるノードのラベルであるアイテムとその子ノードのラベルであるアイテムとを比較したときに、必ず子ノードのアイテムの順序が後になるようにするという制約がある。例えば、上述したZDDI1図3では、ラベルa、b、cが貼り付けられたアイテムの間に、a、b、cの順で順序が定められている。また、ノードIDがiであるノードのHIリンク先となるノードのノードIDをHIi、LOリンク先となるノードのノードIDをLOiとした場合に、上述したZDDの配列図4では、i>2のときに、常にHIi<i,LOi<iが成り立つように構成されている。以下、ノードIDがiであるノードのラベルをvi、HIリンク先のノードのノードIDをHIi、LOリンク先のノードのノードIDをLOiと記述する。ZDDの説明に続いて、ZDD構築部120が、M行N列の2値行列からZDDを構築する手順について説明する。ZDD構築部120は、データ入力部110からM行N列の2値行列を取得し、行列の各行について、1つの要素のみからなる集合を作成する。行列の各行について、ZDD構築部120により作成される1つの要素のみからなる集合は、例えば、以下に示す式1で表される。続いて、ZDD構築部120は、行列の各行について、1つの要素のみからなる集合を作成した後、それらの和集合を作成する。ZDD構築部120により作成される和集合は、例えば、以下に示す式2で表される。なお、上述した式1および2に示すai,jは、行列のi行目のN個の要素のうち、値が1である列番号を並べたものである。例えば、データ入力部110から取得した2値行列が、図2に示すような3行3列の2値行列で与えられたとすると、a1,1=1,a1,2=3となる。また、上述した式1および2に示すbiは、行列のi行目のN個の要素のうち、値が1である要素の個数を示すものである。例えば、データ入力部110から取得した2値行列が、図2に示すような3行3列の2値行列で与えられたとすると、b1=2,b2=1,b3=1となる。また、上述した式1および2に示すRiは、行列のi行目に対応するシンボルを示すものであり、上述した式1および2に示すCiは、行列のi列目に対応するシンボルを示すものである。このように、ZDD構築部120は、データ入力部110により入力された2値行列を、上述した式2に示すようにして圧縮して表現できる。続いて、ZDD構築部120は、上述の式2で表わされる和集合を組み合わせ集合Fとして、組み合わせ集合FのZDDを計算し、データ記憶部130に格納する。なお、組み合わせ集合と、その集合に出現するシンボルの順序とが与えられれば、既存の技術を利用して、ZDDを対象とした演算を行うことによりZDDを計算することができる。そこで、ZDD構築部120は、組み合わせ集合F式2に出現するシンボルR1,R2,...,RM,C1,C2,...,CNに対して、R1<R2<<RM<C1<C2<<CNという順序を与え、既存の技術を利用した演算を行うことにより、組み合わせ集合FのZDDを計算する。なお、ZDDを対象とした演算を行う既存の技術としては、例えば、ShinichiMinato,ZeroSuppressedBDDsforSetManipulationinCombinatorialProblems,DAC’93,pp272277などがある。図5は、ZDD構築部120により構築されるZDDの一例を示す図である。図6は、ZDD構築部120により構築されたZDDに対応するノード表の一例を示す図である。なお、図5および図6は、上述した式2で表される組み合わせ集合から構築されるZDDである。ZDD構築部120は、組み合わせ集合Fと、組み合わせ集合Fに出現するシンボルの順序とが与えられると、既存技術を利用した演算を行うことにより、図5に示すようなZDDI2を構築できる。図5に示すように、ZDDI2は、ラベルR1,R2,R3,C1,C2,C3が貼り付けられた中間ノード丸いノードと、0または1のラベルが貼り付けられた終端ノード四角いノードとを有する。また、図5に示すように、ZDDI2は、中間ノードのうち、ポインタfが指すラベルR1が貼り付けられたノードを先頭ノードとする。また、図6に示すように、ZDDI2は、コンピュータ上において、ノードIDをインデックスとし、各要素を配列したノード表で表現される。ノード表のノードID1~8は、図5に示すラベル0,1,C3,C2,C1,R3,R2,R1のノードにそれぞれ対応する。なお、ZDD構築部120により構築されるZDDは、組み合わせ集合を可能な限り圧縮した形で表現することが可能なデータ構造である。もし、ZDD構築部120が、組み合わせ集合を全く圧縮することなく、ZDDを構築したとする。この場合、ZDD構築部120は、2値行列の行数と、行列中の非零成分の個数分の中間ノードを有するZDDとして、組み合わせ集合を表現することとなる。一方、ZDD構築部120は、組み合わせ集合で表される2値行列の各行をベクトルとして行同士を比較し、共通部分を可能な限り圧縮した構造でZDDを構築したとする。この場合、ZDD構築部120は、共通部分を圧縮せずに構築したZDDよりも、中間ノードの数を減らしたZDDとして、組み合わせ集合を表現することができる。ベクトル入力部140は、データ入力部110により入力された2値行列との積の計算対象であるN次元Nは正の整数の実数ベクトルを入力する。なお、ベクトル入力部140は、データ入力部110と同様に、ユーザインターフェースやハードウェアインターフェースなどを介してN次元の実数ベクトルを入力する。行列演算実行部150は、ZDD構築部120により2値行列から構築されたZDDと、ベクトル入力部140により入力されたN次元の実数ベクトル以下、適宜N次元ベクトルと記載するとを用いて、行列演算を実行する。具体的には、行列演算実行部150は、以下に説明するように、2値行列から構築されたZDDと、実数ベクトルとの積の演算を、ZDD上で再帰的なアルゴリズムとして実行する。まず、行列演算実行部150は、ベクトル入力部140からN次元ベクトルを取得し、取得したN次元ベクトルをq、i番目の要素をqiと表す。続いて、行列演算実行部150は、データ記憶部130からZDDを取得し、N次元ベクトルとの積を演算する。なお、N次元ベクトルqと、ZDDとの演算結果を、M次元ベクトルpとする。行列演算実行部150は、まず、スコアを格納する要素数W-Mの1次元配列scoreを用意し、すべての要素を0で初期化しておく。ここで、要素数W-Mは、ZDDの中間ノードのうち、列に対応するラベルを持つものの数である。次に、行列演算実行部150は、インデックスiをi=3に初期化する。続いて、行列演算実行部150は、viが、C1~CNのいずれかに一致するか否かを判定する。viは、ノードIDがiであるノードのラベルである。viが、C1~CNのいずれかに一致する場合には、行列演算実行部150は、1次元配列score[i]の値を、ノードIDがiであるノードの子ノードの1次元配列score[HIi]と、vi=Cjとなるjに対応するパラメータqjの和に更新する。HIiは、ノードIDがiであるノードのHIリンク先となるノードのノードIDである。なお、ノード表については、HIi<iが成り立っているので、score[i]の値の計算は更新されたscore[HIi]の値を利用して行うことができる。一方、viが、C1~CNのいずれにも一致しない場合には、行列演算実行部150は、pkにscore[HIi]の値を代入する。なお、kは、vi=Rkとなるときの行番号のことである。つまり、viが、C1~CNのいずれにも一致しない場合、viは、R1~RMのいずれかに一致するためである。続いて、行列演算実行部150は、ZDDの全てのノードについて1次元配列scoreの計算を完了したかi≦Wであるか否かを判定する。全てのノードについて1次元配列scoreの計算を完了していない場合には、行列演算実行部150は、インデックスiを1インクリメントして、上述したのと同様の手順で1次元配列scoreの計算を行う。一方、全てのノードについて1次元配列scoreの計算を完了している場合には、行列演算実行部150は、行列演算の結果pを後述する計算結果出力部160に送出して処理を終了する。上述してきたように、行列演算実行部150による行列演算は、以下に示す式3のように計算できることを利用し、各ノードに計算途中の値を記憶することによって、最終的な計算結果pを得るものである。以下、図7および図8を用いて、行列演算実行部150による行列演算について補足説明する。図7は、図2に示す行列の1行目のデータについて構築したZDDを示す図である。図8は、図7に対応するノード表を示す図である。行列演算実行部150は、図7に示すZDDI3を構成するノードのうち、ノードIDが3であるノードについて、score[3]=q3とする。続いて、行列演算実行部150は、図7に示すZDDI3を構成するノードのうち、ノードIDが4であるノードについて、score[4]=q1q3とし、最終的に、p1=q1q3を計算する。上述してきたように、行列演算実行部150は、ZDDと実数ベクトルとの積の演算を、ZDDのノード数Wに比例する時間で演算の処理を終了することができる。すなわち、行列演算実行部150は、演算量OWに応じた計算時間および記憶容量で処理を行うことができ、演算量OMNや演算量OKよりも、必要となる計算時間や記憶容量を削減できる。上述してきた方法により、ZDDと実数ベクトルとの積の演算量を、OWに減らすことができる理由は次のとおりである。再帰的計算において各中間ノードに対応して計算されるscoreの値は、行ベクトルと実数ベクトルqとの乗算の途中までの演算結果を保持している。このとき、ある行ベクトルに対する乗算と、別の行ベクトルに対する乗算において、途中までの計算が同一である場合、その結果が同一のノードに保持されることになるので、計算回数を削減することができる。その結果、ZDDと実数ベクトルとの積の演算量をOWに減らすことができる。計算結果出力部160は、行列演算実行部150による演算の結果を外部へ出力する。例えば、計算結果出力部160は、ディスプレイやモニタ、プリンタなどの周辺機器へ演算の結果を出力する。なお、上述してきた演算装置100の各種処理機能は、例えば、電子回路や集積回路により実装することができる。電子回路としては、例えば、CPUCentralProcessingUnitやMPUMicroProcessingUnitがある。また、集積回路としては、例えば、ASICApplicationSpecificIntegratedCircuitやFPGAFieldProgrammableGateArrayなどがある。また、データ記憶部130は、例えば、RAMRandomAccessMemoryやフラッシュメモリなどの半導体メモリ素子を用いて実装することができる。[演算装置による処理実施例1]図9~図11を用いて、実施例1に係る演算装置による処理の流れを説明する。図9は、実施例1に係るZDD構築処理の流れを示す図である。図10は、実施例1に係る行列と実数ベクトルとの積の計算処理の流れを示す図である。図11は、行列演算処理の流れを示す図である。実施例1に係る演算装置100による処理は、図9に示すZDD構築処理と、図10および図11に示す行列と実数ベクトルとの積の計算処理とに2分される。ZDD構築処理図9に示すように、データ入力部110は、M行N列の2値行列を入力するS101。続いて、ZDD構築部120は、S101で入力した行列の各行を入力として、組み合わせ集合Fを計算するS102。そして、ZDD構築部120は、S102で計算した組み合わせ集合Fに対応するZDDを構築するS103。具体的には、ZDD構築部120は、データ入力部110からM行N列の2値行列を取得し、行列の各行について、1つの要素のみからなる集合を作成する式1参照。続いて、ZDD構築部120は、行列の各行について、1つの要素のみからなる集合を作成した後、それらの和集合を作成し、組み合わせ集合Fを作成する式2参照。そして、ZDD構築部120は、組み合わせ集合F式2に出現するシンボルR1,R2,...,RM,C1,C2,...,CNに対して、R1<R2<<RM<C1<C2<<CNという順序を与え、既存の技術を利用した演算を行うことにより、組み合わせ集合Fに対応するZDDを構築する。行列と実数ベクトルとの積の計算処理図10に示すように、ベクトル入力部140は、N次元の実数ベクトルを入力するS201。続いて、行列演算実行部150は、ZDD構築部120により2値行列から構築されたZDDと、ベクトル入力部140により入力されたN次元の実数ベクトルとを用いて、行列演算を実行するS202。行列演算処理行列演算実行部150は、図11に示す処理を実行する前に、ベクトル入力部140からN次元ベクトルqを取得し、データ記憶部130からZDDを取得して、スコアを格納する要素数W-Mの1次元配列scoreを用意し、すべての要素を0で初期化しておく。以上の準備が完了した後、行列演算実行部150は、インデックスiをi=3に初期化するS301。続いて、行列演算実行部150は、viが、C1~CNのいずれかに一致するか否かvi=Cj1≦j≦Nを判定するS302。判定の結果、viが、C1~CNのいずれかに一致する場合にはS302、Yes、行列演算実行部150は、score[i]の値を、scoreHIiqjに更新するS303。続いて、行列演算実行部150は、i≦Wであるか否かを判定するS304。判定の結果、i≦Wである場合にはS304、Yes、行列演算実行部150は、ZDDの全てのノードについてscoreの計算を完了しているものとして、演算結果pを計算結果出力部150に送出してS305、行列演算処理を終了する。一方、判定の結果、i≦Wではない場合にはS304、No、行列演算実行部150は、ZDDの全てのノードについてscoreの計算を完了していないものとして、iの値を1インクリメントi←i1してステップS306、上述のS302に戻る。上述したステップS302において、判定の結果、viが、C1~CNのいずれにも一致しない場合にはS302、No、行列演算実行部150は、pk←scoreHIiとしてS307、上述のS305に移行する。[実施例1による効果]上述してきたように、実施例1に係る演算装置100は、M行N列M、Nは正の整数の2値行列を、ZDDを用いたデータ構造に変換する図5、6等。そして、実施例1に係る演算装置は、ZDDと実数ベクトルとの積の演算を、ZDD上で再帰的なアルゴリズムとして実行する図11等。すなわち、実施例1に係る演算装置は、2値行列をZDDを用いたデータ構造に変換することにより2値行列のデータを圧縮して表現することができる。そして、実施例1に係る演算装置は、2値行列が有する非零の要素数Kに応じた演算を実行するのではなく、2値行列をZDDを用いたデータ構造に変換したときのZDDのノード数Wに応じた演算を実行できるようになる。このようなことから、実施例1に係る演算装置は、2値行列と実数ベクトルとの積の演算に必要となる計算時間を減らすことができ、行列演算を効率的に実行できる。また、疎な2値行列のデータを圧縮するので、演算に必要となる記憶容量を削減することもできる。また、上述の実施例1では、図9に示すZDD構築処理と、図10および図11に示す行列と実数ベクトルとの積の計算処理とを2分して説明したが、図9に示すZDD構築処理と、図10および図11に示す行列と実数ベクトルとの積の計算処理とをシリアルに実行してもよい。なお、上述してきた実施例1に係る演算装置は、各種数値計算や物理的なシミュレーション、各種情報管理などに幅広く適用することができる。特に、ある特定の2値行列が繰り返し利用される状況においては、一旦ZDDによって2値行列を構築すれば、計算量削減の効果が見込まれる。以下、本発明にかかる演算装置、演算方法および演算プログラムの他の実施形態として実施例2を説明する。1装置構成等図1に示した演算装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、演算装置100の分散または統合の具体的形態は図1に示すものに限られず、演算装置100のZDD構築部120、データ記憶部130および行列演算実行部150を機能的に統合されていてもよい。このように、演算装置100の各構成要素の全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散統合して構成することができる。2演算プログラムまた、実施例1で説明した演算装置100の各種の処理例えば、図9~11等参照は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどの電子機器で実行することによって実現することができる。そこで、以下では、図12を用いて、実施例1で説明した演算装置100と同様の機能を有する演算プログラムを実行する電子機器の一例を説明する。図12は、演算プログラムを実行する電子機器の一例を示す図である。図12に示すように、演算装置100が有する機能と同様の機能を有する電子機器200は、CPUCentralProcessingUnit210、入力部220、出力部230、メモリ240およびハードディスク装置250を有する。そして、CPU210、入力部220、出力部230、メモリ240およびハードディスク装置250は、バス260を介して接続される。CPU210は、各種演算処理を実行する。なお、電子機器200は、CPU210の代わりに、例えば、MPUMicroProcessingUnitなどの電子回路、ASICApplicationSpecificIntegratedCircuitやFPGAなどの集積回路を用いることもできる。入力部220は2値行列などの各種情報を入力する。また、出力部230は行列演算の結果などを出力する。また、メモリ240は、2値行列を変換したZDDなどの各種情報を一時的に記憶する。なお、メモリ240は、例えば、RAMRandomAccessMemoryやフラッシュメモリなどの半導体メモリ素子を用いて実装できる。また、ハードディスク装置250は、CPU210による各種処理の実行に必要な情報を記憶する。ハードディスク装置250には、演算装置100が有する機能と同様の機能を発揮する演算プログラム251および演算用データ252が記憶されている。なお、この演算プログラム251を適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。そして、CPU210が、演算プログラム251をハードディスク装置250から読み出してメモリ240に展開することにより、図12に示すように、演算プログラム251は演算プロセス241として機能する。演算プロセス241は、ハードディスク装置250から読み出した演算用データ252等の各種データを適宜メモリ240上の自身に割当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。なお、演算プロセス241は、例えば、上述した演算装置100のZDD構築部120や行列演算実行部150などにより実行される処理、例えば、上述の図9~11などを用いて説明した処理を含む。なお、上述した演算プログラム251については、必ずしも最初からハードディスク装置250に記憶させておく必要はない。例えば、電子機器200が、フレキシブルディスク、CD-ROM、DVD、光磁気ディスク、ICカードなどの可搬用の物理媒体に予め記憶された演算プログラム251を読み出して実行するようにしてもよい。さらには、電子機器200が、公衆回線、インターネット、LAN、WANなどを介して接続可能な他のコンピュータまたはサーバなどに格納された演算プログラム251を読み出して実行するようにしてもよい。3演算方法実施例1で説明した演算装置100により、以下のような演算方法が実現される。すなわち、2値行列とN次元の実数ベクトルとの行列演算を演算装置100としてのコンピュータが実行する演算方法であって、コンピュータは、M行N列M、Nは整数の2値行列のデータを入力するデータ入力工程と図9、S101、N次元Nは整数の実数ベクトルを入力するベクトル入力工程と図10、S201、データ入力工程により入力された2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築工程と図9、S103、構築工程により構築された変換データと、ベクトル入力部により入力された実数ベクトルとの行列演算を実行する演算工程と図10、S202、図11、演算工程による演算結果を出力する出力工程とを実行することを特徴とする演算方法が実現される。"