(57)【特許請求の範囲】
【請求項１】
複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する装置であって、
前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、
前記選択部により選択された前記特定の部品の部品表が展開済みであるかどうかを判定する判定部と、
前記特定の部品の部品表が展開済みでないと前記判定部により判定された場合に、当該特定の部品の部品表を、当該特定の部品を構成する各部品に対応する位置で前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開情報と、当該各部品の員数と当該並列展開情報における当該各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、
前記特定の部品の部品表が展開済みであると前記判定部により判定された場合に、前記部品表展開情報に含まれる各部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該各部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算する加算部と
を含む、装置。
【請求項２】
前記展開部は、前記特定の部品を構成する各部品に対応する位置として、その員数が前記並列展開情報に格納されていない部品については、予め定められた規則によって決まる位置を用い、その員数が前記並列展開情報に格納されている部品については、当該員数が格納された位置を用いる、請求項１の装置。
【請求項３】
前記展開部は、前記特定の部品の部品表を、当該特定の部品に対応する位置で前記特定の製品に対応する位置に当該特定の部品の員数が更に格納された前記並列展開情報と、当該特定の部品の員数と当該並列展開情報における当該特定の部品に対応する位置を特定する情報とを更に含む前記部品表展開情報とに展開し、
前記加算部は、前記部品表展開情報に含まれる前記特定の部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該特定の部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算する、請求項１又は請求項２の装置。
【請求項４】
前記展開部は、前記特定の部品に対応する位置として、その員数が前記並列展開情報に格納されていなければ、予め定められた規則によって決まる位置を用い、その員数が前記並列展開情報に格納されていれば、当該員数が格納された位置を用いる、請求項３の装置。
【請求項５】
複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する装置であって、
前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、
前記選択部により選択された前記特定の部品の部品表が展開済みであるかどうかを判定する判定部と、
前記特定の部品の部品表が展開済みでないと前記判定部により判定された場合に、当該特定の部品の部品表を、当該複数の製品を構成する複数の部品をそれぞれ表す複数のノードを持ち、当該複数のノードの各部品を表すノードに対応する配列の前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開リストと、当該特定の部品を構成する複数の部品をそれぞれ表す複数のノードを持ち、当該複数のノードの各部品を表すノードに当該各部品の員数と当該並列展開リストにおける当該各部品を表すノードを特定する情報とが登録された部品表展開リストとに展開する展開部と、
前記特定の部品の部品表が展開済みであると前記判定部により判定された場合に、前記部品表展開リストが持つ各ノードに登録された各部品の員数を、前記並列展開リストにおけるノードであって、前記部品表展開リストが持つ当該各ノードに登録された情報で特定される当該各部品を表すノードに対応する配列の前記特定の製品に対応する位置に格納された員数に加算する加算部と
を含む、装置。
【請求項６】
前記複数の製品の部品表を記憶するデータベースと、
前記複数の製品の部品表に基づいて生成された隣接リストであって、当該複数の製品と、当該複数の製品を構成する複数の部品とを表す複数のノードを持つ隣接リストを記憶するメモリと
を更に備え、
前記選択部は、前記隣接リストが持つ前記複数のノードのうち、前記特定の製品を表すノードが持つリストに登録された情報で特定されるノードが表す部品を、前記特定の部品として選択する、請求項５の装置。
【請求項７】
コンピュータが、複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する方法であって、
前記コンピュータの選択部が、前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択するステップと、
前記コンピュータの判定部が、選択された前記特定の部品の部品表が展開済みであるかどうかを判定するステップと、
前記コンピュータの展開部が、前記特定の部品の部品表が展開済みでないと判定された場合に、当該特定の部品の部品表を、当該特定の部品を構成する各部品に対応する位置で前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開情報と、当該各部品の員数と当該並列展開情報における当該各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開するステップと、
前記コンピュータの加算部が、前記特定の部品の部品表が展開済みであると判定された場合に、前記部品表展開情報に含まれる各部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該各部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算するステップと
を含む、方法。
【請求項８】
複数の製品の部品表を、当該複数の製品の各々を構成する各部品の員数が当該各部品に対応する位置に配置されるように並列に展開する装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、
前記選択部により選択された前記特定の部品の部品表が展開済みであるかどうかを判定する判定部と、
前記特定の部品の部品表が展開済みでないと前記判定部により判定された場合に、当該特定の部品の部品表を、当該特定の部品を構成する各部品に対応する位置で前記特定の製品に対応する位置に当該各部品の員数が格納された並列展開情報と、当該各部品の員数と当該並列展開情報における当該各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、
前記特定の部品の部品表が展開済みであると前記判定部により判定された場合に、前記部品表展開情報に含まれる各部品の員数を、前記並列展開情報における位置であって、前記部品表展開情報に含まれる情報で特定される当該各部品に対応する位置で前記特定の製品に対応する位置に格納された員数に加算する加算部と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、部品表を展開する装置及び方法に関する。特に、本発明は、複数の製品の部品表を、その複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置及び方法に関する。
【背景技術】
【０００２】
オプション装備やバリエーションが豊富な自動車のような組み立て加工の工業製品は、基本的な構造は殆ど同じだが、部分的な仕様の差異によって部分的に異なるだけの類似製品を多く含んでいる。設計及び開発の効率の向上のため、部品の共通化を推し進めるには、業務上このような類似製品の部品構成を比較して、どの部分が同じでどの部分が異なるかをできるだけ効率よく把握できるようにする必要がある。
部品表展開では、部品表ツリーの頂点である最終製品から正展開した結果をリストで表現したものがよく利用されるが、個々の部品表ツリーを正展開した結果を単に複数横に並べただけでは、複数の部品表ツリーの同一部分と相違部分を読み取ることは難しく、比較検討に適していない。そこで、部品構成が同じ部分は一箇所にマージし、部品構成が異なる部分はその部分の違いを表した並列化された表に展開する第１の並列展開方法が用いられる。このときのマージロジックは業務によって異なるが、全体の展開結果は、通常、各行を展開結果の部品に対応させ、各列を最終製品又はその１レベル下の組み立て部品に対応させた態様で表示される。
【０００３】
但し、この部品表を並列に展開するロジックを全てＳＱＬ（Structured Query Language）で実装すると、処理に要する時間が長くなり、同じデータに繰り返しアクセスがなされるため、処理の無駄も多い。そこで、以下の第２の並列展開方法を用いることも考えられる。即ち、まず、ＤＢにある部品及び部品構成に関するデータから必要なものだけを読み込み、メモリ上に、隣接リスト構造を基本とした部品表ツリーのグラフデータ構造を、並列化する全ての部品表ツリーについて構築する。次いで、このデータ構造を利用して部品表ツリーを展開し、１つ目の部品表ツリーを展開したときの展開結果リストを基軸リストとする。そして、２つ目以降の部品表ツリーを展開したときの展開結果における部品と同じ部品を、１つ目の部品表ツリーそのものではなく、それを展開した基軸リスト中に探索し、その部品の情報も基軸リストに保持する。基軸リストには並列化のための同じ部品及び異なる部品の情報が全て登録されているので、ここから必要な態様で結果を出力することができる。
【０００４】
尚、公報記載の技術としては、共用部品及び非共用部品に着目した技術として、例えば特許文献１の技術がある。
特許文献１の技術では、製品群を構成する各製品の部品を機能と属性に分析し、共用部品と非共用部品に分類し、非共用部品の機能を共用機能と非共用機能に分類し、属性を満足する材料と工法から、部材費を最小にする構造を創出する改善指針を生成する。
【０００５】
また、部品表の管理に関する技術として、例えば特許文献２〜４の技術がある。
特許文献２の技術では、製品の構成情報を格納した記憶部の構成情報表から、構成情報取得部が製品モデルの構成情報を取得し、取得した前記類似した複数の製品モデルの構成情報を、構成情報組立部で１つの複数モデル部品表にまとめ、さらに部品情報編集部で編集し、部品情報編集部で編集された前記複数モデル部品表は、構成情報分解部に渡されると、数量の欄を基準に各モデルごとに分解され、親品名、品名、数量の列を持つレコードにそれぞれ分解され、部品の構成を構成情報表に格納する形式に変換され、複数モデル間で重複するレコードが省かれて構成情報表にデータが登録される。
【０００６】
特許文献３の技術では、部品情報システムは、部品表データベースと、ワークフロー管理機能と、スケジュール管理機能と、部品表展開機能を有している。部品表データベースには、製品開発の各工程（デザイン工程、コンセプト企画工程、エンジニアリング工程、生産工程）で作成される部品表データが相互に関連付けられて一体として管理されており、さらにこれらに関連付けられてＣＡＤデータやドキュメントデータや部品カタログデータが保持されている。ワークフロー管理機能は、上記複数の各工程が同時並行的に実行されるように、各工程の作業支援のための開発機能部を制御する。ある工程での変更は部品表データベースを介して他工程に速やかに伝播される。
【０００７】
特許文献４の技術では、部品表作成部とレイアウト表作成部とレイアウト部とを具備する電子パーツリストシステムを用いる。部品表作成部は、設計参照情報を参考にした設計者の入力に基づき、自動車の設計に用いる部品に関する部品情報を含む部品表としての電子パーツリストを生成する。レイアウト表作成部は、部品情報に基づいて、部品のレイアウトに必要なレイアウト必要情報を含む表としてのレイアウトリストを生成する。レイアウト部は、設計参照情報と、部品情報と、レイアウト必要情報とに基づき、部品の配置状態としてのレイアウト情報を生成する。そして、電子パーツリストとレイアウトリストとレイアウト情報とは、相互に関連付けられる。
【０００８】
更に、技術部品表や図面、部品特性表で用いられる関連性のある情報の適性を調べる技術として、例えば特許文献５の技術がある。
特許文献５の技術では、部番ルールデータベースと品目チェック部とを含む総合検査システムを用いる。部番ルールデータベースは、部番のルールを格納する。品目チェック部は、ルールに従う電子パーツリストの第１部品の第１部番と、部品特性表の第２部品の第２部番とに基づいて、第２部番と適合する第１部番としての特定第１部番を検出し、特定第１部番を有する特定第１部品の、電子パーツリストにおける階層を検出し、その階層と予め設定された第２部品の階層との一致を確認する。ここで電子パーツリストは、第１部番と第１部品に関する第１部品情報とを関連付け、第１部品の各々を階層構造で管理する。部品特性表は、第２部品の仕様の差を決める複数の装備と装備の組み合わせと第２部番とを関連付ける。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−２６５７０６号公報
【特許文献２】特開平１１−２０３３２７号公報
【特許文献３】特開２００２−７３７０８号公報
【特許文献４】特開２００３−２８１１９９号公報
【特許文献５】特開２００３−２８１２０３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ところで、上述した第２の並列展開方法では、列、つまり最終製品が少なければ、行、つまり部品表ツリーに含まれる部品が多くても、高速に処理可能である。しかしながら、列が多い場合には、行が少なかったとしても実行性能が出ないことがある。これは、各列に対応する部品表ツリー中の部品をマージする際の比較処理等に時間がかかってしまうためである。並列展開の結果の表の列が最終製品を表す場合、列の数は、少なくとも数百、多いときには数千になることがあるが、こうなると、ＤＢアクセスの時間を短縮できたとしても、展開自体に何時間もかかることになる。
【００１１】
尚、公報記載の技術は、何れも、複数の製品の部品表をその複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する処理におけるこのような課題を解決する手法を提案するものではない。
【００１２】
本発明の目的は、複数の製品の部品表をその複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する処理を、製品の数が多くても高速に実行することにある。
【課題を解決するための手段】
【００１３】
かかる目的のもと、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置であって、複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、選択部により選択された特定の部品の部品表が展開済みであるかどうかを判定する判定部と、特定の部品の部品表が展開済みでないと判定部により判定された場合に、特定の部品の部品表を、特定の部品を構成する各部品に対応する位置で特定の製品に対応する位置に各部品の員数が格納された並列展開情報と、各部品の員数と並列展開情報における各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、特定の部品の部品表が展開済みであると判定部により判定された場合に、部品表展開情報に含まれる各部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される各部品に対応する位置で特定の製品に対応する位置に格納された員数に加算する加算部とを含む、装置を提供する。
【００１４】
ここで、展開部は、特定の部品を構成する各部品に対応する位置として、その員数が並列展開情報に格納されていない部品については、予め定められた規則によって決まる位置を用い、その員数が並列展開情報に格納されている部品については、員数が格納された位置を用いる、ものであってよい。
また、展開部は、特定の部品の部品表を、特定の部品に対応する位置で特定の製品に対応する位置に特定の部品の員数が更に格納された並列展開情報と、特定の部品の員数と並列展開情報における特定の部品に対応する位置を特定する情報とを更に含む部品表展開情報とに展開し、加算部は、部品表展開情報に含まれる特定の部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される特定の部品に対応する位置で特定の製品に対応する位置に格納された員数に加算する、ものであってよい。
この場合、展開部は、特定の部品に対応する位置として、その員数が並列展開情報に格納されていなければ、予め定められた規則によって決まる位置を用い、その員数が並列展開情報に格納されていれば、員数が格納された位置を用いる、ものであってよい。
【００１５】
また、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置であって、複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、選択部により選択された特定の部品の部品表が展開済みであるかどうかを判定する判定部と、特定の部品の部品表が展開済みでないと判定部により判定された場合に、特定の部品の部品表を、複数の製品を構成する複数の部品をそれぞれ表す複数のノードを持ち、複数のノードの各部品を表すノードに対応する配列の特定の製品に対応する位置に各部品の員数が格納された並列展開リストと、特定の部品を構成する複数の部品をそれぞれ表す複数のノードを持ち、複数のノードの各部品を表すノードに各部品の員数と並列展開リストにおける各部品を表すノードを特定する情報とが登録された部品表展開リストとに展開する展開部と、特定の部品の部品表が展開済みであると判定部により判定された場合に、部品表展開リストが持つ各ノードに登録された各部品の員数を、並列展開リストにおけるノードであって、部品表展開リストが持つ各ノードに登録された情報で特定される各部品を表すノードに対応する配列の特定の製品に対応する位置に格納された員数に加算する加算部とを含む、装置も提供する。
【００１６】
ここで、この装置は、複数の製品の部品表を記憶するデータベースと、複数の製品の部品表に基づいて生成された隣接リストであって、複数の製品と、複数の製品を構成する複数の部品とを表す複数のノードを持つ隣接リストを記憶するメモリとを更に備え、選択部は、隣接リストが持つ複数のノードのうち、特定の製品を表すノードが持つリストに登録された情報で特定されるノードが表す部品を、特定の部品として選択する、ものであってよい。
【００１７】
更に、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する方法であって、複数の製品のうちの特定の製品を直接構成する特定の部品を選択するステップと、選択された特定の部品の部品表が展開済みであるかどうかを判定するステップと、特定の部品の部品表が展開済みでないと判定された場合に、特定の部品の部品表を、特定の部品を構成する各部品に対応する位置で特定の製品に対応する位置に各部品の員数が格納された並列展開情報と、各部品の員数と並列展開情報における各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開するステップと、特定の部品の部品表が展開済みであると判定された場合に、部品表展開情報に含まれる各部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される各部品に対応する位置で特定の製品に対応する位置に格納された員数に加算するステップとを含む、方法も提供する。
【００１８】
更にまた、本発明は、複数の製品の部品表を、複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する装置として、コンピュータを機能させるプログラムであって、コンピュータを、複数の製品のうちの特定の製品を直接構成する特定の部品を選択する選択部と、選択部により選択された特定の部品の部品表が展開済みであるかどうかを判定する判定部と、特定の部品の部品表が展開済みでないと判定部により判定された場合に、特定の部品の部品表を、特定の部品を構成する各部品に対応する位置で特定の製品に対応する位置に各部品の員数が格納された並列展開情報と、各部品の員数と並列展開情報における各部品に対応する位置を特定する情報とを含む部品表展開情報とに展開する展開部と、特定の部品の部品表が展開済みであると判定部により判定された場合に、部品表展開情報に含まれる各部品の員数を、並列展開情報における位置であって、部品表展開情報に含まれる情報で特定される各部品に対応する位置で特定の製品に対応する位置に格納された員数に加算する加算部として機能させる、プログラムも提供する。
【発明の効果】
【００１９】
本発明によれば、複数の製品の部品表をその複数の製品の各々を構成する各部品の員数が各部品に対応する位置に配置されるように並列に展開する処理を、製品の数が多くても高速に実行することができる。
【図面の簡単な説明】
【００２０】
【図１】並列展開の対象となる部品表ツリーの例を示した図である。
【図２】部品表ツリーから生成された隣接リスト構造の例を示した図である。
【図３】部品表ツリーを並列展開した結果を表示する態様を示した図である。
【図４】部品表ツリーから生成された展開結果リストの例を示した図である。
【図５】部品表ツリーから生成された展開結果リストの例を示した図である。
【図６】第１の実装例について説明するための図である。
【図７】第２の実装例について説明するために用いる部品表ツリーを示した図である。
【図８】第２の実装例について説明するために用いる部品表ツリーから生成された隣接リスト構造の例を示した図である。
【図９】第２の実装例で展開済みの列内の全ての員数をコピーしたときの展開結果を示した図である。
【図１０】第２の実装例で展開済みの列内の必要な員数のみをコピーしたときの展開結果を示した図である。
【図１１】第２の実装例で幅優先展開を行う場合の並列展開用データ構造の例を示した図である。
【図１２】第２の実装例で深さ優先展開を行う場合の並列展開用データ構造の例を示した図である。
【図１３】本発明の実施の形態における並列展開装置の機能構成例を示したブロック図である。
【図１４】本発明の実施の形態における並列展開部の動作例を示したフローチャートである。
【図１５】本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
【発明を実施するための形態】
【００２１】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
［本実施の形態のベースとなる設計法］
本実施の形態では、ＤＢ（データベース）に格納された部品表ツリーを、メモリ上に隣接リスト構造として構築されているグラフ構造上で展開し、展開結果を、連結リストと、その個々のノードに対する員数が格納された員数配列とで表す。また、並列化対象の別の部品表ツリーも同様にこのグラフ構造上で展開し、マージ対象の部品のノードをこの連結リスト上で探索する。マージ対象の部品のノードが見つかれば、見つかったノードに対する員数配列に員数を書き込む。マージ対象のノードが見つからなければ、連結リストに新しいノードを挿入する。この操作を並列化対象の最終製品の配下にある全ての部品表ツリーについて繰り返す。
【００２２】
本実施の形態における並列展開の高速化のベースになるのは、グラフ理論に基づく汎用的なデータ構造を採用した設計案である。ＤＢアクセスは全て最初に行うので、Ｉ／Ｏを最小化できる。また、展開結果は、配列の代わりに、連結リストで表すので、データの挿入及び削除が効率よく行える。更に、メモリ上にグラフ構造の部品表ツリーを持っているので、深さ優先展開（深さ優先探索に基づく展開）も幅優先展開（幅優先探索に基づく展開）も必要に応じて何度でも繰り返し実行でき、しかも展開する際にはメモリ上のポインタを辿るだけでよいので、極めて効率がよい。
【００２３】
図１は、本実施の形態で並列展開の対象とする部品表ツリーの例を示したものである。
（ａ）は最終製品Ａの部品表ツリーを示し、（ｂ）は最終製品Ｂの部品表ツリーを示している。尚、図中、部品の後ろの記号は、部品の品番である。また、各部品表ツリーの左側の太字の数字は展開レベルを表す。ここでは、最終製品の１つ下の部品（組み立て部品）Ｐ１，Ｐ１’の展開レベルを０としている。更に、部品をつなぐ線に付した数字は員数を表す。実際には最終製品を構成する組み立て部品が１つだけということはあり得ないが、ここでは便宜上、簡略化した例を示している。
【００２４】
また、図２は、図１の部品表ツリーに対する隣接リスト構造の例を示したものである。
例えば、図１（ａ），（ｂ）の部品表ツリーに対応する構成データをＤＢから再帰ＳＱＬ等で読み込み、メモリ上の隣接リスト構造に展開したときの状態である。尚、ここでは、各部品表ツリーの展開レベルが０以下の部分を展開している。また、矢印はポインタを表しており、部品表ツリーの並列展開はこのポインタを辿るだけで再帰的に高速に行えるようになっている。
【００２５】
図３は、図１の部品表ツリーを並列展開した結果を表示する態様を示したものである。
（ａ）では、部品表ツリーの展開結果が、品番をその展開レベルに応じた量だけインデントさせた形式で表示されている。
（ｂ）では、（ａ）の表示に加え、計算された員数がマトリックス内に表示されている。このマトリックスにおいて、ある最終製品の部品表ツリーに含まれる部品は、その最終製品の列における員数が０でない部品である。また、ある最終製品の部品表ツリー内のある部品の直接の親部品は、その最終製品の列をその部品から上に辿っていって、その部品よりも展開レベルが１つ小さく、員数が０でない部品のうち、最初に遭遇したものである。
【００２６】
［並列展開のデータ構造と作成ロジック］
図３（ａ），（ｂ）の何れの態様で表示する場合も、その元となるデータは同様のデータ構造で表すことができる。
図４は、図１（ａ）の部品表ツリーに対応するデータ構造（展開結果リスト）を示したものである。
まず、図１（ａ）の部品表ツリーを深さ優先探索で展開し、展開結果を連結リストに保持しておく。同時に、連結リストに含まれる部品のノードに対して、マトリックスの列数をサイズとする動的配列を作っておく。そして、動的配列の１列目に、対応する部品の員数を格納し、これを員数配列とする。
【００２７】
その後、この展開結果リストを基軸リストとして、図１（ｂ）の部品表ツリーを深さ優先探索で展開し、展開結果をこの基軸リストに当てる。このとき、次のマージルールを適用する。
即ち、現在展開中の部品と同じ展開レベルに同じ部品があれば、員数配列の２列目のその部品に対応する位置に員数の計算結果を書き込む。一方、現在展開中の部品と同じ展開レベルに同じ部品がなければ、その展開レベルの末尾に現在の部品を追加する。但し、このマージルールは、具体的な業務要件の一例であって、マージの方法や部品の追加位置は業務によって様々に変わり得る。しかし、この部分のロジックはデータ構造から独立しているので、後で修正することも容易である。
ここで、マージの基本的な考え方は、これから展開する部品表ツリーの部品を同じ展開レベルで探索し、マッチする部品が基軸リストになければ行を挿入し、マッチする部品が基軸リストにあれば基軸リストのそのマッチした行の員数配列に今展開している部品の員数を書き込む、というものである。
【００２８】
図５は、このロジックによるマージの結果を示したものである。
即ち、図４の基軸リストに対してこのロジックにより図１（ｂ）の部品表ツリーの展開結果をマージしていったときの結果を示している。
このマージの後、展開結果を表す連結リストとその各ノードに対する員数配列の値とは、図３（ａ），（ｂ）の何れの形式でも出力できる。
【００２９】
ところで、この例では、部品表ツリーは２つ、つまり展開結果の表における列は２列としたが、展開結果の表における列が何百列、何千列になる場合もある。その場合、部品表ツリーの展開自体はポインタを辿ることで高速に行えたとしても、マージのための部品の比較処理の繰り返し数が多くなり、処理に要する時間が長くなってしまう。
【００３０】
［本実施の形態における具体的な実装方法］
先に述べたように、最終製品は様々なオプションを反映しているために多数存在したとしても、その１レベル下の組み立て部品は、共通化されており、その種類は限られている。上記の例では、最終製品Ａ、Ｂに全く同じ組み立て部品が含まれていれば、その組み立て部品を頂点とする部品表ツリーは全く同じなので、最終製品Ａを展開した結果、つまり展開した品番及び員数をその順序通りに最終製品Ｂの列にコピーすればよい。即ち、展開を終えた組み立て部品の列を記録しておき、その後、別の最終製品から辿った組み立て部品に展開済みの列が含まれていれば、その列の員数を現在の最終製品の列にコピーしてくるだけでよい。
【００３１】
（第１の実装例）
図６は、本実施の形態における第１の実装例を示したものである。
ここでは、（ａ）に示すように、極端な例として、全ての最終製品が同じ組み立て部品を構成部品として使っている場合を考える。この場合、どの最終製品の列でも展開結果は全く同じであり、同じ部品は全てマージされるので、列ごとに部品表ツリーを展開するのは無駄である。
そこで、（ｂ）に示すように、最初の展開結果の員数を員数配列の各列にコピーすることが考えられる。
【００３２】
しかしながら、この方法では問題が生じる。というのは、異なる最終製品が全く同じ組み立て部品のみから構成されることはないからである。つまり、最終製品が異なるのは組み立て部品に違いがあるためであり、この違いのために、単純に展開結果の員数をコピーするだけでは済まない。展開結果の列は、その列の最終製品にぶら下がっている組み立て部品配下の部品表ツリーにおける全ての部品を含んでいる。従って、最終製品が複数の組み立て部品から構成されていれば、１つの組み立て部品だけの展開結果ではなくなってしまう。
【００３３】
（第２の実装例）
そこで、本実施の形態では、この第２の実装例を提案する。
図７は、この第２の実装例について説明するための部品表ツリーの例を示したものである。
（ａ）は最終製品Ａの部品表ツリーを示し、（ｂ）は最終製品Ｂの部品表ツリーを示し、（ｃ）は最終製品Ｃの部品表ツリーを示している。この例では、最終製品Ａ，Ｃは、共通の組み立て部品Ｍ１から構成されており、最終製品Ａ，Ｂは、共通の組み立て部品Ｍ２から構成されており、最終製品Ｂ，Ｃは、共通の組み立て部品Ｍ３から構成されている。
【００３４】
また、図８は、図７の部品表ツリーに対する隣接リスト構造の例を示したものである。
即ち、図７の並列展開対象の部品表ツリーのデータをＤＢから全て読み込んでメモリ上の隣接リスト構造に展開すると、図のようになる。
ディクショナリには、部品表ツリーに含まれる部品に対応する部品データが重複を排除して登録されている。
また、各部品データは、その１レベル下の部品のリスト（部品リスト）を持っている。
更に、部品リストの各部品のノードは、その部品に対応する部品データへの位置情報を持っている。
このような隣接リスト構造を用いると、頂点の部品データから部品リストを辿り、その部品リストの各部品のノードからその部品に対応する部品データを辿ることによって、部品表ツリーの展開が実現できる。
【００３５】
この場合において、単純に展開結果の列における員数をコピーしたとする。
図９は、このときの展開結果の表を示したものである。但し、図７の（ａ），（ｂ）の部品表ツリーについてのみ示している。
まず、（ａ）に示すように、最終製品Ａにおける組み立て部品Ｍ１が展開される。最終製品Ｂには組み立て部品Ｍ１はぶら下がっていないので、（ｂ）に示すように、最終製品Ｂの列には員数０が格納される。
次に、（ｃ）に示すように、最終製品Ａにおける組み立て部品Ｍ２が展開される。最終製品Ｂには組み立て部品Ｍ２がぶら下がっており、最終製品Ａの列で展開済みなので、（ｄ）に示すように、最終製品Ａの列に格納された員数を最終製品Ｂの列にコピーする。
また、最終製品Ｂには組み立て部品Ｍ３がぶら下がっているので、（ｅ）に示すように、最終製品Ｂにおける組み立て部品Ｍ３が展開される。
【００３６】
しかしながら、このように単純に員数をコピーしたのでは、結果が正しくなくなってしまう。単に員数をコピーした場合、最終製品Ａの列の組み立て部品Ｍ１の員数もついてきてしまって、最終製品Ｂの列の員数が、実際よりも増えてしまうからである。
【００３７】
図１０は、正しい展開結果の表を示したものである。
本来、最終的な展開結果はこのようにならなければならない。
図９で員数が正しくならないのは、単純に展開結果の列における員数をコピーしただけでは、複数の組み立て部品の展開結果の違いが判別できないからである。
【００３８】
そこで、この第２の実装例では、組み立て部品ごとの部品表ツリーの展開結果をツリー固有リストとして個別に保持し、そのツリー固有リストのノードに、展開結果リストの対応する行をポイントさせておく。また、組み立て部品以下の部品表ツリーごとの展開結果が必要なので、コピー元となる情報も、組み立て部品以下の部品表ツリーごとに持っておく。
【００３９】
図１１は、この第２の実装例で幅優先展開を行う場合の並列展開用データ構造を示したものである。尚、幅優先展開では、最終製品Ａの部品表ツリーは、Ｍ１，Ｍ２，Ｐ１，Ｐ２，Ｐ１，Ｐ３の順に展開され、最終製品Ｂの部品表ツリーは、Ｍ２，Ｍ３，Ｐ１，Ｐ３，Ｐ２，Ｐ４の順に展開され、最終製品Ｃの部品表ツリーは、Ｍ１，Ｍ３，Ｐ１，Ｐ２，Ｐ２，Ｐ４の順に展開される。
【００４０】
ところで、この並列展開用データ構造において、各組み立て部品には、その組み立て部品の配下の部品表ツリーのみを展開して員数を計算した結果を保持するツリー固有リストがぶら下がっている。ツリー固有リストにおける[]内の数値が、計算された員数を表す。尚、このツリー固有リストは、最終的に複数の部品表ツリーがマージされた展開結果リストとは異なる。組み立て部品を頂点とする部品表ツリーが最初に展開されるときに１回だけ作成されるものである。そして、そのタイミングで、ツリー固有リストの各部品が展開結果リストのどの部品に当たるか分かるので、後で検索しないで済むようにポインタでその部品の場所を記憶しておく。このため、ツリー固有リストにおいては展開の順序を気にする必要がない。
その後、その組み立て部品を頂点とする部品表ツリーが再び現れると、その組み立て部品にぶら下がっているツリー固有リストから展開結果と各部品の展開結果リストでの位置とを取り出し、その位置に展開結果をマージ（コピー）する。
【００４１】
例えば、最終製品Ａ，Ｂ，Ｃの順に部品表ツリーが展開されるとすると、組み立て部品Ｍ２のツリー固有リストは、最終製品Ａの部品表ツリーを展開する際に初めて作成される。その後、最終製品Ｂの部品表ツリーを展開する際に組み立て部品Ｍ２が現れると、組み立て部品Ｍ２のツリー固有リストは既に存在する。そこで、そのツリー固有リストの部品から展開結果リストの対応する部品をポインタで辿り、その展開結果リストの対応する部品に対する員数配列の最終製品Ｂの列に、ツリー固有リストが保持する員数を加算する。
【００４２】
ここで、この場合の部品表ツリーの展開動作の概要を説明する。
まず、最終製品Ａの１レベル下の組み立て部品Ｍ１を処理する場合を考える。この場合は、まず、組み立て部品Ｍ１を頂点とするツリー固有リストに部品Ｐ１，Ｐ２の員数が記録される。また、展開結果リストに組み立て部品Ｍ１、部品Ｐ１，Ｐ２のノードが登録され、それぞれのノードに対する員数配列の最終製品Ａの列の員数にそれぞれの員数が加算される。その後、組み立て部品Ｍ１を頂点とするツリー固有リストに、展開結果リストにおける組み立て部品Ｍ１、部品Ｐ１，Ｐ２の登録位置が記録される。
次に、最終製品Ａの１レベル下の組み立て部品Ｍ２を処理する場合を考える。この場合は、まず、組み立て部品Ｍ２を頂点とするツリー固有リストに部品Ｐ１，Ｐ３の員数が記録される。また、展開結果リストに部品Ｐ１のノードが見つかり、組み立て部品Ｍ２、部品Ｐ３のノードが登録され、それぞれのノードに対する員数配列の最終製品Ａの列にそれぞれの員数が加算される。その後、組み立て部品Ｍ２を頂点とするツリー固有リストに、展開結果リストにおける組み立て部品Ｍ２、部品Ｐ１，Ｐ３の登録位置が記録される。
【００４３】
次に、最終製品Ｂの１レベル下の組み立て部品Ｍ２を処理する場合を考える。この場合は、組み立て部品Ｍ２を頂点とするツリー固有リストに記録された組み立て部品Ｍ２、部品Ｐ１，Ｐ３の員数のコピー先が、このツリー固有リストに記録された登録位置によって決定され、展開結果リストの組み立て部品Ｍ２，部品Ｐ１，Ｐ３のノードに対する員数配列の最終製品Ｂの列にそれぞれの員数が加算される。
次に、最終製品Ｂの１レベル下の組み立て部品Ｍ３を処理する場合を考える。この場合は、まず、組み立て部品Ｍ３を頂点とするツリー固有リストに部品Ｐ２，Ｐ４の員数が記録される。また、展開結果リストに部品Ｐ２のノードが見つかり、組み立て部品Ｍ３、部品Ｐ４のノードが登録され、それぞれのノードに対する員数配列の最終製品Ｂの列の員数にそれぞれの員数が加算される。その後、組み立て部品Ｍ３を頂点とするツリー固有リストに、展開結果リストにおける組み立て部品Ｍ３、部品Ｐ２，Ｐ４の登録位置が記録される。
【００４４】
次に、最終製品Ｃの１レベル下の組み立て部品Ｍ１を処理する場合を考える。この場合は、組み立て部品Ｍ１を頂点とするツリー固有リストに記録された組み立て部品Ｍ１、部品Ｐ１，Ｐ２の員数のコピー先が、このツリー固有リストに記録された登録位置によって決定され、展開結果リストの組み立て部品Ｍ１，部品Ｐ１，Ｐ２のノードに対する員数配列の最終製品Ｃの列にそれぞれの員数が加算される。
最後に、最終製品Ｃの１レベル下の組み立て部品Ｍ３を処理する場合を考える。この場合は、組み立て部品Ｍ３を頂点とするツリー固有リストに記録された組み立て部品Ｍ３、部品Ｐ２，Ｐ４の員数のコピー先が、このツリー固有リストに記録された登録位置によって決定され、展開結果リストの組み立て部品Ｍ３，部品Ｐ２，Ｐ４のノードに対する員数配列の最終製品Ｃの列にそれぞれの員数が加算される。
【００４５】
また、図１２は、この第２の実装例で深さ優先展開を行う場合の並列展開用データ構造を示したものである。尚、深さ優先展開では、最終製品Ａの部品表ツリーは、Ｍ１，Ｐ１，Ｐ２，Ｍ２，Ｐ１，Ｐ３の順に展開され、最終製品Ｂの部品表ツリーは、Ｍ２，Ｐ１，Ｐ３，Ｍ３，Ｐ２，Ｐ４の順に展開され、最終製品Ｃの部品表ツリーは、Ｍ１，Ｐ１，Ｐ２，Ｍ３，Ｐ２，Ｐ４の順に展開される。
【００４６】
深さ優先展開を行う場合のデータ構造及び展開動作は、展開結果リストにおける部品の順序が深さ優先展開に応じた順序になっている以外は、幅優先展開を行う場合のデータ構造と同様であるので、ここでの説明は省略する。
【００４７】
このように、第２の実装例では、ツリー固有リストの各部品に展開結果リストにおけるその部品の位置を記憶しておくことで、マージのための無駄な比較処理を省くことができ、並列展開のパフォーマンスが飛躍的に向上する。
【００４８】
［本実施の形態における実装方法を実現する並列展開装置］
次に、本実施の形態で提案する第２の実装例を実現する並列展開装置について説明する。
（並列展開装置の機能構成）
図１３は、このような並列展開装置の機能構成例を示したものである。
図示するように、並列展開装置は、部品表ツリー記憶部１０と、部品表ツリー展開部２０と、隣接リスト記憶部３０と、並列展開部４０と、展開結果リスト記憶部５０と、展開結果出力部６０とを備えている。
【００４９】
部品表ツリー記憶部１０は、複数の製品の部品表ツリーを記憶するＤＢである。この部品表ツリー記憶部１０は、例えば、磁気ディスク装置９０ｇ（図１５参照）によって実現される。
【００５０】
部品表ツリー展開部２０は、部品表ツリー記憶部１０に記憶された複数の製品の部品表ツリーを隣接リスト構造に展開する。この部品表ツリー展開部２０は、例えば、ＣＰＵ９０ａ（図１５参照）が磁気ディスク装置９０ｇ（図１５参照）に記憶されたプログラムをメインメモリ９０ｃ（図１５参照）に読み込んで実行することによって実現される。
【００５１】
隣接リスト記憶部３０は、部品表ツリー展開部２０が部品表ツリーを展開することによって生成した隣接リスト構造のデータを記憶する。この隣接リスト記憶部３０は、例えば、メインメモリ９０ｃ（図１５参照）によって実現される。本実施の形態では、隣接リストを記憶するメモリの一例として、隣接リスト記憶部３０を設けている。
【００５２】
並列展開部４０は、隣接リスト記憶部３０に記憶された隣接リスト構造のデータのポインタを辿ることにより、複数の製品の部品表ツリーを並列に展開し、展開結果リストを生成する。この並列展開部４０は、例えば、ＣＰＵ９０ａ（図１５参照）が磁気ディスク装置９０ｇ（図１５参照）に記憶されたプログラムをメインメモリ９０ｃ（図１５参照）に読み込んで実行することによって実現される。
【００５３】
展開結果リスト記憶部５０は、並列展開部４０により生成された展開結果リストを記憶する。ここで、展開結果リストは、既に述べた通り、並列展開対象の複数の製品を構成する各部品を表すノードを連結した連結リストと、ノードごとにそのノードが表す部品の各製品における員数を格納する員数配列とを含んでいる。この隣接リスト記憶部３０は、例えば、メインメモリ９０ｃ（図１５参照）によって実現される。本実施の形態では、並列展開情報、並列展開リストの一例として、展開結果リストを用いている。
【００５４】
展開結果出力部６０は、展開結果リスト記憶部５０に記憶された展開結果リストに保持された情報を例えば表示機構９０ｄ（図１５参照）に出力する。この展開結果出力部６０は、例えば、ＣＰＵ９０ａ（図１５参照）が磁気ディスク装置９０ｇ（図１５参照）に記憶されたプログラムをメインメモリ９０ｃ（図１５参照）に読み込んで実行することによって実現される。
【００５５】
ここで、並列展開部４０について更に詳しく説明する。
図示するように、並列展開部４０は、最終製品抽出部４１と、組み立て部品抽出部４２と、展開判定部４３と、隣接リスト展開部４４と、ツリー固有リスト記憶部４５と、員数加算部４６とを備えている。
【００５６】
最終製品抽出部４１は、隣接リスト記憶部３０に記憶された隣接リスト構造のデータから、最終製品を抽出する。本実施の形態では、製品の一例として、最終製品を用いている。
【００５７】
組み立て部品抽出部４２は、隣接リスト記憶部３０に記憶された隣接リスト構造のデータから、最終製品抽出部４１により抽出された最終製品を直接構成する組み立て部品を抽出する。具体的には、隣接リスト構造のデータにおいて最終製品のデータからポインタを辿ることにより、組み立て部品を抽出する。本実施の形態では、特定の製品を直接構成する特定の部品の一例として、組み立て部品を用いており、特定の部品を選択する選択部の一例として、組み立て部品抽出部４２を設けている。
【００５８】
展開判定部４３は、組み立て部品抽出部４２により抽出された組み立て部品を頂点とする部品表ツリーが展開済みであるかどうかを判定する。本実施の形態では、特定の部品の部品表が展開済みであるかどうかを判定する判定部の一例として、展開判定部４３を設けている。
【００５９】
隣接リスト展開部４４は、組み立て部品抽出部４２により抽出された組み立て部品を頂点とする部品表ツリーが展開済みでないと展開判定部４３で判定された場合に、隣接リスト記憶部３０に記憶された隣接リスト構造のデータを参照して、その組み立て部品を頂点とする部品表ツリーを展開する。具体的には、隣接リスト構造のデータにおいてその組み立て部品のデータからポインタを辿ることにより、部品表ツリーを展開する。そして、部品表ツリーを展開することで、ツリー固有リスト及び展開結果リストを生成する。本実施の形態では、特定の部品の部品表が展開済みでないと判定された場合にその特定の部品の部品表を展開する展開部の一例として、隣接リスト展開部４４を設けている。
【００６０】
ツリー固有リスト記憶部４５は、隣接リスト展開部４４が部品表ツリーを展開することで生成されたツリー固有リストを記憶する。ここで、ツリー固有リストは、既に述べた通り、組み立て部品を表すノードにその組み立て部品を頂点とする部品表ツリー内の各部品を表すノードが連結された連結リストであり、各ノードにはそのノードが表す部品の員数及び展開結果リストにおけるそのノードが表す部品の行を示す情報が登録されている。本実施の形態では、部品表展開情報、部品表展開リストの一例として、ツリー固有リストを用いている。
【００６１】
員数加算部４６は、組み立て部品抽出部４２により抽出された組み立て部品を頂点とする部品表ツリーが展開済みであると展開判定部４３で判定された場合に、ツリー固有リスト記憶部４５に記憶されたその組み立て部品にぶら下がったツリー固有リストの各ノードに登録された員数を、そのノードに登録された情報で特定される展開結果リストの行の員数配列における対象の最終製品の列に格納された員数に加算する。本実施の形態では、特定の部品の部品表が展開済みであると判定された場合に部品表展開情報に含まれる各部品の員数を並列展開情報における員数に加算する加算部の一例として、員数加算部４６を設けている。
【００６２】
（並列展開装置の動作）
この並列展開装置では、まず、部品表ツリー展開部２０が、並列展開すべき部品表データを全て部品表ツリー記憶部１０から読み込んで隣接リスト構造に展開し、この隣接リスト構造のデータを隣接リスト記憶部３０に記憶しておく。次いで、展開すべき最終製品の展開順序を決めて、その１レベル下の組み立て部品を順次取り出せるようにしておく。これは、例えば、隣接リスト構造のデータにおける最終製品のデータに展開順序を示すデータを持たせることによって実現可能である。
【００６３】
このような処理が行われていることを前提として、並列展開部４０は動作を開始する。
図１４は、並列展開部４０の動作例を示したフローチャートである。
並列展開部４０では、まず、最終製品抽出部４１が、展開すべき最終製品がまだあるかどうかを判定する（ステップ４０１）。そして、展開すべき最終製品がまだあると判定されれば、隣接リスト記憶部３０に記憶された隣接リスト構造のデータから最終製品を取り出す（ステップ４０２）。
最終製品抽出部４１により最終製品が取り出されると、次に、組み立て部品抽出部４２が、最終製品の１レベル下の組み立て部品がまだあるかどうかを判定する（ステップ４０３）。そして、組み立て部品がまだあると判定されれば、隣接リスト記憶部３０に記憶された隣接リスト構造のデータから組み立て部品を取り出す（ステップ４０４）。
【００６４】
組み立て部品抽出部４２により組み立て部品が取り出されると、展開判定部４３は、取り出された組み立て部品を頂点とする部品表ツリーが展開済みであるかどうかを判定する（ステップ４０５）。これは、例えば、隣接リスト構造のデータにおける組み立て部品のデータにその組み立て部品を頂点とする部品表ツリーが展開済みであるかどうかを示すフラグを持たせることによって実現可能である。
【００６５】
その結果、部品表ツリーが展開済みでないと判定されれば、隣接リスト展開部４４が、隣接リスト記憶部３０に記憶された隣接リスト構造のデータを参照することにより、ステップ４０４で取り出された組み立て部品を頂点とする部品表ツリーを展開する。
【００６６】
即ち、隣接リスト展開部４４は、まず、その部品表ツリー内に展開すべき部品がまだあるかどうかを判定する（ステップ４０６）。そして、その部品表ツリー内に展開すべき部品がまだあると判定されれば、隣接リスト記憶部３０に記憶された隣接リスト構造のデータから部品を取り出す（ステップ４０７）。尚、図７〜１２の例では、組み立て部品もツリー固有リスト及び展開結果リストに登録しているので、ここで組み立て部品も取り出すことになるが、組み立て部品は取り出さずに、組み立て部品を構成する部品のみを取り出すようにしてもよい。また、このときの部品を取り出す順序としては、図１１に示した幅優先探索に基づく順序であってもよいし、図１２に示した深さ優先探索に基づく順序であってもよい。
【００６７】
次に、隣接リスト展開部４４は、ステップ４０４で取り出された組み立て部品を頂点とするツリー固有リストに、ステップ４０７で取り出した部品を登録する（ステップ４０８）。具体的には、ツリー固有リストにその部品を表すノードを設定し、そのノードに部品の員数を記録する。そして、このツリー固有リストは、ツリー固有リスト記憶部４５に記憶される。
【００６８】
また、隣接リスト展開部４４は、展開結果リスト記憶部５０に記憶された展開結果リストにおいて、ステップ４０７で取り出した部品をマージ又は挿入できる位置を探索する（ステップ４０９）。具体的には、ステップ４０７で取り出した部品が展開結果リストに登録されていれば、その登録された位置を、部品をマージできる位置とし、ステップ４０７で取り出した部品が展開結果リストに登録されていなければ、予め定めた規則に従って決まる位置を、部品を挿入できる位置とする。そして、この探索の結果見つかった展開結果リストにおける位置にその部品を登録する（ステップ４１０）。
【００６９】
その後、隣接リスト展開部４４は、ツリー固有リスト記憶部４５に記憶されたツリー固有リストにおけるその部品を表すノードに、展開結果リスト記憶部５０に記憶された展開結果リストにおけるその部品の登録位置を記録し（ステップ４１１）、ステップ４０６へ戻る。
【００７０】
また、ステップ４０６で部品表ツリー内に展開すべき部品がないと判定されれば、隣接リスト展開部４４は、ステップ４０４で取り出された組み立て部品を頂点とする部品表ツリーを展開済みとする（ステップ４１２）。これは、例えば、隣接リスト構造のデータにおける組み立て部品のデータが持つフラグに、その組み立て部品を頂点とする部品表ツリーが展開済みであることを示す情報を設定することによって行う。そして、処理はステップ４０３へ戻り、他の組み立て部品についての処理が引き続き行われる。
【００７１】
一方、ステップ４０５で部品表ツリーが展開済みであると判定されれば、員数加算部４６が、ツリー固有リスト記憶部４５に記憶されたツリー固有リストを参照し、ステップ４０４で取り出された組み立て部品を頂点とするツリー固有リストに記録された員数を、展開結果リスト記憶部５０に記憶された展開結果リストに格納された員数に加算する。
【００７２】
即ち、員数加算部４６は、まず、そのツリー固有リスト内に処理すべき部品がまだあるかどうかを判定する（ステップ４１３）。そして、そのツリー固有リスト内に処理すべき部品がまだあると判定されれば、そのツリー固有リストから部品を取り出す（ステップ４１４）。尚、図７〜１２の例では、組み立て部品の員数も展開結果リストに格納しているので、ここで組み立て部品も取り出すことになるが、組み立て部品は取り出さずに、組み立て部品を構成する部品のみを取り出すようにしてもよい。
【００７３】
次に、員数加算部４６は、この取り出した部品から、展開結果リストのその部品が登録された位置を示す情報を取り出す（ステップ４１５）。
その後、員数加算部４６は、この取り出した情報によって特定される展開結果リストの位置に関連付けられた員数配列において、ステップ４０２で取り出された最終製品に対応する列に格納された員数に、この取り出した部品に記録された員数を加算し（ステップ４１６）、ステップ４１３へ戻る。
【００７４】
また、ステップ４１３でツリー固有リスト内に処理すべき部品がないと判定されれば、処理はステップ４０３へ戻り、他の組み立て部品についての処理が引き続き行われる。
【００７５】
尚、ステップ４０３で最終製品の１レベル下の組み立て部品がないと判定されれば、処理はステップ４０１へ戻り、他の最終製品についての処理が引き続き行われる。
また、ステップ４０１で展開すべき最終製品がないと判定されれば、処理は終了する。
【００７６】
このようにして、並列展開部４０により生成された展開結果リストが展開結果リスト記憶部５０に記憶されると、展開結果出力部６０が、展開結果リストの内容を例えば表示機構９０ｄ（図１５参照）に出力する。
【００７７】
［まとめ］
通常、部品表展開は、部品表ツリーの頂点ごとに行なうため、従来は、最終製品を頂点とし、その最終製品ごとに行っていた。そのため、部品表ツリーの内部に全く同じ部分ツリーがある場合は、同じ展開が繰り返されていた。ここに並列展開のための同じ部品のマージ処理が加わると、全く同じ展開結果になるにも関わらず、同じマージのための比較処理が繰り返され、この無駄な繰り返し処理が実行性能を落としていた。
普通は、最終製品のバリエーションが多くても、その１レベル下の組み立て部品は、部品の共通化が図られているため、その種類はそれほど多くない。そこで、最終製品を頂点として最終製品ごとに部品表ツリーを展開するのではなく、組み立て部品から部品表ツリーを展開し、その展開結果を保持しておく。そして、複数の最終製品の間で同じ組み立て部品を構成部品として利用している場合には、既に展開済みで保持されてある展開結果をコピーするようにする。
こうすることによって、列が多い場合に何時間もかかっていた展開処理が分単位で完了することとなる。
【００７８】
［本実施の形態を適用するのに好適なコンピュータのハードウェア構成］
図１５は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるＣＰＵ（Central Processing Unit）９０ａと、Ｍ／Ｂ（マザーボード）チップセット９０ｂを介してＣＰＵ９０ａに接続されたメインメモリ９０ｃと、同じくＭ／Ｂチップセット９０ｂを介してＣＰＵ９０ａに接続された表示機構９０ｄとを備える。また、Ｍ／Ｂチップセット９０ｂには、ブリッジ回路９０ｅを介して、ネットワークインターフェイス９０ｆと、磁気ディスク装置（ＨＤＤ）９０ｇと、音声機構９０ｈと、キーボード／マウス９０ｉと、フレキシブルディスクドライブ９０ｊとが接続されている。
【００７９】
尚、図１５において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ９０ａとＭ／Ｂチップセット９０ｂの間や、Ｍ／Ｂチップセット９０ｂとメインメモリ９０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット９０ｂと表示機構９０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構９０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット９０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路９０ｅと接続する場合、ネットワークインターフェイス９０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置９０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス９０ｉ、及び、フレキシブルディスクドライブ９０ｊについては、ＵＳＢ（Universal Serial Bus）を用いることができる。
【００８０】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００８１】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００８２】
１０…部品表ツリー記憶部、２０…部品表ツリー展開部、３０…隣接リスト記憶部、４０…並列展開部、４１…最終製品抽出部、４２…組み立て部品抽出部、４３…展開判定部、４４…隣接リスト展開部、４５…ツリー固有リスト記憶部、４６…員数加算部、５０…展開結果リスト記憶部、６０…展開結果出力部
【図１】
0005852361.tif 000002
【図２】
0005852361.tif 000003
【図３】
0005852361.tif 000004
【図４】
0005852361.tif 000005
【図５】
0005852361.tif 000006
【図６】
0005852361.tif 000007
【図７】
0005852361.tif 000008
【図８】
0005852361.tif 000009
【図９】
0005852361.tif 000010
【図１０】
0005852361.tif 000011
【図１１】
0005852361.tif 000012
【図１２】
0005852361.tif 000013
【図１３】
0005852361.tif 000014
【図１４】
0005852361.tif 000015
【図１５】
0005852361.tif 000016