(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-31
(45)【発行日】2024-02-08
(54)【発明の名称】ダイアグラム生成方法、ダイアグラム生成装置及びプログラム
(51)【国際特許分類】
G06F 16/90 20190101AFI20240201BHJP
【FI】
G06F16/90
(21)【出願番号】P 2020199419
(22)【出願日】2020-12-01
【審査請求日】2023-02-08
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(73)【特許権者】
【識別番号】504137912
【氏名又は名称】国立大学法人 東京大学
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】安田 宜仁
(72)【発明者】
【氏名】中村 健吾
(72)【発明者】
【氏名】伝住 周平
【審査官】早川 学
(56)【参考文献】
【文献】特開2001-306577(JP,A)
【文献】特開2003-030227(JP,A)
【文献】特開2017-111622(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 18/00-18/40
(57)【特許請求の範囲】
【請求項1】
集合族以上の階層を有する集合を少なくとも要素として含む、階層的な集合である多層集合を
ノード間の経路によって表現するダイアグラムを生成するダイアグラム生成方法であって、
多層集合を入力する入力手順と、
前記入力手順が入力した多層集合の要素を、層数が大きい要素から降順に、層数が同じ要素については要素内の要素数の降順に、上層から下層の各層について再帰的に並び替える並び替え手順と、
前記並び替え手順が並び替えた前記多層集合における上層の集合から順に各層の集合を処理対象として、処理対象である集合において最初の要素である要素Sの要素のうち最初の要素Gに対応するノードへの第1の枝と、前記要素Sのうち前記要素Gを含む要素から前記要素Gを除いた要素の集合F1に対応するノードへの第2の枝と、前記要素Sの要素のうち前記要素Gを要素として含んでいない要素からなる集合F0に対応するノードへの第3の枝とを有するノードを生成するダイアグラム生成手順と、
をコンピュータが実行し、
前記ダイアグラム生成手順は、前記処理対象である集合が空集合であれば前記ダイアグラムの終端ノードのうち当該終端ノードへ到達する経路に対応する集合が前記多層集合に存在しないことを示す終端ノードを当該集合に対応付け、当該集合の最初の要素が空集合であれば空集合を表現する終端ノードを当該集合に対応付け、当該集合が階層0の集合であれば階層0の集合に対応付ける終端ノードを生成する、
ことを特徴とするダイアグラム生成方法。
【請求項2】
前記ダイアグラム生成手順は、
前記第1の枝と、前記第2の枝と、第3の枝とを有するノードが既に生成されている場合には、前記処理対象の集合に当該ノードを対応付ける、
ことを特徴とする請求項1記載のダイアグラム生成方法。
【請求項3】
前記ダイアグラムの終端でな
い各ノードは、当該ノードの
前記第2の枝の指し先の
ノードに対応付けられた集合の各要素に当該ノードの
前記第1の枝の指し先の
ノードに対応付けられた集合を含めることで得られ
る集合に、当該ノードの
前記第3の枝の指し先の
ノードに対応付けられた集合を組み合わせ
た集合を表現する、
ことを特徴とする請求項1又は2記載のダイアグラム生成方法。
【請求項4】
集合族以上の階層を有する集合を少なくとも要素として含む、階層的な集合である多層集合を
ノード間の経路によって表現するダイアグラムを生成するダイアグラム生成装置であって、
多層集合を入力する入力部と、
前記入力部が入力した多層集合の要素を、層数が大きい要素から降順に、層数が同じ要素については要素内の要素数の降順に、上層から下層の各層について再帰的に並び替える並び替え部と、
前記並び替え部が並び替えた前記多層集合における上層の集合から順に各層の集合を処理対象として、処理対象である集合において最初の要素である要素Sの要素のうち最初の要素Gに対応するノードへの第1の枝と、前記要素Sのうち前記要素Gを含む要素から前記要素Gを除いた要素の集合F1に対応するノードへの第2の枝と、前記要素Sの要素のうち前記要素Gを要素として含んでいない要素からなる集合F0に対応するノードへの第3の枝とを有するノードを生成するダイアグラム生成部と、
を有
し、
前記ダイアグラム生成部は、前記処理対象である集合が空集合であれば前記ダイアグラムの終端ノードのうち当該終端ノードへ到達する経路に対応する集合が前記多層集合に存在しないことを示す終端ノードを当該集合に対応付け、当該集合の最初の要素が空集合であれば空集合を表現する終端ノードを当該集合に対応付け、当該集合が階層0の集合であれば階層0の集合に対応付ける終端ノードを生成する、
ことを特徴とするダイアグラム生成装置。
【請求項5】
前記ダイアグラム生成部は、
前記第1の枝と、前記第2の枝と、第3の枝とを有するノードが既に生成されている場合には、前記処理対象の集合に当該ノードを対応付ける、
ことを特徴とする請求項4記載のダイアグラム生成装置。
【請求項6】
前記ダイアグラムの終端でな
い各ノードは、当該ノードの
前記第2の枝の指し先の
ノードに対応付けられた集合の各要素に当該ノードの
前記第1の枝の指し先の
ノードに対応付けられた集合を含めることで得られ
る集合に、当該ノードの
前記第3の枝の指し先の
ノードに対応付けられた集合を組み合わせ
た集合を表現する、
ことを特徴とする請求項4又は5記載のダイアグラム生成装置。
【請求項7】
請求項1乃至3いずれか一項記載のダイアグラム生成方法をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ダイアグラム生成方法、ダイアグラム生成装置及びプログラムに関する。
【背景技術】
【0002】
目的となる情報を計算機内部の表現方法としてどのように保持するかは、圧縮や効率的な計算において重要な分野である。特に、集合は、計算機上で物事を表現するための基本的な情報であり、多様な集合を効率的に格納することが求められている。
【0003】
計算機上で取り扱う情報を圧縮して保存する手法は広く存在する。中でも、対象を集合族(つまり、集合の集合、又は組合せの集合)に限った場合に、従来、「ゼロサプレス型二分決定ダイアグラム」と呼ばれる手法が存在する(非特許文献1)。この手法によれば、特に、組合せの要素が事前に決まっていて、可能な組合せのうち、全体の集合(組合せを要素とする集合)に含まれている組合せの比率が小さい場合に指数的な圧縮をすることが可能である。例えば、要素がa,b,c,..,zの26種類からなる場合、可能な組合せは2^26=67108864通り存在する。このうち、要素5種類を使うような組合せは6万通り以上存在するが、ゼロサプレス型二分決定ダイアグラムによれば、150ノード未満のダイアグラムとして表現可能である。
【先行技術文献】
【非特許文献】
【0004】
【文献】Shin-ichi Minato. 1993. Zero-suppressed BDDs for set manipulation in combinatorial problems. In Proceedings of the 30th international Design Automation Conference (DAC '93). Association for Computing Machinery, New York, NY, USA, 272-277. DOI: https://dl.acm.org/doi/pdf/10.1145/157485.164890
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、この手法では要素の集合、集合族、集合族の集合…といった階層的な集合(以下、「多層集合」という。)を格納することはできず、多層集合を単一の階層の通常の集合族とみなしたうえでデータを保持する必要がある。このため、例えば、{a,{a},{{a}},{{{a}}}}、つまり、全体としては4要素の集合であり、各要素はaという要素、aという要素だけからなる集合、aという要素だけからなる集合だけからなる集合(集合族)、集合族の集合等を区別して表現する必要があった。このため、選びうる要素を多数準備する必要があり、結果として効率的に表現(格納)できないという課題があった。
【0006】
本発明は、上記の点に鑑みてなされたものであって、多層集合を効率的に表現可能とすることを目的とする。
【課題を解決するための手段】
【0007】
そこで上記課題を解決するため、集合族以上の階層を有する集合を少なくとも要素として含む、階層的な集合である多層集合をノード間の経路によって表現するダイアグラムを生成するダイアグラム生成方法は、多層集合を入力する入力手順と、前記入力手順が入力した多層集合の要素を、層数が大きい要素から降順に、層数が同じ要素については要素内の要素数の降順に、上層から下層の各層について再帰的に並び替える並び替え手順と、前記並び替え手順が並び替えた前記多層集合における上層の集合から順に各層の集合を処理対象として、処理対象である集合において最初の要素である要素Sの要素のうち最初の要素Gに対応するノードへの第1の枝と、前記要素Sのうち前記要素Gを含む要素から前記要素Gを除いた要素の集合F1に対応するノードへの第2の枝と、前記要素Sの要素のうち前記要素Gを要素として含んでいない要素からなる集合F0に対応するノードへの第3の枝とを有するノードを生成するダイアグラム生成手順と、をコンピュータが実行し、前記ダイアグラム生成手順は、前記処理対象である集合が空集合であれば前記ダイアグラムの終端ノードのうち当該終端ノードへ到達する経路に対応する集合が前記多層集合に存在しないことを示す終端ノードを当該集合に対応付け、当該集合の最初の要素が空集合であれば空集合を表現する終端ノードを当該集合に対応付け、当該集合が階層0の集合であれば階層0の集合に対応付ける終端ノードを生成する。
【発明の効果】
【0008】
多層集合を効率的に表現可能とすることができる。
【図面の簡単な説明】
【0009】
【
図1】本発明の実施の形態におけるダイアグラム生成装置10のハードウェア構成例を示す図である。
【
図2】本発明の実施の形態におけるダイアグラム生成装置10の機能構成例を示す図である。
【
図3】ダイアグラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
【
図4】ダイアグラム生成処理の処理手順の一例を説明するためのフローチャートである。
【
図5】内部ノード生成処理の処理手順の一例を説明するためのフローチャートである。
【
図6】除算処理の処理手順の一例を説明するためのフローチャートである。
【
図7】ノード生成処理の処理手順の一例を説明するためのフローチャートである。
【
図8】ダイアグラムの具体例を示す第1の図である。
【
図9】ダイアグラムの具体例を示す第2の図である。
【
図10】ダイアグラムの具体例を示す第3の図である。
【
図11】ダイアグラムの具体例を示す第4の図である。
【発明を実施するための形態】
【0010】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態におけるダイアグラム生成装置10のハードウェア構成例を示す図である。
図1のダイアグラム生成装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、及びインタフェース装置105等を有する。
【0011】
ダイアグラム生成装置10での処理を実現するプログラムは、CD-ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0012】
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってダイアグラム生成装置10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
【0013】
図2は、本発明の実施の形態におけるダイアグラム生成装置10の機能構成例を示す図である。
図2に示されるように、ダイアグラム生成装置10は、要素の集合、集合族、集合族の集合…といった階層的な集合(以下、「多層集合」という。)の格納を可能とするために、入力部11、並び替え部12、ダイアグラム準備部13、ダイアグラム生成部14、多層集合除算部15及びノード生成部16等を有する。これら各部は、ダイアグラム生成装置10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。ダイアグラム生成装置10は、また、ノード一意表記憶部17を利用する。ノード一意表記憶部17は、例えば、補助記憶装置102、又はダイアグラム生成装置10にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
【0014】
上記構成により、ダイアグラム生成装置10は、入力として与えられた多層集合に対して、その多層集合を表現するダイアグラムを出力する。
【0015】
なお、ダイアグラム生成装置10への入力の形式としては、便宜上、当業者によく知られた「S式」という表現を用いるが、入力の形式はその他の形式でもよい。
【0016】
[用語の定義]
<層数>
多層集合の入れ子の最大の段数を「層数」と呼ぶ。例えば、集合{a}の層数は1、要素aの層数は0、集合の集合{{a,b},{b}}と要素aとを要素として含む{a,{{a,b},b}}の層数は3である。日常の文脈における「集合族」は、層数2の多層集合に相当する。
【0017】
<素要素>
多層集合を表現する各要素のうち、それ自身が集合ではない要素を素要素と呼ぶ。例えば、多層集合{a,{{a,b},b}}の素要素はa,bである。
【0018】
<ダイアグラム>
ダイアグラムは、複数のノード(節点)から構成される。ノードは2種類存在する。一方は内部ノードであり、他方は終端ノードである。
【0019】
全てのノードは、自身の固有の番号(ダイアグラム生成装置10が取り扱うためのアドレス)を持つ。これを「番地」という。
【0020】
内部ノードは、それぞれ多層集合を構成する素要素又は層数1の多層集合の入れ子関係(換言すれば、当該入れ子関係によって構成される多層集合)に対応し、「ラベル枝」、「HI枝」、「LO枝」という3つの外向き枝によって他のノードと結ばれる。或る内部ノードは、当該内部ノードのHI枝の指し先の多層集合の各要素に当該内部ノードのラベル枝の指し先の多層集合を含めることで得られる多層集合に、当該内部ノードのLO枝の指し先の多層集合を組み合わせた(和集合)の多層集合を表現する。
【0021】
終端ノードは、空集合終端ノード、非存在終端ノード、素要素リテラル終端ノード、組合せリテラル終端ノードに分類することができる。
【0022】
空集合終端ノードは、空集合を表現する。図での記号として「{{}}」を用いる。
【0023】
非存在終端ノードは、そのノードに到達するような多層集合は存在しないことを示す。
【0024】
素要素リテラル終端ノードは、ノードのラベルとして素要素のいずれか一つを表現する。言い換えれば、素要素リテラル終端ノードは、層数0の多層集合「a」、「b」などを表現する。
【0025】
組合せリテラル終端ノードは、ノードのラベルとして素要素の1以上の組合せを表現する。言い換えれば、組合せリテラル終端ノードは、層数1の多層集合(日常の文脈での「集合」)「{a,b}」「{a}」などを表現する。
【0026】
なお、全てのノードはメモリ装置103又は補助記憶装置102の記憶領域(以下、単に「メモリ領域」という。)内で表現される。ノードの持つ枝は典型的にはメモリ領域内の番地を示すポインタとして表現されるが、接続情報を再現できるのであれば配列中の連続した位置に配置するなどの方法によって代替されてもよい。
【0027】
[処理手順]
以下、ダイアグラム生成装置10が実行する処理手順について説明する。
図3は、ダイアグラム生成装置10が実行する処理手順の一例を説明するためのフローチャートである。
【0028】
ステップS101において、入力部11は、格納対象の多層集合(以下、「入力多層集合」という。)を入力する。
【0029】
続いて、並び替え部12は、入力多層集合を構成する各要素(集合)に順序を与えた形の多層集合を出力する(S102)。換言すれば、並び替え部12は、入力多層集合の要素を所定の規則に従って並び変える。順序の表現方法は任意であるが、本実施の形態では、入力としてS式を使うこととしているので、S式の左側から右側に向けて降順として表現することができる。
【0030】
並び替え部12は、以下の基準によって、多層集合の上層から下層の各層について、再帰的に並び替えを行う。
(1)2つの要素が異なる層数であれば、層数が大きいものから降順に並び替える。
(2)同じ層数の要素の同士については、要素内の要素数(1層内側の要素数)が多いものから降順に並び替える。
(3)同じ層数で要素内の要素数が同じものについては、事前に定めた辞書の順序に従って並び替える(多層集合の下層についても同様に再帰的に並べる。)。
【0031】
例えば、
{{}{a}{b}{c}{ab}{bc}{ca}{abc}}
という多層集合に対して、a→b→cという辞書順序が事前に定められている場合、並び替え後の結果は、
{{abc}{ab}{ac}{a}{bc}{b}{c}{}}
となる。
【0032】
続いて、ダイアグラム準備部13は、空集合終端ノード、非存在終端ノードをメモリ領域に生成する(S103)。
【0033】
続いて、ダイアグラム生成部14は、並び替え済みの入力多層集合(S式)を入力として、ダイアグラム生成処理を実行する(S104)。ダイアグラム生成処理では、入力多層集合を表現(格納)するダイアグラムが生成され、その根ノードの番地が出力される、
続いて、ステップS104の詳細について説明する。
図4は、ダイアグラム生成処理の処理手順の一例を説明するためのフローチャートである。
図4において、Mは、ダイアグラム生成処理に対する入力の多層集合を表現する。なお、ダイアグラム生成処理は、その処理手順の中で自身を呼び出す再帰的な処理となっている。
【0034】
ステップS201において、ダイアグラム生成部14は、多層集合Mが空集合(M={})であるか否かを判定する。多層集合Mが空集合である場合(S201でYes)、ダイアグラム生成部14は、非存在終端ノードの番地を返却する(S202)。
【0035】
多層集合Mが空集合でない場合(S201でNo)、ダイアグラム生成部14は、多層集合M中の最初の要素が空集合(M={{}})であるか否かを判定する(S203)。多層集合M中の最初の要素が空集合である場合(S203でYes)、ダイアグラム生成部14は、空集合終端ノードの番地を返却する(S204)。
【0036】
多層集合M中の最初の要素が空集合でない場合(S203でNo)、ダイアグラム生成部14は、多層集合Mが素要素(ex.M=a)であるか否かを判定する(S205)。多層集合Mが素要素である場合(S205でYes)、ダイアグラム生成部14は、当該素要素に対応する素要素リテラル終端ノードの番地を返却する(S206)。なお、ダイアグラム生成部14は、当該素要素リテラル終端ノードが未生成であれば当該素要素リテラル終端ノードをメモリ領域に生成する。
【0037】
多層集合Mが素要素でない場合(S205でNo)、ダイアグラム生成部14は、多層集合Mが層数1の集合(ex.M={a,b})であるか否かを判定する(S207)。多層集合Mが層数1の集合である場合(S207でYes)、ダイアグラム生成部14は、当該集合に対する組合せリテラル終端ノードの番地を返却する(S208)。なお、ダイアグラム生成部14は、当該組合せリテラル終端ノードが未生成であれば生成する。
【0038】
多層集合Mが層数1の集合でない場合(S207でNo)、ダイアグラム生成部14は、内部ノードを生成するために内部ノード生成処理を実行する(S209)。
【0039】
続いて、ステップS209の詳細について説明する。
図5は、内部ノード生成処理の処理手順の一例を説明するためのフローチャートである。
【0040】
ステップS301において、ダイアグラム生成部14は、多層集合M中の最初の要素をSに代入する。並び替え部12によって再帰的に並び替えてあるのでSにも順序がついている。
【0041】
続いて、ダイアグラム生成部14は、Sの最初の要素をGに代入する(S302)。
【0042】
続いて、ダイアグラム生成部14は、多層集合除算部15に対して、多層集合M及び多層集合Gを入力することで、多層集合除算部15に除算処理を実行させる(S303)。多層集合除算部15は、多層集合Mと除数となる多層集合Gを入力として呼び出されると、除算処理を実行し、商となる多層集合と余りとなる多層集合を返却する。したがって、除算処理により、商である多層集合F1及び余りである多層集合F0が多層集合除算部15から得られる。F1は、再帰的に呼び出されるダイアグラム生成処理のうち、現在呼び出されているダイアグラム生成処理において生成されるノード(以下、「対象ノード」という。)のHI枝のための(HI枝の指し先の)多層集合であり、F0は、対象ノードのLO枝(LO枝との扱い枝の指し先の)のための多層集合である。また、多層集合Gは、対象ノードのラベル枝のための(ラベル枝の指し先の)多層集合である。
【0043】
続いて、ダイアグラム生成部14は、多層集合G,多層集合F1及び多層集合F0のそれぞれについて再帰的にノードを生成するために、それぞれを引数として、ダイアグラム生成処理(
図4)を呼び出す(S304、S305、S306)。Gを引数とした場合のダイアグラム生成処理からの戻り値(Gを表現する多層集合の根ノード(ラベル枝の指し先ノード)の番地)はGNに代入される。F1を引数とした場合のダイアグラム生成処理からの戻り値(F1を表現する多層集合の根ノード(HI枝の指し先ノード)の番地)はF1Nに代入される。F0を引数とした場合のダイアグラム生成処理からの戻り値(F0を表現する多層集合の根ノード(LO枝の指し先ノード)の番地)はF0Nに代入される。なお、ステップS304~S306において呼び出されるダイアグラム生成処理において、G、F1又はF0の層数が1以上の場合は、自身(G、F1又はF0)を表現するノードが再帰的に生成される。層数が0の場合は対応する終端ノードが既に存在するため、当該終端ノードの番地が返却される。
【0044】
続いて、ダイアグラム生成部14は、ノード生成部16に対して、GN,F1N,F0Nをそれぞれラベル枝の指し先ノードの番地(以下、「ラベル枝指し先番地」という。)、HI枝の指し先ノードの番地(以下、「HI枝指し先番地」という。)、LO枝の指し先ノードの番地(以下「LO枝指し先番地」という。)として入力することで、ノード生成部16にノード生成処理を実行させる(S307)。ノード生成部16は、ラベル枝指し先番地、HI枝指し先番地、LO枝指し先番地を入力として呼び出されると、多層集合Mに対応するノードを生成し、当該ノードの番地を返却する。
【0045】
続いて、ダイアグラム生成部14は、ノード生成処理から返却されたノードの番地を返却する(S308)。
【0046】
続いて、
図5のステップS303の詳細について説明する。
図6は、除算処理の処理手順の一例を説明するためのフローチャートである。
【0047】
ステップS401において、多層集合除算部15は、多層集合S及びGをダイアグラム生成部14から入力する。続いて、多層集合除算部15は、Sの各要素のうちGを要素として含んでいる各要素からGを除いた要素の集合(多層集合)を生成し、生成した多層集合をF1に代入する(S402)。
【0048】
続いて、多層集合除算部15は、Sの要素のうちGを要素として含んでいない要素からなる集合(多層集合)を生成し、生成した多層集合をF0に代入する(S403)。
【0049】
なお、ステップS402及びS403によって構成される除算は、厳密には、
S={{G,s}|{s}∈F1} ∪ F0 ・・・(1)
という数式によって表現される処理である。
【0050】
例えば、Sが{{{{ab}c}{ab}}{{{ab}c}a}{{{ab}c}d}{{{ab}c}e}{}c}であり、Gが{{ab}c}である場合、F1は、{{{ab}}{a}{d}{e}}となり、F0は、{{}c}となる。
【0051】
なお、式(1)は、或る内部ノードは、当該内部ノードのHI枝の指し先の多層集合(F1)の各要素({s}∈F1)に当該内部ノードのラベル枝の指し先の多層集合(G)を含めることで得られる多層集合{G,s}に、当該内部ノードのLO枝の指し先の多層集合(F0)を組み合わせた(和集合)の多層集合(S)を表現することを示す。
【0052】
なお、ソート順であるので、Gを含みうるのはSの前方の要素であり、例えば、SがGをk番目まで含んでいたとすれば、F0はk+1番目以降の全ての集合となる。多層集合除算部15は、この性質を用いて高速に処理を行ってもよい。
【0053】
続いて、多層集合除算部15は、F1及びF0をダイアグラム生成部14に返却して(S404)、除算処理を終了する。
【0054】
続いて、
図5のステップS307の詳細について説明する。
図7は、ノード生成処理の処理手順の一例を説明するためのフローチャートである。
【0055】
ステップS501において、ノード生成部16は、GN、F1N、F0Nを、それぞれラベル枝指し先番地、HI枝指し先番地、LO枝指し先番地としてダイアグラム生成部14から入力する。
【0056】
続いて、ノード生成部16は、ノード一意表記憶部17に記憶されているノード一意表を参照し、(GN,F1N,F0N)という3つの枝を持つノードが既に存在するか否かを判定する(S502)。
【0057】
ノード一意表は、キーと値からなる表である。キーは(ラベル枝指し先番地,HI枝指し先番地,LO枝指し先番地)の3つ組、値は3つ番地への各枝(3つの枝)を持つノードの番地である。すなわち、ノード一意表は、1行あたり4つの番地(そのうち3つがキーで残り1つが値)が記録され、ノードの数だけ行数のあるテーブルのような構成を有する。なお、終端ノードは各枝の指し先番地が存在しないため、便宜上特定の値(例えば、-1など)を用いる。各ノードは3つの枝(ラベル枝、HI枝,LO枝)を持っており、各ノードは3つの枝の組によって識別される。したがって、これらの枝(枝の指し先番地)が同じであるということは同一ノードであることを示す。
【0058】
該当するノードが既に存在する場合(すなわち、(GN,F1N,F0N)をキーとする値がノード一意表に登録されている場合)(S502でYes)、ノード生成部16は、該当ノードの番地(当該キーに対してノード一意表に登録されている番地)をダイアグラム生成部14に返却する(S503)。
【0059】
一方、該当するノードが存在しない場合(S502でNo)、ノード生成部16は、新たなノードをメモリ領域に生成する(S504)。続いて、ノード生成部16は、(GN,F1N,F0N)の3つ組みのキーに対して当該新たなノードの番地を値としてノード一意表に登録する(S505)。続いて、ノード生成部16は、当該新たなノードの番地をダイアグラム生成部14に返却して(S506)、ノード生成処理を終了する。
【0060】
例えば、或るノードで表現している多層集合が{{a,b,c},{a,b},{b,c},{{}}}である場合、ラベル枝が指す多層集合G(この場合は素要素)G=a、HI枝が指す多層集合F1={{b,c},{b}}、LO枝が指す多層集合F0={{b,c},{{}}}となる。
【0061】
又は、Gが真に多層集合となる例としては、F={{{{a,b},{a},{b}},a,b},{{{a,b},{a},{b}},a},{{{a,b},{a},{b}},b}}->G={{a,b},{a},{b}},F1={{a,b},{a},{b}},F0={}
などが挙げられる。
【0062】
上記の処理手順によって生成されるダイアグラムの一例を示す。
図8は、ダイアグラムの具体例を示す第1の図である。
図8は、多層集合{{a,b},{b},c,{a,c}}を表現するダイアグラムである。
図8が示すダイアグラムの構成要素の意味は以下の通りである。
〇(白抜きの円)…内部ノード
点線矢印…LO枝
実線矢印…HI枝
根本に■(黒塗りの矩形)が付与されている矢印…ラベル枝
□…白抜きの矩形終端ノード
内部に{}を含む終端ノード…非存在終端ノード
内部に{{}}を含む終端ノード…空集合終端ノード
内側が空でない{}を含む終端ノード…組合せリテラル終端ノード
{}を含まずに記号だけを含む終端ノード…素要素リテラル終端ノード
なお、ダイアグラムの根ノードから、非存在終端ノード以外への終端ノードへの経路(HI枝又はLO枝によって構成される経路)のそれぞれが多層集合の(一番外側の)要素ひとつひとつを表現する。或る経路が表現する多層集合は、当該経路において通過するHI枝の根元の内部ノードが示すラベルを要素として持つ多層集合である。また、内部ノードが示すラベルとは、当該内部ノードのラベル枝の指し先ノードが表現する多層集合である。例えば、
図8において、根ノードから、HI枝,LO枝,HI枝を通る経路は、最初のHI枝の根元のノード(根ノード)のラベルであるaと、最後のHI枝の根元のノードのラベルであるcとを要素として有する{a,c}を表現する。
【0063】
また、与えられたダイアグラムを解釈する場合には、下(終端ノード)から順にダイアグラムを辿っていき、式(1)に基づいて各内部ノードが表現する多層集合(入れ子関係)を順繰りに組み上げていく。
図8のダイアグラムを下から順に作ったダイアグラムを
図9、
図10、
図11に示す。
図9は、多層集合{{c}}に対応する。
図9に示される1つの内部ノードのラベル枝の指し先(式(1)のG)は「c」であり、HI枝の指し先(F1)は{{}}であり、LO枝の指し先(F0)は、非存在終端ノードである。したがって、F1内にGを含む多層集合は{{c}}となり、当該多層集合と非存在終端ノードとの組合せは、{{c}}である(ダイアグラムを解釈において、非存在終端ノードは、空集合として扱われる)。よって、
図9のダイアグラムは、{{c}}を表現する。
【0064】
図10は、多層集合{{b},{c}}に対応する。
図11は、多層集合{{b},c}に対応する。
図10及び
図10の各内部ノードが表現する多層集合は、
図9において説明した手順を再帰的に繰り返すことで得られる。
【0065】
上述したように、本実施の形態によれば、多層集合について、素要素又は層数1の多層集合が入れ子になっていたとしてもそれぞれを別の集合要素として扱うのではなく、素要素又は層数1の多層集合を終端とし、各入れ子関係はノード間の関係として表現するダイアグラムが生成される。したがって、複数の層数の集合要素が多様に組み合わさったような多層集合を効率的に表現することができる。その結果、多層集合に関する検索や圧縮を限られた資源で高速に実行することが可能となる。
【0066】
すなわち、ゼロサプレス型二分決定ダイアグラム(ZDD)では、各ノードの「ラベル」としてノードの値が定まっている。これはノード情報の外側に暗黙的に「段数」として表現されることが多く、ダイアグラムを下から順に段が揃うように並べた場合に、各段に対応づけられる情報である。このZDDにおける「ラベル」は、本実施の形態では「素要素」に対応し、集合を含まない「a」、「b」などを表現する。一方、本実施の形態では、集合を内部に含んだ「{a}」「{{a,b},{c}」のようなものも集合の要素として表現できる。それにより最終的に必要なノード数を削減することができる。例えば、aと、{a}と、{{a}}、{{{a}}}をZDDで表現しようとした場合、それぞれ異なる段を与えなければならなくなってしまい、それぞれを全く異なるノードを用いて表現する必要があるが、本実施の形態では、aを参照するラベル枝によってa及び{{a}}を表現することができ、{a}を参照するラベル枝によって{a}及び{{{a}}}を表現することができる。結果として{{a}}又は{{{a}}}を含むような多層集合であっても個別のラベルを用意せず、より低層のノード情報を用いてコンパクトに多層集合を表現することが可能である。
【0067】
なお、本実施の形態において、素要素は、第1の要素の一例である。ラベル枝は、第1の枝の一例である。HI枝は、第2の枝の一例である。LO枝は、第3の枝の一例である。ダイアグラム生成部14は、生成部の一例である。
【0068】
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0069】
10 ダイアグラム生成装置
11 入力部
12 並び替え部
13 ダイアグラム準備部
14 ダイアグラム生成部
15 多層集合除算部
16 ノード生成部
17 ノード一意表記憶部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
B バス