"複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する装置であって、前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、前記選択部により選択された前記特定の部品の部品表が展開済みであるかどうかを判定する判定部と、前記特定の部品の部品表が展開済みでないと前記判定部により判定された場合に、当該特定の部品の部品表を、当該特定の部品を構成する各部品に対応する位置で前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開情報と、当該各部品の員数と当該並列展開情報における当該各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、前記特定の部品の部品表が展開済みであると前記判定部により判定された場合に、前記部品表展開情報に含まれる各部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該各部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算する加算部とを含む、装置。前記展開部は、前記特定の部品を構成する各部品に対応する位置として、その員数が前記並列展開情報に格納されていない部品については、予め定められた規則によって決まる位置を用い、その員数が前記並列展開情報に格納されている部品については、当該員数が格納された位置を用いる、請求項1の装置。前記展開部は、前記特定の部品の部品表を、当該特定の部品に対応する位置で前記特定の製品に対応する位置に当該特定の部品の員数が更に格納された前記並列展開情報と、当該特定の部品の員数と当該並列展開情報における当該特定の部品に対応する位置を特定する情報とを更に含む前記部品表展開情報とに展開し、前記加算部は、前記部品表展開情報に含まれる前記特定の部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該特定の部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算する、請求項1又は請求項2の装置。前記展開部は、前記特定の部品に対応する位置として、その員数が前記並列展開情報に格納されていなければ、予め定められた規則によって決まる位置を用い、その員数が前記並列展開情報に格納されていれば、当該員数が格納された位置を用いる、請求項3の装置。複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する装置であって、前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、前記選択部により選択された前記特定の部品の部品表が展開済みであるかどうかを判定する判定部と、前記特定の部品の部品表が展開済みでないと前記判定部により判定された場合に、当該特定の部品の部品表を、当該複数の製品を構成する複数の部品をそれぞれ表す複数のノードを持ち、当該複数のノードの各部品を表すノードに対応する配列の前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開リストと、当該特定の部品を構成する複数の部品をそれぞれ表す複数のノードを持ち、当該複数のノードの各部品を表すノードに当該各部品の員数と当該並列展開リストにおける当該各部品を表すノードを特定する情報とが登録された部品表展開リストとに展開する展開部と、前記特定の部品の部品表が展開済みであると前記判定部により判定された場合に、前記部品表展開リストが持つ各ノードに登録された各部品の員数を、前記並列展開リストにおけるノードであって、前記部品表展開リストが持つ当該各ノードに登録された情報で特定される当該各部品を表すノードに対応する配列の前記特定の製品に対応する位置に格納された員数に加算する加算部とを含む、装置。前記複数の製品の部品表を記憶するデータベースと、前記複数の製品の部品表に基づいて生成された隣接リストであって、当該複数の製品と、当該複数の製品を構成する複数の部品とを表す複数のノードを持つ隣接リストを記憶するメモリとを更に備え、前記選択部は、前記隣接リストが持つ前記複数のノードのうち、前記特定の製品を表すノードが持つリストに登録された情報で特定されるノードが表す部品を、前記特定の部品として選択する、請求項5の装置。複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する方法であって、前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択するステップと、選択された前記特定の部品の部品表が展開済みであるかどうかを判定するステップと、前記特定の部品の部品表が展開済みでないと判定された場合に、当該特定の部品の部品表を、当該特定の部品を構成する各部品に対応する位置で前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開情報と、当該各部品の員数と当該並列展開情報における当該各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開するステップと、前記特定の部品の部品表が展開済みであると判定された場合に、前記部品表展開情報に含まれる各部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該各部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算するステップとを含む、方法。複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する装置として、コンピュータを機能させるプログラムであって、前記コンピュータを、前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、前記選択部により選択された前記特定の部品の部品表が展開済みであるかどうかを判定する判定部と、前記特定の部品の部品表が展開済みでないと前記判定部により判定された場合に、当該特定の部品の部品表を、当該特定の部品を構成する各部品に対応する位置で前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開情報と、当該各部品の員数と当該並列展開情報における当該各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、前記特定の部品の部品表が展開済みであると前記判定部により判定された場合に、前記部品表展開情報に含まれる各部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該各部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算する加算部として機能させる、プログラム。ところで、上述した第2の並列展開方法では、列、つまり最終製品が少なければ、行、つまり部品表ツリーに含まれる部品が多くても、高速に処理可能である。しかしながら、列が多い場合には、行が少なかったとしても実行性能が出ないことがある。これは、各列に対応する部品表ツリー中の部品をマージする際の比較処理等に時間がかかってしまうためである。並列展開の結果の表の列が最終製品を表す場合、列の数は、少なくとも数百、多いときには数千になることがあるが、こうなると、DBアクセスの時間を短縮できたとしても、展開自体に何時間もかかることになる。尚、公報記載の技術は、何れも、複数の製品の部品表をその複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する処理におけるこのような課題を解決する手法を提案するものではない。本発明の目的は、複数の製品の部品表をその複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する処理を、製品の数が多くても高速に実行することにある。かかる目的のもと、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置であって、複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、選択部により選択された特定の部品の部品表が展開済みであるかどうかを判定する判定部と、特定の部品の部品表が展開済みでないと判定部により判定された場合に、特定の部品の部品表を、特定の部品を構成する各部品に対応する位置で特定の製品に対応する位置に各部品の員数が格納された並列展開情報と、各部品の員数と並列展開情報における各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、特定の部品の部品表が展開済みであると判定部により判定された場合に、部品表展開情報に含まれる各部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される各部品に対応する位置で特定の製品に対応する位置に格納された員数に加算する加算部とを含む、装置を提供する。ここで、展開部は、特定の部品を構成する各部品に対応する位置として、その員数が並列展開情報に格納されていない部品については、予め定められた規則によって決まる位置を用い、その員数が並列展開情報に格納されている部品については、員数が格納された位置を用いる、ものであってよい。また、展開部は、特定の部品の部品表を、特定の部品に対応する位置で特定の製品に対応する位置に特定の部品の員数が更に格納された並列展開情報と、特定の部品の員数と並列展開情報における特定の部品に対応する位置を特定する情報とを更に含む部品表展開情報とに展開し、加算部は、部品表展開情報に含まれる特定の部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される特定の部品に対応する位置で特定の製品に対応する位置に格納された員数に加算する、ものであってよい。この場合、展開部は、特定の部品に対応する位置として、その員数が並列展開情報に格納されていなければ、予め定められた規則によって決まる位置を用い、その員数が並列展開情報に格納されていれば、員数が格納された位置を用いる、ものであってよい。また、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置であって、複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、選択部により選択された特定の部品の部品表が展開済みであるかどうかを判定する判定部と、特定の部品の部品表が展開済みでないと判定部により判定された場合に、特定の部品の部品表を、複数の製品を構成する複数の部品をそれぞれ表す複数のノードを持ち、複数のノードの各部品を表すノードに対応する配列の特定の製品に対応する位置に各部品の員数が格納された並列展開リストと、特定の部品を構成する複数の部品をそれぞれ表す複数のノードを持ち、複数のノードの各部品を表すノードに各部品の員数と並列展開リストにおける各部品を表すノードを特定する情報とが登録された部品表展開リストとに展開する展開部と、特定の部品の部品表が展開済みであると判定部により判定された場合に、部品表展開リストが持つ各ノードに登録された各部品の員数を、並列展開リストにおけるノードであって、部品表展開リストが持つ各ノードに登録された情報で特定される各部品を表すノードに対応する配列の特定の製品に対応する位置に格納された員数に加算する加算部とを含む、装置も提供する。ここで、この装置は、複数の製品の部品表を記憶するデータベースと、複数の製品の部品表に基づいて生成された隣接リストであって、複数の製品と、複数の製品を構成する複数の部品とを表す複数のノードを持つ隣接リストを記憶するメモリとを更に備え、選択部は、隣接リストが持つ複数のノードのうち、特定の製品を表すノードが持つリストに登録された情報で特定されるノードが表す部品を、特定の部品として選択する、ものであってよい。更に、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する方法であって、複数の製品のうちの特定の製品を直接構成する特定の部品を選択するステップと、選択された特定の部品の部品表が展開済みであるかどうかを判定するステップと、特定の部品の部品表が展開済みでないと判定された場合に、特定の部品の部品表を、特定の部品を構成する各部品に対応する位置で特定の製品に対応する位置に各部品の員数が格納された並列展開情報と、各部品の員数と並列展開情報における各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開するステップと、特定の部品の部品表が展開済みであると判定された場合に、部品表展開情報に含まれる各部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される各部品に対応する位置で特定の製品に対応する位置に格納された員数に加算するステップとを含む、方法も提供する。更にまた、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置として、コンピュータを機能させるプログラムであって、コンピュータを、複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、選択部により選択された特定の部品の部品表が展開済みであるかどうかを判定する判定部と、特定の部品の部品表が展開済みでないと判定部により判定された場合に、特定の部品の部品表を、特定の部品を構成する各部品に対応する位置で特定の製品に対応する位置に各部品の員数が格納された並列展開情報と、各部品の員数と並列展開情報における各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、特定の部品の部品表が展開済みであると判定部により判定された場合に、部品表展開情報に含まれる各部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される各部品に対応する位置で特定の製品に対応する位置に格納された員数に加算する加算部として機能させる、プログラムも提供する。本発明によれば、複数の製品の部品表をその複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する処理を、製品の数が多くても高速に実行することができる。以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。[本実施の形態のベースとなる設計法]本実施の形態では、DBデータベースに格納された部品表ツリーを、メモリ上に隣接リスト構造として構築されているグラフ構造上で展開し、展開結果を、連結リストと、その個々のノードに対する員数が格納された員数配列とで表す。また、並列化対象の別の部品表ツリーも同様にこのグラフ構造上で展開し、マージ対象の部品のノードをこの連結リスト上で探索する。マージ対象の部品のノードが見つかれば、見つかったノードに対する員数配列に員数を書き込む。マージ対象のノードが見つからなければ、連結リストに新しいノードを挿入する。この操作を並列化対象の最終製品の配下にある全ての部品表ツリーについて繰り返す。本実施の形態における並列展開の高速化のベースになるのは、グラフ理論に基づく汎用的なデータ構造を採用した設計案である。DBアクセスは全て最初に行うので、I/Oを最小化できる。また、展開結果は、配列の代わりに、連結リストで表すので、データの挿入及び削除が効率よく行える。更に、メモリ上にグラフ構造の部品表ツリーを持っているので、深さ優先展開深さ優先探索に基づく展開も幅優先展開幅優先探索に基づく展開も必要に応じて何度でも繰り返し実行でき、しかも展開する際にはメモリ上のポインタを辿るだけでよいので、極めて効率がよい。図1は、本実施の形態で並列展開の対象とする部品表ツリーの例を示したものである。aは最終製品Aの部品表ツリーを示し、bは最終製品Bの部品表ツリーを示している。尚、図中、部品の後ろの記号は、部品の品番である。また、各部品表ツリーの左側の太字の数字は展開レベルを表す。ここでは、最終製品の1つ下の部品組み立て部品P1,P1’の展開レベルを0としている。更に、部品をつなぐ線に付した数字は員数を表す。実際には最終製品を構成する組み立て部品が1つだけということはあり得ないが、ここでは便宜上、簡略化した例を示している。また、図2は、図1の部品表ツリーに対する隣接リスト構造の例を示したものである。例えば、図1a,bの部品表ツリーに対応する構成データをDBから再帰SQL等で読み込み、メモリ上の隣接リスト構造に展開したときの状態である。尚、ここでは、各部品表ツリーの展開レベルが0以下の部分を展開している。また、矢印はポインタを表しており、部品表ツリーの並列展開はこのポインタを辿るだけで再帰的に高速に行えるようになっている。図3は、図1の部品表ツリーを並列展開した結果を表示する態様を示したものである。aでは、部品表ツリーの展開結果が、品番をその展開レベルに応じた量だけインデントさせた形式で表示されている。bでは、aの表示に加え、計算された員数がマトリックス内に表示されている。このマトリックスにおいて、ある最終製品の部品表ツリーに含まれる部品は、その最終製品の列における員数が0でない部品である。また、ある最終製品の部品表ツリー内のある部品の直接の親部品は、その最終製品の列をその部品から上に辿っていって、その部品よりも展開レベルが1つ小さく、員数が0でない部品のうち、最初に遭遇したものである。[並列展開のデータ構造と作成ロジック]図3a,bの何れの態様で表示する場合も、その元となるデータは同様のデータ構造で表すことができる。図4は、図1aの部品表ツリーに対応するデータ構造展開結果リストを示したものである。まず、図1aの部品表ツリーを深さ優先探索で展開し、展開結果を連結リストに保持しておく。同時に、連結リストに含まれる部品のノードに対して、マトリックスの列数をサイズとする動的配列を作っておく。そして、動的配列の1列目に、対応する部品の員数を格納し、これを員数配列とする。その後、この展開結果リストを基軸リストとして、図1bの部品表ツリーを深さ優先探索で展開し、展開結果をこの基軸リストに当てる。このとき、次のマージルールを適用する。即ち、現在展開中の部品と同じ展開レベルに同じ部品があれば、員数配列の2列目のその部品に対応する位置に員数の計算結果を書き込む。一方、現在展開中の部品と同じ展開レベルに同じ部品がなければ、その展開レベルの末尾に現在の部品を追加する。但し、このマージルールは、具体的な業務要件の一例であって、マージの方法や部品の追加位置は業務によって様々に変わり得る。しかし、この部分のロジックはデータ構造から独立しているので、後で修正することも容易である。ここで、マージの基本的な考え方は、これから展開する部品表ツリーの部品を同じ展開レベルで探索し、マッチする部品が基軸リストになければ行を挿入し、マッチする部品が基軸リストにあれば基軸リストのそのマッチした行の員数配列に今展開している部品の員数を書き込む、というものである。図5は、このロジックによるマージの結果を示したものである。即ち、図4の基軸リストに対してこのロジックにより図1bの部品表ツリーの展開結果をマージしていったときの結果を示している。このマージの後、展開結果を表す連結リストとその各ノードに対する員数配列の値とは、図3a,bの何れの形式でも出力できる。ところで、この例では、部品表ツリーは2つ、つまり展開結果の表における列は2列としたが、展開結果の表における列が何百列、何千列になる場合もある。その場合、部品表ツリーの展開自体はポインタを辿ることで高速に行えたとしても、マージのための部品の比較処理の繰り返し数が多くなり、処理に要する時間が長くなってしまう。[本実施の形態における具体的な実装方法]先に述べたように、最終製品は様々なオプションを反映しているために多数存在したとしても、その1レベル下の組み立て部品は、共通化されており、その種類は限られている。上記の例では、最終製品A、Bに全く同じ組み立て部品が含まれていれば、その組み立て部品を頂点とする部品表ツリーは全く同じなので、最終製品Aを展開した結果、つまり展開した品番及び員数をその順序通りに最終製品Bの列にコピーすればよい。即ち、展開を終えた組み立て部品の列を記録しておき、その後、別の最終製品から辿った組み立て部品に展開済みの列が含まれていれば、その列の員数を現在の最終製品の列にコピーしてくるだけでよい。第1の実装例図6は、本実施の形態における第1の実装例を示したものである。ここでは、aに示すように、極端な例として、全ての最終製品が同じ組み立て部品を構成部品として使っている場合を考える。この場合、どの最終製品の列でも展開結果は全く同じであり、同じ部品は全てマージされるので、列ごとに部品表ツリーを展開するのは無駄である。そこで、bに示すように、最初の展開結果の員数を員数配列の各列にコピーすることが考えられる。しかしながら、この方法では問題が生じる。というのは、異なる最終製品が全く同じ組み立て部品のみから構成されることはないからである。つまり、最終製品が異なるのは組み立て部品に違いがあるためであり、この違いのために、単純に展開結果の員数をコピーするだけでは済まない。展開結果の列は、その列の最終製品にぶら下がっている組み立て部品配下の部品表ツリーにおける全ての部品を含んでいる。従って、最終製品が複数の組み立て部品から構成されていれば、1つの組み立て部品だけの展開結果ではなくなってしまう。第2の実装例そこで、本実施の形態では、この第2の実装例を提案する。図7は、この第2の実装例について説明するための部品表ツリーの例を示したものである。aは最終製品Aの部品表ツリーを示し、bは最終製品Bの部品表ツリーを示し、cは最終製品Cの部品表ツリーを示している。この例では、最終製品A,Cは、共通の組み立て部品M1から構成されており、最終製品A,Bは、共通の組み立て部品M2から構成されており、最終製品B,Cは、共通の組み立て部品M3から構成されている。また、図8は、図7の部品表ツリーに対する隣接リスト構造の例を示したものである。即ち、図7の並列展開対象の部品表ツリーのデータをDBから全て読み込んでメモリ上の隣接リスト構造に展開すると、図のようになる。ディクショナリには、部品表ツリーに含まれる部品に対応する部品データが重複を排除して登録されている。また、各部品データは、その1レベル下の部品のリスト部品リストを持っている。更に、部品リストの各部品のノードは、その部品に対応する部品データへの位置情報を持っている。このような隣接リスト構造を用いると、頂点の部品データから部品リストを辿り、その部品リストの各部品のノードからその部品に対応する部品データを辿ることによって、部品表ツリーの展開が実現できる。この場合において、単純に展開結果の列における員数をコピーしたとする。図9は、このときの展開結果の表を示したものである。但し、図7のa,bの部品表ツリーについてのみ示している。まず、aに示すように、最終製品Aにおける組み立て部品M1が展開される。最終製品Bには組み立て部品M1はぶら下がっていないので、bに示すように、最終製品Bの列には員数0が格納される。次に、cに示すように、最終製品Aにおける組み立て部品M2が展開される。最終製品Bには組み立て部品M2がぶら下がっており、最終製品Aの列で展開済みなので、dに示すように、最終製品Aの列に格納された員数を最終製品Bの列にコピーする。また、最終製品Bには組み立て部品M3がぶら下がっているので、eに示すように、最終製品Bにおける組み立て部品M3が展開される。しかしながら、このように単純に員数をコピーしたのでは、結果が正しくなくなってしまう。単に員数をコピーした場合、最終製品Aの列の組み立て部品M1の員数もついてきてしまって、最終製品Bの列の員数が、実際よりも増えてしまうからである。図10は、正しい展開結果の表を示したものである。本来、最終的な展開結果はこのようにならなければならない。図9で員数が正しくならないのは、単純に展開結果の列における員数をコピーしただけでは、複数の組み立て部品の展開結果の違いが判別できないからである。そこで、この第2の実装例では、組み立て部品ごとの部品表ツリーの展開結果をツリー固有リストとして個別に保持し、そのツリー固有リストのノードに、展開結果リストの対応する行をポイントさせておく。また、組み立て部品以下の部品表ツリーごとの展開結果が必要なので、コピー元となる情報も、組み立て部品以下の部品表ツリーごとに持っておく。図11は、この第2の実装例で幅優先展開を行う場合の並列展開用データ構造を示したものである。尚、幅優先展開では、最終製品Aの部品表ツリーは、M1,M2,P1,P2,P1,P3の順に展開され、最終製品Bの部品表ツリーは、M2,M3,P1,P3,P2,P4の順に展開され、最終製品Cの部品表ツリーは、M1,M3,P1,P2,P2,P4の順に展開される。ところで、この並列展開用データ構造において、各組み立て部品には、その組み立て部品の配下の部品表ツリーのみを展開して員数を計算した結果を保持するツリー固有リストがぶら下がっている。ツリー固有リストにおける内の数値が、計算された員数を表す。尚、このツリー固有リストは、最終的に複数の部品表ツリーがマージされた展開結果リストとは異なる。組み立て部品を頂点とする部品表ツリーが最初に展開されるときに1回だけ作成されるものである。そして、そのタイミングで、ツリー固有リストの各部品が展開結果リストのどの部品に当たるか分かるので、後で検索しないで済むようにポインタでその部品の場所を記憶しておく。このため、ツリー固有リストにおいては展開の順序を気にする必要がない。その後、その組み立て部品を頂点とする部品表ツリーが再び現れると、その組み立て部品にぶら下がっているツリー固有リストから展開結果と各部品の展開結果リストでの位置とを取り出し、その位置に展開結果をマージコピーする。例えば、最終製品A,B,Cの順に部品表ツリーが展開されるとすると、組み立て部品M2のツリー固有リストは、最終製品Aの部品表ツリーを展開する際に初めて作成される。その後、最終製品Bの部品表ツリーを展開する際に組み立て部品M2が現れると、組み立て部品M2のツリー固有リストは既に存在する。そこで、そのツリー固有リストの部品から展開結果リストの対応する部品をポインタで辿り、その展開結果リストの対応する部品に対する員数配列の最終製品Bの列に、ツリー固有リストが保持する員数を加算する。ここで、この場合の部品表ツリーの展開動作の概要を説明する。まず、最終製品Aの1レベル下の組み立て部品M1を処理する場合を考える。この場合は、まず、組み立て部品M1を頂点とするツリー固有リストに部品P1,P2の員数が記録される。また、展開結果リストに組み立て部品M1、部品P1,P2のノードが登録され、それぞれのノードに対する員数配列の最終製品Aの列の員数にそれぞれの員数が加算される。その後、組み立て部品M1を頂点とするツリー固有リストに、展開結果リストにおける組み立て部品M1、部品P1,P2の登録位置が記録される。次に、最終製品Aの1レベル下の組み立て部品M2を処理する場合を考える。この場合は、まず、組み立て部品M2を頂点とするツリー固有リストに部品P1,P3の員数が記録される。また、展開結果リストに部品P1のノードが見つかり、組み立て部品M2、部品P3のノードが登録され、それぞれのノードに対する員数配列の最終製品Aの列にそれぞれの員数が加算される。その後、組み立て部品M2を頂点とするツリー固有リストに、展開結果リストにおける組み立て部品M2、部品P1,P3の登録位置が記録される。次に、最終製品Bの1レベル下の組み立て部品M2を処理する場合を考える。この場合は、組み立て部品M2を頂点とするツリー固有リストに記録された組み立て部品M2、部品P1,P3の員数のコピー先が、このツリー固有リストに記録された登録位置によって決定され、展開結果リストの組み立て部品M2,部品P1,P3のノードに対する員数配列の最終製品Bの列にそれぞれの員数が加算される。次に、最終製品Bの1レベル下の組み立て部品M3を処理する場合を考える。この場合は、まず、組み立て部品M3を頂点とするツリー固有リストに部品P2,P4の員数が記録される。また、展開結果リストに部品P2のノードが見つかり、組み立て部品M3、部品P4のノードが登録され、それぞれのノードに対する員数配列の最終製品Bの列の員数にそれぞれの員数が加算される。その後、組み立て部品M3を頂点とするツリー固有リストに、展開結果リストにおける組み立て部品M3、部品P2,P4の登録位置が記録される。次に、最終製品Cの1レベル下の組み立て部品M1を処理する場合を考える。この場合は、組み立て部品M1を頂点とするツリー固有リストに記録された組み立て部品M1、部品P1,P2の員数のコピー先が、このツリー固有リストに記録された登録位置によって決定され、展開結果リストの組み立て部品M1,部品P1,P2のノードに対する員数配列の最終製品Cの列にそれぞれの員数が加算される。最後に、最終製品Cの1レベル下の組み立て部品M3を処理する場合を考える。この場合は、組み立て部品M3を頂点とするツリー固有リストに記録された組み立て部品M3、部品P2,P4の員数のコピー先が、このツリー固有リストに記録された登録位置によって決定され、展開結果リストの組み立て部品M3,部品P2,P4のノードに対する員数配列の最終製品Cの列にそれぞれの員数が加算される。また、図12は、この第2の実装例で深さ優先展開を行う場合の並列展開用データ構造を示したものである。尚、深さ優先展開では、最終製品Aの部品表ツリーは、M1,P1,P2,M2,P1,P3の順に展開され、最終製品Bの部品表ツリーは、M2,P1,P3,M3,P2,P4の順に展開され、最終製品Cの部品表ツリーは、M1,P1,P2,M3,P2,P4の順に展開される。深さ優先展開を行う場合のデータ構造及び展開動作は、展開結果リストにおける部品の順序が深さ優先展開に応じた順序になっている以外は、幅優先展開を行う場合のデータ構造と同様であるので、ここでの説明は省略する。このように、第2の実装例では、ツリー固有リストの各部品に展開結果リストにおけるその部品の位置を記憶しておくことで、マージのための無駄な比較処理を省くことができ、並列展開のパフォーマンスが飛躍的に向上する。[本実施の形態における実装方法を実現する並列展開装置]次に、本実施の形態で提案する第2の実装例を実現する並列展開装置について説明する。並列展開装置の機能構成図13は、このような並列展開装置の機能構成例を示したものである。図示するように、並列展開装置は、部品表ツリー記憶部10と、部品表ツリー展開部20と、隣接リスト記憶部30と、並列展開部40と、展開結果リスト記憶部50と、展開結果出力部60とを備えている。部品表ツリー記憶部10は、複数の製品の部品表ツリーを記憶するDBである。この部品表ツリー記憶部10は、例えば、磁気ディスク装置90g図15参照によって実現される。部品表ツリー展開部20は、部品表ツリー記憶部10に記憶された複数の製品の部品表ツリーを隣接リスト構造に展開する。この部品表ツリー展開部20は、例えば、CPU90a図15参照が磁気ディスク装置90g図15参照に記憶されたプログラムをメインメモリ90c図15参照に読み込んで実行することによって実現される。隣接リスト記憶部30は、部品表ツリー展開部20が部品表ツリーを展開することによって生成した隣接リスト構造のデータを記憶する。この隣接リスト記憶部30は、例えば、メインメモリ90c図15参照によって実現される。本実施の形態では、隣接リストを記憶するメモリの一例として、隣接リスト記憶部30を設けている。並列展開部40は、隣接リスト記憶部30に記憶された隣接リスト構造のデータのポインタを辿ることにより、複数の製品の部品表ツリーを並列に展開し、展開結果リストを生成する。この並列展開部40は、例えば、CPU90a図15参照が磁気ディスク装置90g図15参照に記憶されたプログラムをメインメモリ90c図15参照に読み込んで実行することによって実現される。展開結果リスト記憶部50は、並列展開部40により生成された展開結果リストを記憶する。ここで、展開結果リストは、既に述べた通り、並列展開対象の複数の製品を構成する各部品を表すノードを連結した連結リストと、ノードごとにそのノードが表す部品の各製品における員数を格納する員数配列とを含んでいる。この隣接リスト記憶部30は、例えば、メインメモリ90c図15参照によって実現される。本実施の形態では、並列展開情報、並列展開リストの一例として、展開結果リストを用いている。展開結果出力部60は、展開結果リスト記憶部50に記憶された展開結果リストに保持された情報を例えば表示機構90d図15参照に出力する。この展開結果出力部60は、例えば、CPU90a図15参照が磁気ディスク装置90g図15参照に記憶されたプログラムをメインメモリ90c図15参照に読み込んで実行することによって実現される。ここで、並列展開部40について更に詳しく説明する。図示するように、並列展開部40は、最終製品抽出部41と、組み立て部品抽出部42と、展開判定部43と、隣接リスト展開部44と、ツリー固有リスト記憶部45と、員数加算部46とを備えている。最終製品抽出部41は、隣接リスト記憶部30に記憶された隣接リスト構造のデータから、最終製品を抽出する。本実施の形態では、製品の一例として、最終製品を用いている。組み立て部品抽出部42は、隣接リスト記憶部30に記憶された隣接リスト構造のデータから、最終製品抽出部41により抽出された最終製品を直接構成する組み立て部品を抽出する。具体的には、隣接リスト構造のデータにおいて最終製品のデータからポインタを辿ることにより、組み立て部品を抽出する。本実施の形態では、特定の製品を直接構成する特定の部品の一例として、組み立て部品を用いており、特定の部品を選択する選択部の一例として、組み立て部品抽出部42を設けている。展開判定部43は、組み立て部品抽出部42により抽出された組み立て部品を頂点とする部品表ツリーが展開済みであるかどうかを判定する。本実施の形態では、特定の部品の部品表が展開済みであるかどうかを判定する判定部の一例として、展開判定部43を設けている。隣接リスト展開部44は、組み立て部品抽出部42により抽出された組み立て部品を頂点とする部品表ツリーが展開済みでないと展開判定部43で判定された場合に、隣接リスト記憶部30に記憶された隣接リスト構造のデータを参照して、その組み立て部品を頂点とする部品表ツリーを展開する。具体的には、隣接リスト構造のデータにおいてその組み立て部品のデータからポインタを辿ることにより、部品表ツリーを展開する。そして、部品表ツリーを展開することで、ツリー固有リスト及び展開結果リストを生成する。本実施の形態では、特定の部品の部品表が展開済みでないと判定された場合にその特定の部品の部品表を展開する展開部の一例として、隣接リスト展開部44を設けている。ツリー固有リスト記憶部45は、隣接リスト展開部44が部品表ツリーを展開することで生成されたツリー固有リストを記憶する。ここで、ツリー固有リストは、既に述べた通り、組み立て部品を表すノードにその組み立て部品を頂点とする部品表ツリー内の各部品を表すノードが連結された連結リストであり、各ノードにはそのノードが表す部品の員数及び展開結果リストにおけるそのノードが表す部品の行を示す情報が登録されている。本実施の形態では、部品表展開情報、部品表展開リストの一例として、ツリー固有リストを用いている。員数加算部46は、組み立て部品抽出部42により抽出された組み立て部品を頂点とする部品表ツリーが展開済みであると展開判定部43で判定された場合に、ツリー固有リスト記憶部45に記憶されたその組み立て部品にぶら下がったツリー固有リストの各ノードに登録された員数を、そのノードに登録された情報で特定される展開結果リストの行の員数配列における対象の最終製品の列に格納された員数に加算する。本実施の形態では、特定の部品の部品表が展開済みであると判定された場合に部品表展開情報に含まれる各部品の員数を並列展開情報における員数に加算する加算部の一例として、員数加算部46を設けている。並列展開装置の動作この並列展開装置では、まず、部品表ツリー展開部20が、並列展開すべき部品表データを全て部品表ツリー記憶部10から読み込んで隣接リスト構造に展開し、この隣接リスト構造のデータを隣接リスト記憶部30に記憶しておく。次いで、展開すべき最終製品の展開順序を決めて、その1レベル下の組み立て部品を順次取り出せるようにしておく。これは、例えば、隣接リスト構造のデータにおける最終製品のデータに展開順序を示すデータを持たせることによって実現可能である。このような処理が行われていることを前提として、並列展開部40は動作を開始する。図14は、並列展開部40の動作例を示したフローチャートである。並列展開部40では、まず、最終製品抽出部41が、展開すべき最終製品がまだあるかどうかを判定するステップ401。そして、展開すべき最終製品がまだあると判定されれば、隣接リスト記憶部30に記憶された隣接リスト構造のデータから最終製品を取り出すステップ402。最終製品抽出部41により最終製品が取り出されると、次に、組み立て部品抽出部42が、最終製品の1レベル下の組み立て部品がまだあるかどうかを判定するステップ403。そして、組み立て部品がまだあると判定されれば、隣接リスト記憶部30に記憶された隣接リスト構造のデータから組み立て部品を取り出すステップ404。組み立て部品抽出部42により組み立て部品が取り出されると、展開判定部43は、取り出された組み立て部品を頂点とする部品表ツリーが展開済みであるかどうかを判定するステップ405。これは、例えば、隣接リスト構造のデータにおける組み立て部品のデータにその組み立て部品を頂点とする部品表ツリーが展開済みであるかどうかを示すフラグを持たせることによって実現可能である。その結果、部品表ツリーが展開済みでないと判定されれば、隣接リスト展開部44が、隣接リスト記憶部30に記憶された隣接リスト構造のデータを参照することにより、ステップ404で取り出された組み立て部品を頂点とする部品表ツリーを展開する。即ち、隣接リスト展開部44は、まず、その部品表ツリー内に展開すべき部品がまだあるかどうかを判定するステップ406。そして、その部品表ツリー内に展開すべき部品がまだあると判定されれば、隣接リスト記憶部30に記憶された隣接リスト構造のデータから部品を取り出すステップ407。尚、図7~12の例では、組み立て部品もツリー固有リスト及び展開結果リストに登録しているので、ここで組み立て部品も取り出すことになるが、組み立て部品は取り出さずに、組み立て部品を構成する部品のみを取り出すようにしてもよい。また、このときの部品を取り出す順序としては、図11に示した幅優先探索に基づく順序であってもよいし、図12に示した深さ優先探索に基づく順序であってもよい。次に、隣接リスト展開部44は、ステップ404で取り出された組み立て部品を頂点とするツリー固有リストに、ステップ407で取り出した部品を登録するステップ408。具体的には、ツリー固有リストにその部品を表すノードを設定し、そのノードに部品の員数を記録する。そして、このツリー固有リストは、ツリー固有リスト記憶部45に記憶される。また、隣接リスト展開部44は、展開結果リスト記憶部50に記憶された展開結果リストにおいて、ステップ407で取り出した部品をマージ又は挿入できる位置を探索するステップ409。具体的には、ステップ407で取り出した部品が展開結果リストに登録されていれば、その登録された位置を、部品をマージできる位置とし、ステップ407で取り出した部品が展開結果リストに登録されていなければ、予め定めた規則に従って決まる位置を、部品を挿入できる位置とする。そして、この探索の結果見つかった展開結果リストにおける位置にその部品を登録するステップ410。その後、隣接リスト展開部44は、ツリー固有リスト記憶部45に記憶されたツリー固有リストにおけるその部品を表すノードに、展開結果リスト記憶部50に記憶された展開結果リストにおけるその部品の登録位置を記録しステップ411、ステップ406へ戻る。また、ステップ406で部品表ツリー内に展開すべき部品がないと判定されれば、隣接リスト展開部44は、ステップ404で取り出された組み立て部品を頂点とする部品表ツリーを展開済みとするステップ412。これは、例えば、隣接リスト構造のデータにおける組み立て部品のデータが持つフラグに、その組み立て部品を頂点とする部品表ツリーが展開済みであることを示す情報を設定することによって行う。そして、処理はステップ403へ戻り、他の組み立て部品についての処理が引き続き行われる。一方、ステップ405で部品表ツリーが展開済みであると判定されれば、員数加算部46が、ツリー固有リスト記憶部45に記憶されたツリー固有リストを参照し、ステップ404で取り出された組み立て部品を頂点とするツリー固有リストに記録された員数を、展開結果リスト記憶部50に記憶された展開結果リストに格納された員数に加算する。即ち、員数加算部46は、まず、そのツリー固有リスト内に処理すべき部品がまだあるかどうかを判定するステップ413。そして、そのツリー固有リスト内に処理すべき部品がまだあると判定されれば、そのツリー固有リストから部品を取り出すステップ414。尚、図7~12の例では、組み立て部品の員数も展開結果リストに格納しているので、ここで組み立て部品も取り出すことになるが、組み立て部品は取り出さずに、組み立て部品を構成する部品のみを取り出すようにしてもよい。次に、員数加算部46は、この取り出した部品から、展開結果リストのその部品が登録された位置を示す情報を取り出すステップ415。その後、員数加算部46は、この取り出した情報によって特定される展開結果リストの位置に関連付けられた員数配列において、ステップ402で取り出された最終製品に対応する列に格納された員数に、この取り出した部品に記録された員数を加算しステップ416、ステップ413へ戻る。また、ステップ413でツリー固有リスト内に処理すべき部品がないと判定されれば、処理はステップ403へ戻り、他の組み立て部品についての処理が引き続き行われる。尚、ステップ403で最終製品の1レベル下の組み立て部品がないと判定されれば、処理はステップ401へ戻り、他の最終製品についての処理が引き続き行われる。また、ステップ401で展開すべき最終製品がないと判定されれば、処理は終了する。このようにして、並列展開部40により生成された展開結果リストが展開結果リスト記憶部50に記憶されると、展開結果出力部60が、展開結果リストの内容を例えば表示機構90d図15参照に出力する。[まとめ]通常、部品表展開は、部品表ツリーの頂点ごとに行なうため、従来は、最終製品を頂点とし、その最終製品ごとに行っていた。そのため、部品表ツリーの内部に全く同じ部分ツリーがある場合は、同じ展開が繰り返されていた。ここに並列展開のための同じ部品のマージ処理が加わると、全く同じ展開結果になるにも関わらず、同じマージのための比較処理が繰り返され、この無駄な繰り返し処理が実行性能を落としていた。普通は、最終製品のバリエーションが多くても、その1レベル下の組み立て部品は、部品の共通化が図られているため、その種類はそれほど多くない。そこで、最終製品を頂点として最終製品ごとに部品表ツリーを展開するのではなく、組み立て部品から部品表ツリーを展開し、その展開結果を保持しておく。そして、複数の最終製品の間で同じ組み立て部品を構成部品として利用している場合には、既に展開済みで保持されてある展開結果をコピーするようにする。こうすることによって、列が多い場合に何時間もかかっていた展開処理が分単位で完了することとなる。[本実施の形態を適用するのに好適なコンピュータのハードウェア構成]図15は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるCPUCentralProcessingUnit90aと、M/Bマザーボードチップセット90bを介してCPU90aに接続されたメインメモリ90cと、同じくM/Bチップセット90bを介してCPU90aに接続された表示機構90dとを備える。また、M/Bチップセット90bには、ブリッジ回路90eを介して、ネットワークインターフェイス90fと、磁気ディスク装置HDD90gと、音声機構90hと、キーボード/マウス90iと、フレキシブルディスクドライブ90jとが接続されている。尚、図15において、各構成要素は、バスを介して接続される。例えば、CPU90aとM/Bチップセット90bの間や、M/Bチップセット90bとメインメモリ90cの間は、CPUバスを介して接続される。また、M/Bチップセット90bと表示機構90dとの間は、AGPAcceleratedGraphicsPortを介して接続されてもよいが、表示機構90dがPCIExpress対応のビデオカードを含む場合、M/Bチップセット90bとこのビデオカードの間は、PCIExpressPCIeバスを介して接続される。また、ブリッジ回路90eと接続する場合、ネットワークインターフェイス90fについては、例えば、PCIExpressを用いることができる。また、磁気ディスク装置90gについては、例えば、シリアルATAATAttachment、パラレル転送のATA、PCIPeripheralComponentsInterconnectを用いることができる。更に、キーボード/マウス90i、及び、フレキシブルディスクドライブ90jについては、USBUniversalSerialBusを用いることができる。ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム装置又は機器、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリRAM、リードオンリーメモリROM、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク-リードオンリーメモリCD-ROM、コンパクトディスク-リード/ライトCD-R/W及びDVDが含まれる。以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。"