JP2010044523A - 真偽判定方法 - Google Patents

真偽判定方法 Download PDF

Info

Publication number
JP2010044523A
JP2010044523A JP2008207367A JP2008207367A JP2010044523A JP 2010044523 A JP2010044523 A JP 2010044523A JP 2008207367 A JP2008207367 A JP 2008207367A JP 2008207367 A JP2008207367 A JP 2008207367A JP 2010044523 A JP2010044523 A JP 2010044523A
Authority
JP
Japan
Prior art keywords
node
variable
level
bdd
transition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2008207367A
Other languages
English (en)
Other versions
JP5195149B2 (ja
Inventor
Shinichiro Tako
真一郎 多湖
Tatsuya Asai
達哉 浅井
Aoshi Okamoto
青史 岡本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2008207367A priority Critical patent/JP5195149B2/ja
Priority to US12/479,569 priority patent/US8655921B2/en
Publication of JP2010044523A publication Critical patent/JP2010044523A/ja
Application granted granted Critical
Publication of JP5195149B2 publication Critical patent/JP5195149B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing
    • G06F16/8373Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】複雑な検索クエリをBDD法に基づいて評価する場合に、評価に要する処理時間を削減すること。
【解決手段】検索装置100は、検索クエリを受け付けた場合に、BDD構築部160eが、BDD法に基づいて、第1ダイアグラムデータ150gを作成する。そして、BDD変換部160fが、第1ダイアグラムデータ150gに基づいて、起点となるノードから所定複数レベル先の到達ノードまで到達する各レベルの変数の真偽条件をビット列表記した第2ダイアグラムデータ150hを作成し、ダイアグラム実行部160gが、第2ダイアグラムデータ150hと、論理値テーブル150eとを比較することにより、検索クエリを評価する。
【選択図】 図4

Description

この発明は、論理式を含む検索クエリの真偽を判定して、階層構造を有する文書データから該当するデータを検索する検索装置の真偽判定方法に関するものである。
近年、XML(Extensible Markup Language)等のマークアップ言語によって文書データ(以下、XMLデータと表記する)が作成され、各種のコンピュータで利用されている。XMLは、異なるシステム間であっても、インターネット等を介して、構造化された文書や構造化されたデータの供給を容易にすることができるため、ますます多用されている。
そして、XMLデータの特定の照合位置を指定するものとして、検索クエリが用いられる。この検索クエリは、XMLデータのための標準クエリ言語であり、XMLデータの複雑な木構造に対して検索式を記述する能力を持つ。
また、近年では、検索クエリを用いてXMLデータを検索する場合に、BDD(Binary Decision Diagrams)法を用いて検索クエリを2分木で表現し、検索クエリに該当するデータがXMLデータ中に存在するか否かを評価する技術も存在する。
なお、特許文献1では、論理回路シミュレーションを実行する場合に、JUMP命令を用いてBDDを表現し、命令メモリに書き込みを実行することで、高速に代入演算を実行可能とする技術が開示されている。
特開2000−330786号公報
しかしながら、複数の論理変数と論理演算子とが組み合わされた複雑な検索クエリをBDD法に基づいて評価する場合に、論理変数毎に処理を実行する必要があるため、評価に要する処理時間が大きくなってしまうという問題があった。
すなわち、複雑な検索クエリをBDD法に基づいて評価する場合に、評価に要する処理時間を削減することが重要な課題となっている。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、複雑な検索クエリをBDD法に基づいて評価する場合に、評価に要する処理時間を削減することができる真偽判定方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、この真偽判定方法は、検索装置が、複数の変数からなる論理条件を含む検索条件を受け付けるステップと、記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換するステップと、前記検索条件をBDD法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成するステップと、遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行うステップと、を実行することを要件とする。
この真偽判定方法によれば、検索装置が検索条件の真偽を判定する場合に、所定桁数のビット列と遷移テーブルとを基にして遷移先となる到達変数を特定することにより検索対象データの検索条件に関する真偽判定を行うので、1ビット毎に真偽判定を行う手間を省き、真偽判定にかかる処理時間を短縮することができる。
以下に添付図面を参照して、この発明に係る真偽判定方法の好適な実施の形態を詳細に説明する。
まず、周知技術のBDD(Binary Decision Diagrams)法について説明する。このBDD法は、論理変数の入力順序を定義することにより、検索クエリの論理式を2分木で表現し、検索クエリの検索対象となるデータが存在するか否かを評価する方法である。図1は、周知技術のBDDを説明するための図である。
例えば、論理式「a and b or c and d」をそのまま2分木で表現すると、2分木20のように表現することができる。図1に示すように、この2分木20は、論理式の論理変数「a〜d」に対応するノード「A〜D」を有する。なお、2分木20の構造は、レベルテーブル20aおよび遷移テーブル20bによって定義されている。
レベルテーブル20aは、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、レベルテーブル20aの1段目では、ノード「D」のレベルが「0」であり、ノード「D」に対応する論理変数が「d」である旨の情報が登録されている。そして、各ノードに割り当てられたレベルが、入力順序となっている(図1に示す例では、入力順序は、d、c、b、aの順となる)。
遷移テーブル20bは、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、遷移テーブル20bの1段目では、ノード「D」の論理値が「0」である場合に、ノード「B」に遷移する旨の情報が登録されている。
そして、論理変数a〜dの論理値が、論理値テーブル10aのように既に計算されているものとすれば、文書ID「0」の各論理変数の論理値は、「a=0 b=1 c=0 d=1」なので、2分木20より、文書ID「0」の文書データに対する論理式の評価結果は「0(偽;文書ID「0」の文書データ中に検索クエリの検索対象となるデータが存在しない)」となる。
一方、文書ID「1」の各論理変数の論理値は、「a=1 b=1 c=1 d=0」なので、2分木20より、文書ID「1」の文書データに対する論理式の評価結果は「1(真;文書ID「1」の文書データ中に検索クエリの検索対象となるデータが存在する)」となる。
しかしながら、従来の技術では、図1に示したように、「ノードに対応する論理変数の論理値を読み出し、読み出した論理値に基づいて次のノードに遷移し、遷移先のノードに対応する論理変数の論理値を読み出し、」というように、1論理変数ごとに処理を行っているために、検索クエリを評価するための処理時間が大きくなってしまうという問題があった。
次に、本実施例1にかかる検索装置の概要および特徴について説明する。図2は、本実施例1にかかる検索装置の概要および特徴を説明するための図である。同図に示すように、本実施例1にかかる検索装置は、検索クエリ(一例として、検索クエリの論理式を「A and B or(C and D or E)and(F or G and H」とする)を取得して検索クエリを評価する場合に、BDD法に基づいて、第1の2分木を生成する。この第1の2分木は、論理変数「A〜H」に対応するノード「A〜H」を有している。
そして、検索装置は、第1の2分木を変換して、多ビット(図2に示す例では、4ビット、あるいは2ビット)毎にノードの遷移先を判定できる第2の2分木(図2の下段)を生成し、この第2の2分木を用いて検索クエリを評価する。
このように、本実施例1にかかる検索装置は、第1の2分木から第2の2分木を生成し、多ビット毎にノードの遷移先を判定するので、複雑な検索クエリをBDD法に基づいて評価する場合でも、評価に要する処理時間を削減することが可能となる。
具体的に、従来の技術では、第1の2分木をそのまま利用するため、1論理変数毎に処理を行う必要があり、各論理変数に基づいてノードの遷移先を一つずつ判定することにより、順にノードを辿っていく必要があった。例えば、各変数の論理値が、「H=1 G=0 F=1 E=1 D=0 C=0 B=1 A=0」の場合に、検索クエリを評価するには、「ノードH、G、F、E」において、4回ノードの遷移先を判定する必要がある。
一方、本実施例1の検索装置は、第1の2分木を第2の2分木に変換して多ビット(図2の例では4ビット)毎に処理を行うため、「ノードH」において1回ノードの遷移先を判定するだけで検索クエリを評価できる(各論理変数の論理値が、「H=1 G=0 F=1 E=1 D=0 C=0 B=1 A=0」の場合)。
ただし、図2において、初期ノードをノードHとし、各論理変数A〜Hの入力順序は、論理変数H〜Aの順に定義されているものとする。すなわち、4ビット毎に処理を行う場合には、論理変数「H、G、F、E」に対応する論理値「1011」に基づいて、ノードの遷移先を判定した後に、論理変数「D、C、B、A」に対応する論理値「0010」に基づいて、ノードの遷移先を判定する。また、第2の2分木の多ビットに含まれる「*」は、1でも0でもよい旨を示す。例えば、「111」は、「1101」または「1111」に対応する。
次に、本実施例1にかかる検索装置を備えた検索システムの構成について説明する。図3は、本実施例1にかかる検索システムの構成を示す図である。同図に示すように、この検索システムは、端末装置60と検索装置100とを有し、端末装置60および検索装置100は、ネットワーク50によって接続されている。
端末装置60は、入力装置(図示略)を介して利用者から検索クエリを入力された場合に、検索クエリを検索装置100に送信し、検索装置100からの検索結果を出力装置(図示略)に出力する装置である。
検索装置100は、端末装置60から検索クエリを受信した場合に、検索クエリを評価し、XMLデータから該当するデータを検索して検索結果を端末装置60に送信する装置である。以下において、本実施例1にかかる検索装置100の構成を具体的に説明する。
図4は、本実施例1にかかる検索装置100の構成を示す機能ブロック図である。同図に示すように、この検索装置100は、入力部110と、出力部120と、無線通信制御IF部130と、入出力制御IF部140と、記憶部150と、制御部160とを有する。
入力部110は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ(出力部120)も、マウスと協働してポインティングデバイス機能を実現する。
出力部120は、各種の情報を出力する手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成される。通信制御IF部130は、主に端末装置60との間における通信を制御する手段である。なお、入出力制御IF部140は、入力部110、出力部120、通信制御IF部130、記憶部150、制御部160によるデータの入出力を制御する手段である。
記憶部150は、制御部160による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部150は、XMLデータ150aと、検索クエリ150bと、分解検索クエリ150cと、抽出結果テーブル150dと、論理値テーブル150eと、変換論理式データ150fと、第1ダイアグラムデータ150gと、第2ダイアグラムデータ150hと、評価結果テーブル150iと、検索結果データ150jとを有する。
ここで、XMLデータ150aは、要素識別子「<」、「</」等により要素が区切られた階層構造を有する文書データである。図5は、本実施例1にかかるXMLデータ150aのデータ構造の一例を示す図である。なお、同図に示す例では、「<busyo>」、「</busyo>」で区切られる要素(以下、「busyo」の要素)が3種類ある。ここでは、説明の便宜上、「name」要素に「第一開発部」、「ID」要素に「2222」を有する「busyo」の要素を第1要素とする。また、「name」要素に「第一研究部」、「ID」要素に「3333」を有する「busyo」の要素を第2要素とし、「name」要素に「第三開発部」、「ID」要素に「1223」を有する「busyo」の要素を第3要素とする。
検索クエリ150bは、XMLデータ150aから照合位置のデータを取り出すためのデータである。図6は、本実施例1にかかる検索クエリ150bのデータ構造の一例を示す図である。同図に示す検索クエリ150bは、「busyo」の各要素のうち、「name」の要素に「開発部」を含み、かつ「ID」の要素に「"1.*3"」(先頭の数字が1、末尾の数値が3となる数列)を含む要素を選択し、選択した要素の「name」に登録された文書データを検索対象として指定する検索クエリである。
例えば、図5に示したXMLデータ150aに対して、図6に示した検索クエリ150bが指定された場合には、第3要素、すなわち、「name」の要素に「第3開発部」、「ID」の要素に「1223」を有する「busyo」の要素が検索クエリ150bの条件を満たすので、かかる第3要素の「name」に登録された文書データ「第三開発部」が検索対象のデータとなる。
分解検索クエリ150cは、検索クエリ150bが検索クエリ分解部160a(後述する)によって分解された結果得られるデータである。図7は、本実施例1にかかる分解検索クエリ150cのデータ構造の一例を示す図である。
図7に示すように、この分解検索クエリ150cは、検索クエリ150b(図6参照)を論理変数および論理演算子で表した論理式「Q=q1 and q2」と、各論理変数q1,q2の評価式「q1./busyo/name="開発部"」、「q2./busyo/ID=="1.*3"」と、検索結果を送信する際の定義式「Return /busyo/name/text()」を有する。
ここで、論理変数q1,q2には、評価式の評価結果に応じて、「1(真)」または「0(偽)」の論理変数が算出される。例えば、q1の評価式「q1./busyo/name="開発部"」によって第1要素を評価すると、「name」の要素に、開発部が含まれているので、評価結果は「1」となる。一方、q2の評価式「q2./busyo/ID=="1.*3"」によって第1要素を評価すると、「ID」の要素に、該当文書データが含まれないので、評価結果は「0」となる。
抽出結果テーブル150dは、評価式(図7のq1,q2参照)の評価対象となる情報と、検索クエリ150bの評価結果が真であった場合に、端末装置60に返答する項目を管理するテーブルである。図8は、本実施例1にかかる抽出結果テーブル150dのデータ構造の一例を示す図である。
図8に示すように、この抽出結果テーブル150dは、データ種別と、第1論理変数情報と、第2論理変数情報と、返答項目とを有する。なお、データ種別「Data0〜2」は、図5に示した、第1〜3要素の情報にそれぞれ対応する。
例えば、図8の1段目では、データ種別「Data0」の第1論理変数情報(ここでは、評価式q1の文書「開発部」が存在しているか否かを示す情報)が「○(存在している)」、第2論理変数情報(ここでは、評価式q2の比較対象となる情報)が「2222」、返答項目が「第一開発部」となっている。
論理値テーブル150eは、各評価式の評価結果を管理するテーブルである。図9は、本実施例1にかかる論理値テーブル150eのデータ構造の一例を示す図である。同図に示すように、この論理値テーブル150eは、データ種別と、第1論理値と、第2論理値とを有する。
ここで、第1論理値は、評価式(例えば、評価式q1)による第1論理変数の評価結果であり、第2論理値は、評価式(例えば、評価式q2)による第2論理変数の評価結果である。
変換論理式データ150fは、論理式(図7参照)が、論理式変換部160d(後述する)によって逆ポーランド表記に変換されたデータである。第1ダイアグラムデータ150gは、BDD構築部160e(後述する)によって作成されるデータである。
図10は、本実施例1にかかる第1ダイアグラムデータ150gのデータ構造の一例を示す図である。同図に示すように、この第1ダイアグラムデータ150gは、第1レベルテーブル151および第1遷移テーブル152を有する。
第1レベルテーブル151は、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、第1レベルテーブル151の1段目では、ノード「q1」のレベルが「0」であり、ノード「q1」に対応する論理変数が「q1」である旨の情報が登録されている。なお、第1レベルテーブル151において、レベル「2」のノードが最終レベルのノードとなり、ノード「0」あるいはノード「1」が、検索クエリ150bの評価結果となる。
第1遷移テーブル152は、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、第1遷移テーブル152の1段目では、ノード「q1」の論理値が「0」である場合に、ノード「0」に遷移する旨の情報が登録されている。なお図10に示す第1レベルテーブル151および第1遷移テーブル152によって、図10の下段に示す2分木が定義される。
第2ダイアグラムデータ150hは、第1ダイアグラムデータ150gが、BDD変換部160f(後述する)によって変換されたデータである。この第2ダイアグラムデータ150hは、第2レベルテーブルおよび第2遷移テーブルを有しており、第2レベルテーブルおよび第2遷移テーブルによって定義される2分木は、多ビット毎に評価を行うことができる。第2レベルテーブルおよび第2遷移テーブルの説明は後述する。
評価結果テーブル150iは、各データ種別(例えば、Data0〜2)に対する評価結果を管理するテーブルである。図11は、本実施例1にかかる評価結果テーブル150iのデータ構造の一例を示す図である。同図に示すように、この評価結果テーブル150iは、データ種別と評価結果とを対応付けて記憶している。
例えば、図11の1段目では、データ種別「Data0」に対する論理式の評価結果が「0(偽)」である旨の情報が登録されている。なお、図11の3段目では、データ種別「Data2」に対する論理式の評価結果が「1(真)」である旨の情報が登録されている。
検索結果データ150jは、XMLデータ150aに対する検索クエリ150bの検索結果を記憶するデータである。図12は、本実施例1にかかる検索結果データ150jのデータ構造の一例を示す図である。この検索結果データ150jは、評価結果テーブル150i(図11参照)の評価結果が「1」となるデータ種別の返答項目が記憶されている。図11を参照すると、この場合は、データ種別「Data2」の評価結果が「1」となっているので、データ種別「Data2」の返答項目が、検索結果データ150jに記憶される。
図4の説明に戻ると、制御部160は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図4に示すように、検索クエリ分解部160aと、抽出結果テーブル生成部160bと、論理値算出部160cと、論理式変換部160dと、BDD構築部160eと、BDD変換部160fと、ダイアグラム実行部160gと、検索結果出力部160hとを有する。
このうち、検索クエリ分解部160aは、端末装置60から検索クエリを受信した場合に、受信した検索クエリを検索クエリ150bとして記憶部150に記憶すると共に、周知の手法を用いて、検索クエリ150b(図6参照)から分解検索クエリ150c(図7参照)を生成する手段である。
抽出結果テーブル生成部160bは、分解検索クエリ150cに含まれる評価式に基づいて、第1〜n(n>1)論理変数および返答項目をXMLデータ150aから抽出し、抽出結果テーブル150dを生成する手段である。
例えば、検出結果テーブル生成部160bは、評価式が「busyo/name="開発部"」である場合には、「busyo」要素を親とする「name」要素に「開発部」が含まれているか否かを判定し、含まれている場合には、「○」を抽出結果テーブル150dに登録し、含まれていない場合には「×」を抽出結果テーブル150dに登録する。
また、抽出結果テーブル生成部160bは、評価式が「/busyo/ID=="1.*3"」である場合には、「busyo」要素を親とする「ID」要素に含まれる数列をXMLデータ150aから抽出し、抽出結果テーブル150fに登録する。
論理値算出部160cは、分解検索クエリ150cの評価式と、抽出結果テーブル150dとを比較することにより、評価式の論理値を算出する手段である。論理値算出部160cは、算出結果を論理値テーブル150e(図9参照)に登録する。なお、評価式q1の論理値を求める際に、第1論理変数情報が「○」の場合には論理値を「1」とし、「×」の場合には論理値を「0」とする。
論理式変換部160dは、逆ポーランド表記を用いることにより、検索クエリの論理式(例えば、Q=q1 and q2)を変換する手段である。論理式変換部160dは、論理式「q1&q2」を、逆ポーランド表記を用いて変換すると、「q1q2&」となる。論理式変換部160dは、変換した論理式のデータを、変換論理式データ150fとして記憶部150に記憶する。
BDD構築部160eは、変換論理式データ150fに基づいて、第1ダイアグラムデータ150gを生成する手段である。BDD構築部160eは、変換論理式データ150f(逆ポーランド表記の論理式)の文字を先頭から順次読み出し、読み出した文字(論理演算子、論理変数等)に応じて、第1レベルテーブル151、第1遷移テーブル152に各種の情報を登録する。
以下において、BDD構築部160eが、論理変数を読み出した場合の処理、否定(〜)を読み出した場合の処理、AND(&)を読み出した場合の処理、OR(|)を読み出した場合の処理、終了時の処理(最後の文字を読み出した後の処理)について順に説明する。なお、BDD構築部160eは、先頭(Top)スタック、Trueスタック、Falseスタックを保持しているものとする。
(論理変数を読み出した場合の処理)
BDD構築部160eが、論理変数を読み出した場合には、新しいノード変数を定義し、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリを第1レベルテーブル151に追加する。
また、BDD構築部160eは、定義したノード変数を先頭スタックにプッシュ(一時記憶部<スタック>にノード変数を登録する;以下同様)し、定義したノード変数1つからなる集合をTrueスタック、Falseスタックにプッシュすると共に、現在のレベルに1を加算する。
(否定「〜」を読み出した場合の処理)
BDD構築部160eは、否定を読み出した場合には、新しくユニークなノード変数T,Fを定義し、Trueスタックをポップ(一時記憶部<スタック>に最後に登録された情報を取り出す;以下同様)し、ポップした集合内の各ノード変数において、ノード変数、論理値1、遷移先ノード変数Fからなるエントリを第1遷移テーブル152に追加する。
また、BDD構築部160eは、Falseスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値0、遷移先ノード変数Tからなるエントリを第1遷移テーブル152に追加する。BDD構築部160eは、Trueスタックにノード変数Tからなる集合をプッシュし、Falseスタックにノード変数Fからなる集合をプッシュする。
(AND「&」を読み出した場合の処理)
BDD構築部160eは、ANDを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をAとする。そして、BDD構築部160eは、Trueスタックを2回ポップし、1回目にポップした集合をTrueスタックにプッシュする。
BDD構築部160eは、2回目にポップした集合内の各ノード変数をノード項目として、論理値1、遷移先ノード変数Aとをあわせたエントリを第1遷移テーブル152に追加する。また、BDD構築部160eは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数すべてからなる集合をFalseスタックにプッシュする。
(OR「|」を読み出した場合の処理)
BDD構築部160eは、ORを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をAとする。そして、BDD構築部160eは、Falseスタックを2回ポップし、1回目にポップした集合をFalseスタックにプッシュする。
BDD構築部160eは、2回目にポップした集合内の各ノード変数をノード項目として、論理値0、遷移先ノード変数Aをあわせたエントリを第1遷移テーブル152に追加する。また、BDD構築部160eは、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合をTrueスタックにプッシュする。
(終了時の処理)
BDD構築部160eは、新しいノード変数0,1を定義し、定義したノード変数、現在のレベル、論理変数NULLからなるエントリを第1レベルテーブル151に追加する。また、BDD構築部160eは、Trueスタックをポップし、ポップした集合内の各ノード変数において、論理値1と遷移先ノード変数1とを合わせたエントリを第1遷移テーブル152に追加する。
BDD構築部160eは、Falseスタックをポップし、ポップした集合内の各ノード変数において、論理値0と遷移先ノード変数0とを合わせたエントリを第1遷移テーブル152に追加する。そして、BDD構築部160eは、第1遷移テーブル152において、遷移先項目がノード変数T,Fとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該当エントリの遷移先項目として上書きする。
次に、BDD構築部160eの処理を具体的に説明する。ここでは、一例として、変換論理式データ150fが「HG&F|ED〜C&|〜&BA&|」であるものとする。図13〜図15は、TOPスタックとTrueスタックとFalseスタックの状態変化を示す図であり、図16〜図24は、第1レベルテーブル151と第1遷移テーブル152の状態変化を示す図である。
(「H」G&F|ED〜C&|〜&BA&|)
まず、BDD構築部160eは、「H」を読み、(H<ノード>,0<レベル>,H<論理変数>)を第1レベルテーブル151に追加し、「H」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「0」に1を加算する。
(H「G」&F|ED〜C&|〜&BA&|)
BDD構築部160eは、「G」を読み、(G,1,G)を第1レベルテーブル151に追加し、「G」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「1」に1を加算する(図13のステップS20および図16の左側参照)。
(HG「&」F|ED〜C&|〜&BA&|)
BDD構築部160eは、「&」を読み、先頭スタック「G」をポップする。そして、BDD構築部160eは、Trueスタックを2回ポップし、1回目にポップした集合「G」をTrueスタックにプッシュする。
また、BDD構築部160eは、2回目にポップした集合「H」のノード変数が「H」なので、(H<ノード>,1<論理値>,G<遷移先>)を第1遷移テーブル152に追加する(図16の右側参照)。BDD構築部160eは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「H,G」をFalseスタックにプッシュする(図13のステップS21)。
(HG&「F」|ED〜C&|〜&BA&|)
BDD構築部160eは、「F」を読み、(F,2,F)を第1レベルテーブル151に追加し、「F」を先頭スタック、Trueスタック、Falseスタックにプッシュする(図13のステップS22および図17の左側参照)。また、現在のレベル「2」に1を加算する。
(HG&F「|」ED〜C&|〜&BA&|)
BDD構築部160eは、「|」を読み、先頭スタック「F」をポップする。そして、BDD構築部160eは、Falseスタックを2回ポップし、1回目にポップした集合「F」をFalseスタックにプッシュする。
BDD構築部160eは、2回目にポップした集合「H,G」内の各ノード変数をノード項目として、論理値0と遷移先ノード変数「F」とを合わせたエントリを第1遷移テーブル152に追加する(図17の右側参照)。
BDD構築部160eは、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「G,F」をTrueスタックにプッシュする(図13のステップS23)。
(HG&F|「E」D〜C&|〜&BA&|)
BDD構築部160eは、「E」を読み、(E,3,E)を第1レベルテーブル151に追加し、「E」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「3」に1を加算する。
(HG&F|E「D」〜C&|〜&BA&|)
BDD構築部160eは、「D」を読み、(D,4,D)を第1レベルテーブル151に追加し、「D」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「4」に1を加算する(図13のステップS24および図18の左側参照)。
(HG&F|ED「〜」C&|〜&BA&|)
BDD構築部160eは、「〜」を読み、ユニークなノード「Dt」、「Df」を定義し、Trueスタックをポップし、ポップした集合内「D」のノード変数において、ノード変数「D」、論理値1、遷移先ノード変数「Df」からなるエントリを第1遷移テーブル152に追加する。
BDD構築部160eは、Falseスタックをポップし、ポップした集合内「D」のノード変数において、ノード変数「D」、論理値0、遷移先ノード変数「Dt」からなるエントリを第1遷移テーブル152に追加する(図18の右側参照)。また、BDD構築部160eは、Trueスタックに「Dt」をプッシュし、Falseスタックに「Df」をプッシュする(図13のステップS25)。
(HG&F|ED〜「C」&|〜&BA&|)
BDD構築部160eは、「C」を読み、(C,5,C)を第1レベルテーブル151に追加し、「C」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「5」に1を加算する(図14のステップS26および図19の左側参照)。
(HG&F|ED〜C「&」|〜&BA&|)
BDD構築部160eは、「&」を読み、先頭スタック「C」をポップする。そして、BDD構築部160eは、Trueスタックを2回ポップし、1回目にポップした集合「C」をTrueスタックにプッシュする。
また、BDD構築部160eは、2回目にポップした集合「Dt」のノード変数が「Dt」なので、(Dt,1,C)を第1遷移テーブル152に追加する(図19の右側参照)。BDD構築部160eは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「Df,C」をFalseスタックにプッシュする(図14のステップS27)。
(HG&F|ED〜C&「|」〜&BA&|)
BDD構築部160eは、「|」を読み、先頭スタック「D」をポップする。そして、BDD構築部160eは、Falseスタックを2回ポップし、1回目にポップした集合「Df,C」をFalseスタックにプッシュする。
BDD構築部160eは、2回目にポップした集合「E」のノード変数をノード項目として、論理値0と遷移先ノード変数「D」とを合わせたエントリを第1遷移テーブル152に追加する(図20の左側参照)。
BDD構築部160eは、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「E,C」をTrueスタックにプッシュする(図14のステップS28)。
(HG&F|ED〜C&|「〜」&BA&|)
BDD構築部160eは、「〜」を読み、ユニークなノード「Ct」、「Cf」を定義し、Trueスタックをポップし、ポップした集合内「E,C」のノード変数において、ノード変数「C」、論理値1、遷移先ノード変数「Cf」からなるエントリを第1遷移テーブル152に追加する。また、ノード変数「E」、論理値1、遷移先ノード変数「Cf」からなるエントリを第1遷移テーブル152に追加する。
BDD構築部160eは、Falseスタックをポップし、ポップした集合内「Df,C」の各ノード変数において、ノード変数「C」、論理値0、遷移先ノード変数「Ct」からなるエントリを第1遷移テーブル152に追加すると共に、ノード変数「Df」、論理値0、遷移先ノード変数「Ct」からなるエントリを第1遷移テーブル152に追加する(図20の右側参照)。また、BDD構築部160eは、「Ct」をTrueスタックにプッシュし、「Cf」をFalseスタックにプッシュする(図14のステップS29)。
(HG&F|ED〜C&|〜「&」BA&|)
BDD構築部160eは、「&」を読み、先頭スタック「E」をポップする。そして、BDD構築部160eは、Trueスタックを2回ポップし、一回目にポップした集合「Ct」をTrueスタックにプッシュする。
また、BDD構築部160eは、2回目にポップした集合「G,F」内の各ノード変数が「G,F」なので、(G,1,E)および(F,1,E)を第1遷移テーブル152に追加する(図21の左側参照)。BDD構築部160eは、Falesスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「Cf,F」をFalseスタックにプッシュする(図14のステップS30)。
(HG&F|ED〜C&|〜&「B」A&|)
BDD構築部160eは、「B」を読み、(B,6,B)を第1レベルテーブル151に登録し、「B」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「6」に1を加算する。
(HG&F|ED〜C&|〜&B「A」&|)
BDD構築部160eは、「A」を読み、(A,7,A)を第1レベルテーブル151に登録し、「A」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「7」に1を加算する。
(HG&F|ED〜C&|〜&BA「&」|)
BDD構築部160eは、「&」を読み、先頭スタック「A」をポップする。そして、BDD構築部160eは、Trueスタックを2回ポップし、1回目にポップした集合「A」をTrueスタックにプッシュする。
また、BDD構築部160eは、2回目にポップした集合「B」のノード変数が「B」なので、(B,1,A)を第1遷移テーブル152に追加する(図21の右側参照)。BDD構築部160eは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「B,A」をFalseスタックにプッシュする(図15のステップS31)。
(HG&F|ED〜C&|〜&BA&「|」)
BDD構築部160eは、「|」を読み、先頭トラック「B」をポップする。そして、BDD構築部160eは、Falseスタックを2回ポップし、1回目にポップした集合「B,A」をFalseスタックにプッシュする。
BDD構築部160eは、2回目にポップした集合「Cf,F」の各ノード変数をノード項目として、ノード変数「Cf」、論理値0、遷移先ノード変数「B」と、ノード変数「F」、論理値0、遷移先ノード変数「B」を第1遷移テーブル152に追加する(図22参照)。
BDD構築部160eは、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「A,Ct」をTrueスタックにプッシュする(図15のステップS32)。
(終了時の処理)
BDD構築部160eは、新しいノード変数「0」、「1」を定義し、定義したノード変数、現在のレベル、論理変数NULLからなるエントリを第1レベルテーブル151に追加する。そして、BDD構築部160eは、Trueスタックをポップし、ポップした集合内「A,Ct」の各ノード変数において、論理値1と遷移先ノード変数1とを合わせたエントリ(Ct,1,1)および(A,1,1)を第1遷移テーブル152に追加する。
BDD構築部160eは、Falseスタックをポップし、ポップした集合内「B,A」の各ノード変数において、論理値0と遷移先ノード変数0とを合わせたエントリ(B,0,0)および(A,0,0)を第1遷移テーブル152に登録する(図15のステップS33および図23参照)。
BDD構築部160eは、第1遷移テーブル152(図23参照)において、遷移先がノード変数T,Fとして生成されたノード変数(例えば、Dt,Df,Ct,Cf)である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする(図15のステップS34および図24参照)。
例えば、BDD構築部160eは、
(E,1,Cf)、(Cf,0,B)を(E,1,B)に変換し、
(D,0,Dt)、(Dt,1,C)を(D,0,C)に変換し、
(D,1,Df)、(Df,0,Ct)を(D,1,Ct)に変換し、
(D,1,Ct)、(Ct,1,1)を(D,1,1)に変換し、
(C、0、Ct)、(Ct、1,1)を(D,1,1)に変換する。
BDD変換部160fは、第1の2分木を第2の2分木となるように、第1ダイアグラムデータ150gを変換して第2ダイアグラムデータ150hを生成する手段である(第1の2分木および第2の2分木については図2参照)。BDD変換部160fは、第1ダイアグラムデータ150gに基づいて、起点となるノードから所定複数レベル先のノードまで到達する各レベルの変数の真偽条件をビット列表記することで、第2ダイアグラムデータ150hを作成する。
図25は、本実施例1にかかる第2ダイアグラムデータ150hのデータ構造の一例を示す図である。ただし、図26に示す第1ダイアグラムデータ150gを変換したものが、図25に示す第2ダイアグラムデータ150hとなる。図26は、BDD変換部160fの処理を説明するための第1ダイアグラムデータ150gを示す図である。
図25に示すように、この第2ダイアグラムデータ150hは、第2レベルテーブル153と、第2遷移テーブル154とを有する。第2レベルテーブル153は、ノードと、各ノードのレベルと、各ノードに入力する入力ビット数とを管理するテーブルである。例えば、第2レベルテーブル153の1段目では、ノード「H」のレベルが「0」であり、ノード「H」に入力されるビット数(ノードHにおいて比較される論理値の数)が「4」である旨の情報が登録されている。
第2遷移テーブル154は、ノードと、各ノードに入力される論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、第2遷移テーブル154の1段目では、ノード「H」にて入力されるビット列が「111(1101あるいは1111)」の場合に、ノード「1」に遷移する旨の情報が登録されている。なお、図25に示す第2レベルテーブル153および第2遷移テーブル154によって、図25の上段に示す2分木(第2の2分木)が定義される。
続いて、具体例を用いて、BDD変換部160fの処理について説明する。図27〜図30は、本実施例1にかかるBDD変換部160fの処理を説明するための図である。図27〜図30で説明する処理を実行することにより、図26に示した第1ダイアグラムデータ150aから、図25に示した第2ダイアグラムデータ150hが作成され、多ビット毎に遷移先のノードを判定することが可能となる。なお、変換対象とする第1ダイアグラムデータ150gについては、図26に示した第1ダイアグラムデータ150g(第1レベルテーブル151、第1遷移テーブル152)を用いて説明する。
まず、BDD変換部160fは、カレントレベルを「0」に設定し、BDDの初期状態であるノード「H」を、始点ノード集合に追加する。BDD変換部160fは、初期状態となるノード「H」を、レベル「0」と入力ビット数「N」(Nは自然数;ここでは一例として、N=4とする)とを第2レベルテーブル153に登録する。
BDD変換部160fは、始点ノード集合「H」の始点ノードに対して、始点ノードとして始点ノード「H」を、遷移ビット列として空列を、終点ノードとして始点ノード「H」をパススタックにスタックし、始点ノード集合を空にする(図26のステップS40)。ここで、パススタックは、BDD変換部160fが保持しており、始点ノード、遷移ビット列、終点ノードを対応付けて記憶している。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「空欄」、終点ノード「H」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「H」の論理値「0」および「1」でのそれぞれの遷移先ノード「G」、「F」を得、(遷移先ノードのレベル)−(終点ノード「H」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「F」のレベル「2」から終点ノード「H」のレベル「0」を差し引くと「2」となるので、1個の「*」がビット列「0」の後ろに追加される。そして、始点ノード「H」、ビット列「0」、終点ノード「F」をパススタックにスタックする。
一方、BDD変換部160fは、遷移先ノード「G」のレベル「1」から終点ノード「H」のレベル「0」を差し引くと「1」となるので、0個の「*」がビット列「1」の後ろに追加される。そして、始点ノード「H」、ビット列「1」、終点ノード「G」をパススタックにスタックする(図27のステップS41)。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「1」、終点ノード「G」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「G」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「E」、「F」を得、(遷移先ノードのレベル)−(終点ノード「H」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「F」のレベル「2」から終点ノード「G」のレベル「1」を差し引くと「1」となるので、0個の「*」がビット列「10」の後ろに追加される。そして、始点ノード「H」、ビット列「10」、終点ノード「F」をパススタックにスタックする。
一方、BDD変換部160fは、遷移先ノード「E」のレベル「3」から終点ノード「G」のレベル「1」を差し引くと「2」となるので、1個の「*」がビット列「11」の後ろに追加される。そして、始点ノード「H」、ビット列「11」、終点ノード「E」をパススタックにスタックする。(図27のステップS42)。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「11」、終点ノード「E」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「E」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「1」、「D」を得、(遷移先ノードのレベル)−(終点ノード「H」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「D」のレベル「4」から終点ノード「E」のレベル「3」を差し引くと「1」となるので、0個の「*」がビット列「110」の後ろに追加される。そして、始点ノード「H」、ビット列「110」、終点ノード「D」をパススタックにスタックする。
一方、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「E」のレベル「3」を差し引くと「5」となるので、4個の「*」がビット列「111」の後ろに追加される。そして、始点ノード「H」、ビット列「111」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする(図27のステップS43)。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「111」、終点ノード「1」をポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2レベルテーブル153に終点ノード「1」、レベル「2」、入力ビット数「4」を登録する。また、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「111」、遷移先(終点ノード)「1」を登録する。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「110」、終点ノード「D」をポップする。ここで、(終点ノード「D」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2レベルテーブル153に、終点ノード「D」、レベル「1」、入力ビット数「4」を登録する。また、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「110」、遷移先(終点ノード)「D」を登録する。なお、終点ノード「D」は、最終レベルのノードではないので、ノード「D」を始点ノード集合に登録する(図28のステップS44)。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「10」、終点ノード「F」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「F」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「E」、「B」を得、(遷移先ノードのレベル)−(終点ノード「F」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「E」のレベル「3」から終点ノード「F」のレベル「2」を差し引くと「1」となるので、0個の「*」がビット列「101」の後ろに追加される。そして、始点ノード「H」、ビット列「101」、終点ノード「E」をパススタックにスタックする。
続いて、BDD変換部160fは、始点ノード「H」、ビット列「101」、終点ノード「E」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「E」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「D」、「1」を得、(遷移先ノードのレベル)−(終点ノード「E」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部160fは、遷移先ノード「D」のレベル「4」から終点ノード「E」のレベル「3」を差し引くと「1」となるので、0個の「*」がビット列「1010」の後ろに追加される。そして、始点ノード「H」、ビット列「1010」、終点ノード「D」をパススタックにスタックする。
BDD変換部160fは、始点ノード「H」、ビット列「1010」、終点ノード「D」をパススタックからポップする。ここで、(終点ノード「D」のレベル)−(カレントレベル「0」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「H」、論理値「1010」、遷移先(終点ノード)「D」を登録する。
ところで、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「E」のレベル「3」を差し引くと「5」となるので、4個の「*」がビット列「1011」の後ろに追加される。そして、始点ノード「H」、ビット列「1011」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「1011」、終点ノード「1」をポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「1011」、遷移先(終点ノード)「1」を登録する。
また、BDD変換部160fは、遷移先ノード「B」のレベル「6」から終点ノード「F」のレベル「2」を差し引くと「4」となるので、3個の「*」がビット列「100」の後ろに追加される。そして、始点ノード「H」、ビット列「100」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「B」をパススタックにスタックする(図28のステップS45)。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「100」、終点ノード「B」をポップする。ここで、(終点ノード「B」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2レベルテーブル153に、終点ノード「B」、レベル「1」、入力ビット「2」を登録する。また、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「100」、遷移先(終点ノード)「B」を登録する。なお、終点ノード「B」は、最終レベルのノードではないので、ノード「B」を始点ノード集合に登録する(図28のステップS46)。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「0」、終点ノード「F」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「F」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「E」、「B」を得、(遷移先ノードのレベル)−(終点ノード「F」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「B」のレベル「6」から終点ノード「F」のレベル「2」を差し引くと「4」となるので、3個の「*」がビット列「00」の後ろに追加される。そして、始点ノード「H」、ビット列「0」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「B」をパススタックにスタックする。
BDD変換部160fは、パススタックから始点ノード「H」、遷移ビット列「0」、終点ノード「B」をポップする。ここで、(終点ノード「B」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「0」、遷移先(終点ノード)「B」を登録する。
一方、BDD変換部160fは、遷移先ノード「E」のレベル「3」から終点ノード「F」のレベル「2」を差し引くと「1」となるので、0個の「*」がビット列「01」の後ろに追加される。そして、始点ノード「H」、ビット列「01」、終点ノード「E」をパススタックにスタックする。
BDD変換部160fは、始点ノード「H」、ビット列「01」、終点ノード「E」をパススタックからポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「E」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「D」、「1」を得、(遷移先ノードのレベル)−(終点ノード「E」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「D」のレベル「4」から終点ノード「E」のレベル「3」を差し引くと「1」となるので、0個の「*」がビット列「010」の後ろに追加される。そして、始点ノード「H」、ビット列「010」、終点ノード「D」をパススタックにスタックする。
BDD変換部160fは、始点ノード「H」、ビット列「010」、終点ノード「D」をパススタックからポップする。ここで、(終点ノード「D」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「010」、遷移先(終点ノード)「D」を登録する。
一方、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「E」のレベル「3」を差し引くと「5」となるので、4個の「*」がビット列「011」の後ろに追加される。そして、始点ノード「H」、ビット列「011」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「H」、ビット列「011」、終点ノード「D」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「011」、遷移先(終点ノード)「1」を登録する(図28のステップS47)。
BDD変換部160fは、パススタックが空になったので、カレントレベル「0」にN(4)を加算し、カレントレベルを「4」に設定する。また、BDD変換部160fは、始点ノード集合の各始点ノード「D」、「B」に対応して、パススタックに情報をスタックする。具体的には、始点ノード「D」、遷移ビット列「空欄」、終端ノード「D」、始点ノード「B」、遷移ビット列「空欄」、終端ノード「B」をパススタックにスタックする(図29のステップS48)。
BDD変換部160fは、始点ノード集合を空にする。BDD変換部160fは、パススタックから始点ノード「D」、遷移ビット列「空欄」、終点ノード「D」をポップする。そして、ポップした遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「D」の論理値「0」および「1」でのそれぞれの遷移先ノード「B」、「C」を得、(遷移先ノードのレベル)−(終点ノード「D」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部160fは、遷移先ノード「B」のレベル「6」から終点ノード「D」のレベル「4」を差し引くと「2」となるので、1個の「*」がビット列「0」の後ろに追加される。そして、始点ノード「D」、ビット列「0」、終点ノード「B」をパススタックにスタックする。
また、BDD変換部160fは、遷移先ノード「C」のレベル「5」から終点ノード「D」のレベル「4」を差し引くと「1」となるので、0個の「*」がビット列「1」の後ろに追加される。そして、始点ノード「D」、ビット列「1」、終点ノード「C」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「1」、終点ノード「C」をパススタックからポップする。そして、ポップした遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「C」の論理値「0」および「1」でのそれぞれの遷移先ノード「B」、「1」を得、(遷移先ノードのレベル)−(終点ノード「C」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部160fは、遷移先ノード「B」のレベル「6」から終点ノード「C」のレベル「5」を差し引くと「1」となるので、0個の「*」がビット列「10」の後ろに追加される。そして、始点ノード「D」、ビット列「10」、終点ノード「B」をパススタックにスタックする。
一方、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「C」のレベル「5」を差し引くと「3」となるので、2個の「*」がビット列「11」の後ろに追加される。そして、始点ノード「D」、ビット列「11**」、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「11**」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「11**」、遷移先(終点ノード)「1」を登録する(図29のステップS49)。
BDD変換部160fは、パススタックから始点ノード「D」、遷移ビット列「10」、終点ノード「B」をポップする。そして、ポップした遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「B」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「A」を得、(遷移先ノードのレベル)−(終点ノード「B」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部160fは、遷移先ノード「0」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「100」の後ろに追加される。そして、始点ノード「D」、ビット列「100」、終点ノード「0」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「100」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「100」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部160fは、遷移先ノード「A」のレベル「7」から終点ノード「B」のレベル「6」を差し引くと「1」となるので、0個の「*」がビット列「101」の後ろに追加される。そして、始点ノード「D」、ビット列「101」、終点ノード「A」をパススタックにスタックする。(図29のステップS50)。
BDD変換部160fは、パススタックから始点ノード「D」、遷移ビット列「101」、終点ノード「A」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「A」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「1」を得る。BDD変換部160fは、遷移先ノード「0」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「1010」の後ろに追加される。そして、始点ノード「D」、ビット列「1010」、終点ノード「0」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「1010」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「1010」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「1011」の後ろに追加される。そして、始点ノード「D」、ビット列「1011」、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「1011」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「1011」、遷移先(終点ノード)「1」を登録する(図29のステップS51)。
BDD変換部160fは、パススタックから始点ノード「D」、遷移ビット列「0」、終点ノード「B」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部160fは、第1遷移テーブル152を参照し、ポップした終点ノード「B」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「A」を得る。BDD変換部160fは、遷移先ノード「0」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「00」の後ろに追加される。そして、始点ノード「D」、ビット列「0」、終点ノード「0」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「0」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「0」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部160fは、遷移先ノード「A」のレベル「7」から終点ノード「B」のレベル「6」を差し引くと「1」となるので、0個の「*」がビット列「01」の後ろに追加される。そして、始点ノード「D」、ビット列「01」、終点ノード「A」をパススタックにスタックする。(図30のステップS52)。
BDD変換部160fは、パススタックから始点ノード「D」、遷移ビット列「01」、終点ノード「A」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部160fは、第1遷移テーブル152を参照し、ポップした終点ノード「A」の論理値「0」および「1」でのそれぞれの遷移先ノード「1」、「0」を得る。BDD変換部160fは、遷移先ノード「0」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「010」の後ろに追加される。そして、始点ノード「D」、ビット列「010」、終点ノード「0」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「010」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「010」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「011」の後ろに追加される。そして、始点ノード「D」、ビット列「011」、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「011」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「011」、遷移先(終点ノード)「1」を登録する(図30のステップS53)。
BDD変換部160fは、パススタックから始点ノード「B」、遷移ビット列「空欄」、終点ノード「B」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部160fは、第1遷移テーブル152を参照し、ポップした終点ノード「B」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「A」を得る。遷移先ノード「A」のレベル「7」から終点ノード「B」のレベル「6」を差し引くと「1」となるので、0個の「*」がビット列「1」の後ろに追加される。そして、始点ノード「B」、ビット列「1」、終点ノード「A」をパススタックにスタックする。
一方、BDD変換部160fは、遷移先ノード「0」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「0」の後ろに追加される。そして、始点ノード「B」、ビット列「0」、終点ノード「0」をパススタックにスタックする。
BDD変換部160fは、始点ノード「B」、ビット列「0」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「B」、論理値「0」、遷移先(終点ノード)「0」を登録する(図30のステップS54)。
BDD変換部160fは、パススタックから始点ノード「B」、遷移ビット列「1」、終点ノード「A」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部160fは、第1遷移テーブル152を参照し、ポップした終点ノード「A」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「1」を得る。遷移先ノード「0」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「10」の後ろに追加される。そして、始点ノード「B」、ビット列「10」、終点ノード「0」をパススタックにスタックする。
BDD変換部160fは、始点ノード「B」、ビット列「10」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「B」、論理値「10」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部160fは、遷移先ノード「1」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「11」の後ろに追加される。そして、始点ノード「B」、ビット列「11」、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「B」、ビット列「11」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「B」、論理値「11」、遷移先(終点ノード)「1」を登録する(図30のステップS55)。
このように、BDD変換部160fは、ステップS40〜S55の処理を実行することにより、図26に示す第1ダイアグラムデータ150gを図25に示す第2ダイアグラムデータ150hに変換する。
図4の説明に戻ると、ダイアグラム実行部160gは、論理値テーブル150eと、第2ダイアグラムデータ150hとを比較して、最終的な論理値が「1(真)」であるか否かを判定する手段である。
そして、ダイアグラム実行部160gは、判定結果が「1」となったデータ種別に対応する返答項目を評価結果テーブル150iから検出し、検出した返答項目を検索結果データ150jとして記憶部150に記憶する。例えば、データ種別「Data3」の判定結果が「1」となる場合には、返答項目「第三開発部」を検索結果データ150jとして記憶する。
ここで、ダイアグラム実行部160gの処理を具体的に説明する。図31および図32は、本実施例1にかかるダイアグラム実行部160gの処理を説明するための図である。なお、前提条件として、第2ダイアグラムデータ150hのデータ構造を、図25に示したデータ構造とする。また、データ種別を、「Data0」、「Data1」とし、Data0の各論理値を「H=0、G=1、F=1、E=0、D=0、C=0、B=1、A=1」とし、Data1の論理値を「H=1、G=0、F=0、E=1、D=0、C=1、B=1、A=0」とする。また、入力順序は、第1レベルテーブル151(図26参照)のレベル順に従うため、「H、G、F、E、D、C、B、A」の順となる。
まず、ダイアグラム実行部160gが、「Data0」の真偽を判定する場合について説明する。ダイアグラム実行部160gは、初期ノードとなるノード「H」の入力ビット数が「4」であるため(図25の第2レベルテーブル153を参照)、「Data0」のビット列「01100011」のうち、上位4ビット「0110」と、第2遷移テーブル154とを比較し、遷移先ノード「D」を得る(図31のステップS60)。
そして、ダイアグラム実行部160gは、遷移先ノード「D」の入力ビット数が「4」であるため、残りのビット列「0011」と、第2遷移テーブル154とを比較し、遷移先ノード「1(真)」を得る。ダイアグラム実行部160gは、評価結果テーブル150iにおいて、データ種別「Data0」に対応する評価結果に「1(真)」を登録する(図31のステップS61)。
次に、ダイアグラム実行部160gが、「Data1」の真偽を判定する場合について説明する。ダイアグラム実行部160gは、初期ノードとなるノード「H」の入力ビット数が「4」であるため、「Data1」のビット列「10010110」のうち、上位4ビット「1001」と、第2遷移テーブル154とを比較し、遷移先ノード「B」を得る(図32のステップS62)。
そして、ダイアグラム実行部160gは、遷移先ノード「B」の入力ビット数が「2」であるため、残りのビット列「0110」のうち、下位2ビット「10」と、第2遷移テーブル154とを比較し、遷移先ノード「0(偽)」を得る。ダイアグラム実行部160gは、評価結果テーブル150iにおいて、データ種別「Data1」に対応する評価結果に「0(偽)」を登録する(図32のステップS63)。
検索結果出力部160hは、記憶部150に記憶された検索結果データ150jを端末装置60(図3参照)に送信する手段である。端末装置60は、検索結果データ150jを受信した場合に、受信した検索結果データ150jをモニタ画面に出力する。図33は、検索結果データを出力したモニタ画面の一例を示す図である。
次に、本実施例1にかかる検索装置100の処理手順について説明する。図33は、本実施例1にかかる検索装置100の処理手順を示すフローチャートである。同図に示すように、検索装置100は、検索クエリを受信し(ステップS101)、検索クエリ分解部160aが、分解検索クエリ150cを生成する(ステップS102)。
続いて、抽出結果テーブル生成部160bが、分解検索クエリ150cに対応するデータを抽出して抽出結果テーブル150dに登録し(ステップS103)、論理値算出部160cが論理値を算出して論理値テーブル150eに登録する(ステップS104)。
そして、BDD構築部160eがBDD入力順序を決定し(ステップS105)、BDD構築処理を実行する(ステップS106)。BDD変換部160fは、BDD変換処理を実行することにより、第1ダイアグラムデータ150gを第2ダイアグラムデータ150hに変換する(ステップS107)。
ダイアグラム実行部160gは、論理式判定ダイアグラム実行処理を実行し(ステップS108)、評価結果データを格納し(ステップS109)、検索結果出力部160hが、返答項目出力処理を実行する(ステップS110)。
次に、図34のステップS106に示したBDD構築処理について説明する。図35は、本実施例1にかかるBDD構築処理の処理手順を示すフローチャートである。図35に示すように、BDD構築部160eは、現在のレベルを0に設定し(ステップS121)、逆ポーランド表記の初めの文字を読み出し(ステップS122)、読み出した文字が論理変数か否かを判定する(ステップS123)。
文字が論理変数である場合には(ステップS124,Yes)、BDD構築部160eは、論理変数対応処理を実行し(ステップS125)、ステップS136に移行する。一方、文字が論理変数でない場合には(ステップS124,No)、文字が「NOT」であるか否かを判定する(ステップS126)。
文字が「NOT」の場合には(ステップS127,Yes)、BDD構築部160eは、NOT対応処理を実行し(ステップS128)、ステップS136に移行する。一方、文字が「NOT」でない場合には(ステップS127,No)、文字が「AND」であるか否かを判定する(ステップS129)。
文字が「AND」の場合には(ステップS130,Yes)、BDD構築部160eは、AND対応処理を実行し(ステップS131)、ステップS136に移行する。一方、文字が「AND」でない場合には(ステップS130,No)、文字が「OR」であるか否かを判定する(ステップS132)。
文字が「OR」ではない場合には(ステップS133,No)、BDD構築部160eは、エラーを出力部120に出力する(ステップS134)。一方、文字が「OR」の場合には(ステップS133,Yes)、OR対応処理を実行する(ステップS135)。
続いて、BDD構築部160eは、次の文字が存在するか否かを判定し(ステップS136)、次の文字が存在する場合には(ステップS137,Yes)、次の文字を読み出し(ステップS138)、ステップS123に移行する。一方、次の文字が存在しない場合には(ステップS137,No)、終了処理を実行する(ステップS139)。
次に、図35のステップS125に示した論理変数対応処理について説明する。図36は、本実施例1にかかる論理変数対応処理の処理手順を示すフローチャートである。図36に示すように、BDD構築部160eは、新しいノード変数を定義し(ステップS141)、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリを第1レベルテーブル151に追加する(ステップS142)。
そして、BDD構築部160eは、定義したノード変数を先頭スタックにプッシュし(ステップS143)、定義したノード変数1つからなる集合をTrueスタック、Falseスタックにプッシュし(ステップS144)、現在のレベルに1を加算する(ステップS145)。
次に、図35のステップS128に示したNOT対応処理について説明する。図37は、本実施例1にかかるNOT対応処理の処理手順を示すフローチャートである。図37に示すように、BDD構築部160eは、新しくユニークなノード変数T,Fを定義し(ステップS151)、Trueスタックをポップし、ポップした集合内の各変数において、ノード変数、論理値1、遷移先ノード変数Fからなるエントリを第1遷移テーブル152に追加する(ステップS152)。
そして、BDD構築部160eは、Falseスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値0、遷移先ノード変数Tからなるエントリを第1遷移テーブル152に追加し(ステップS153)、Trueスタックにノード変数Tからなる集合をプッシュし、Falseスタックにノード変数Fからなる集合をプッシュする(ステップS154)。
次に、図35のステップS131に示したAND対応処理について説明する。図38は、本実施例1にかかるAND対応処理の処理手順を示すフローチャートである。図38に示すように、BDD構築部160eは、先頭スタックをポップし、ポップしたノードを変数Aに設定し(ステップS161)、Trueスタックを2回ポップし、1回目にポップした集合をTrueスタックにプッシュする(ステップS162)。
そして、BDD構築部160eは、2回目にポップした集合内の各ノード変数をノード項目として、論理値1、遷移先ノード変数Aと合わせたエントリを第1遷移テーブル152に追加し(ステップS163)、Falesスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合をFalesスタックにプッシュする(ステップS164)。
次に、図35のステップS135に示したOR対応処理について説明する。図39は、本実施例1にかかるOR対応処理の処理手順を示すフローチャートである。図39に示すように、BDD構築部160eは、先頭スタックをポップし、ポップしたノードを変数Aに設定し(ステップS171)、Falseスタックを2回ポップし、1回目にポップした集合をFalseスタックにプッシュする(ステップS172)。
そして、BDD構築部160eは、2回目にポップした集合内の各ノード変数をノード項目として、論理値0、遷移先ノード変数Aと合わせたエントリを第1遷移テーブル152に追加し(ステップS173)、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合をTrueスタックにプッシュする(ステップS174)。
次に、図35のステップS139に示した終了処理について説明する。図40は、本実施例1にかかる終了処理の処理手順を示すフローチャートである。図40に示すように、BDD構築部160eは、新しいノード変数0,1を定義し、定義したノード変数、現在のレベル、論理変数NULLからなるエントリを第1レベルテーブル151に追加し(ステップS181)、Trueスタックをポップし、ポップした集合内の各ノード変数において論理値1と遷移先ノード変数1とを合わせたエントリを第1遷移テーブル152に追加する(ステップS182)。
そして、BDD構築部160eは、Falesスタックをポップし、ポップした集合内の各ノード変数において、論理値0と、遷移先ノード変数0とを合わせたエントリを第1遷移テーブル152に追加し(ステップS183)、第1遷移テーブル152において、遷移先項目がノード変数T,Fとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目として、エントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする(ステップS184)。
次に、図34のステップS107に示したBDD変換処理について説明する。図41および図42は、本実施例1にかかるBDD変換処理の処理手順を示すフローチャートである。図41に示すように、BDD変換部160fは、カレントレベルを0に設定し(ステップS201)、BDDの初期状態であるノードを始点ノード集合に追加する(ステップS202)。
そして、BDD変換部160fは、初期状態となる始点ノードを、レベル0と入力ビット数N(例えば、4)とともに第2レベルテーブル153に登録し(ステップS203)、始点ノード集合の各始点ノードに対して、始点ノードとして始点ノードを、遷移ビット列として空列を、終点ノードとして始点ノードをパススタックにスタックし(ステップS204)、始点ノード集合を空に設定する(ステップS205)。
続いて、BDD変換部160fは、パススタックから始点ノード、遷移ビット列、終点ノードをポップし(ステップS206)、終点ノードのレベルからカレントレベルを減算し、減算した値がN以上であるか否かを判定する(ステップS207)。
減算した値がN未満である場合には(ステップS208,No)、BDD変換部160fは、ポップした遷移ビット列を複製し、0および1をそれぞれ加え、第1遷移テーブル152を参照し、ポップしたノードの論理値0および1でのそれぞれの遷移先のノードを取得し、(遷移先ノードのレベル)−(終点ノードのレベル)−1分の「*」を遷移ビット列にそれぞれ更に追加し、取得した各遷移先ノードをそれぞれの終点ノードとして、それぞれパススタックにスタックし(ステップS209)、ステップS206に移行する。
一方、減算した値がN以上である場合には(ステップS208,Yes)、終点ノードが第2レベルテーブル153に存在するか否かを判定し(ステップS210)、存在しない場合には(ステップS211,No)、第2レベルテーブル153にノードを終点ノードとし、(終点ノードのレベル)÷Nをレベルとし、N−(割り算の余り)を入力ビット数とするエントリを第2遷移テーブル154に登録し(ステップS212)、ステップS213に移行する。
一方、終点ノードが第2レベルテーブル153に存在する場合には(ステップS211,Yes)、第2遷移テーブル154に、ノードを始点ノードとし、論理値を遷移ビット列の先頭Nビットとし、遷移先を終点ノードとするエントリを登録する(ステップS213)。
BDD変換部160fは、終点ノードが最終レベルではない場合に、終点ノードを始点ノードに追加し(ステップS214)、パススタックが空か否かを判定し(ステップS215)、パススタックが空ではない場合には(ステップS216,No)、ステップS206に移行する。
一方、パススタックが空の場合には(ステップS216,Yes)、カレントレベルにNを加算し(ステップS217)、カレントレベルが最終レベル以上か否かを判定し(ステップS218)、最終レベル未満の場合には(ステップS219,No)、ステップS204に移行する。一方、カレントレベルが最終レベル以上の場合には(ステップS219)、BDD変換処理を終了する。
次に、図34のステップS108に示した論理式判定ダイアグラム実行処理について説明する。図43は、本実施例1にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。図43に示すように、抽出結果テーブル生成部160bが抽出結果テーブル150dを作成し(ステップS221)、論理値算出部160cが論理値テーブル150eを作成する(ステップS222)。
そして、ダイアグラム実行部160gは、初期ノードを現在のノードに設定し(ステップS223)、第2レベルテーブル153を参照し、現在のノードのレベルを取得し(ステップS224)、レベルが最終レベルか否かを判定する(ステップS225)。
現在のレベルが最終レベルではない場合には(ステップS226,No)、論理値テーブル150eを参照し、現在のノードに対応する入力ビット列を取得する(ステップS227)。また、ダイアグラム実行部160gは、第2遷移テーブル154を参照し、遷移先の情報を取得し(ステップS228)、現在のノードを遷移先のノードに設定し(ステップS229)、ステップS224に移行する。
一方、現在のレベルが最終レベルの場合には(ステップS226,Yes)、ダイアグラム実行部160gは、ノードに割り当てられている真偽値を評価結果テーブル150iに登録する(ステップS230)。そして、ダイアグラム実行部160gは、全ての文書データを選択したか否かを判定し(ステップS231)、全ての文書データを選択していない場合には(ステップS232,No)、ステップS223に移行する。全ての文書データを選択した場合には(ステップS232,Yes)、論理式判定ダイアグラム実行処理を終了する。
次に、図34のステップS110に示した返答項目出力処理について説明する。図44は、本実施例1にかかる返答項目出力処理の処理手順を示すフローチャートである。図44に示すように、検索結果出力部160hは、評価結果テーブル150iを参照し(ステップS241)、評価結果が真(1)であるか否かを判定する(ステップS242)。
評価結果が偽の場合には(ステップS243,No)、ステップS246に移行する。一方、評価結果が真の場合には(ステップS243,Yes)、抽出結果テーブル150dから、対応する返答項目を抽出し(ステップS244)、返答項目を出力する(ステップS245)。
そして、検索結果出力部160hは、次の候補が存在するか否かを判定し(ステップS246)、次の候補が存在する場合には(ステップS247,Yes)、ステップS241に移行する。一方、次に候補が存在しない場合には(ステップS247,No)、返答項目出力処理を終了する。
上述してきたように、本実施例1にかかる検索装置100は、検索クエリを受け付けた場合に、BDD構築部160eが、BDD法に基づいて、第1ダイアグラムデータ150gを作成する。そして、BDD変換部160fが、第1ダイアグラムデータ150gに基づいて、起点となるノードから所定複数レベル先の到達ノードまで到達する各レベルの変数の真偽条件をビット列表記した第2ダイアグラムデータ150hを作成し、ダイアグラム実行部160gが、第2ダイアグラムデータ150hと、論理値テーブル150eとを比較することにより、検索クエリを評価するので、多ビット毎にノードの遷移先を判定可能とすることができ、複雑な検索クエリを評価する場合にでも、評価に要する処理時間を削減することができる。
次に、本実施例2にかかる検索装置の概要及び特徴について説明する。図45−1は、本実施例2にかかる検索装置の概要および特徴を説明するための図である。本実施例2にかかる検索装置は、上述した実施例1の検索装置と同様にして、第1の2分木を変換して、多ビット(本実施例2ではビット列の桁を固定)毎にノードの遷移先を判定できる第2の2分木を生成する。
そして、本実施例2にかかる検索装置は、更に、遷移先を判定するビット列にダミー値「*」を挿入することで、最終的な真偽を判定するまでに、比較対象となるビット列の桁を統一する。また、本実施例2にかかる検索装置は、各ノード間にダミーノードを挿入することで、初期ノードから最終レベルのノードに至るまでの遷移回数を固定する。
ここで、実施例1に示したように、第2の2分木(図2の下段参照)を作成すると、最終的な真偽を判定するまでに、比較対象となるビット列の桁が変動するため、検索装置は、遷移先のノード毎に比較するビット列の桁数を判定する必要があり、必ずしも効率的に真偽判定を実施することができない。
しかしながら、本実施例2にかかる検索装置は、ダミー値「*」を挿入することで、最終的な真偽を判定するまでのビット列の桁を固定することができ、遷移先のノード毎に比較するビット列の桁を判定する必要を無くし、効率的に真偽判定を実施することを可能にする。また、各ノード間にダミーノードを挿入することで、初期ノードから最終レベルのノードに至るまでの遷移回数を固定でき、真偽判定にかかる制御を容易にする。
図45−1の第2の2分木と、図2の第2の2分木とを比較すると、図45−1では、ノード「H」と、ノード「1」との間にダミーノード「1’」を挿入すると共に、ノード「B」からノード「0」に遷移するビット列の上位に「**」を挿入することで、最終的な真偽を判定するまでに利用するビット列の桁を「4」に統一し、遷移回数を「2」に統一している。一方、図2では、最終的な真偽を判定するまでに利用する比較対象となるビット列の桁が「4」または「2」となり、遷移回数が「1」または「2」となるので、図2の第2の2分木のほうが、図45の第2の2分木よりも、真偽判定にかかる処理が複雑になってしまう。
次に、ビット列の桁数を所定桁数に統一する場合の検索装置の処理の概要を説明する。図45−2は、ビット列の桁数を所定桁数に統一する場合の処理の概要を説明するための図である。ここでは、図45−2を用いて、3つのケースについて説明する。
まず、第1のケースとして、第1の到達変数のレベルが所定レベルを超えており、第1の到達変数を起点変数とした次の第2到達変数に遷移するビット列を作成する場合にについて説明する。ここでは、説明の便宜上、第1の到達変数をノード「B(レベル6)」、所定レベル4(ビット列を4桁に統一する場合)、第2の到達変数をノード「1(レベル8)」とする。
検索装置は、第1の到達変数のレベル「6」から所定レベル「4」を差し引いた数「2」のダミー値「**」をビット列の先頭ビットに挿入する。すなわち、第1の到達変数から第2の到達変数まで遷移するビット列「11」の先頭ビットにダミービット「**」を挿入することで、ビット列「**11」を作成し、ビット列の桁を4に統一する。
続いて、第2のケースとして、起点変数と到達変数との間に複数の中間変数が含まれており、起点変数と中間変数のレベル差、および隣接する中間変数のレベル差が1で、到達変数のレベルが所定レベルを超えている場合に、起点変数から到達変数まで遷移するビット列を生成する場合について説明する。
ここでは、説明の便宜上、起点変数をノード「H(レベル0)」、中間変数をノード「G(レベル1)」、「F(レベル2)」、到達変数「B(レベル6)」、所定レベル4(ビット列を4桁に統一する場合)とする。
検索装置は、所定レベル「4」から到達変数(ノードB)に遷移する一つ前の中間変数(ノードF)のレベル2を差し引き、差し引いた値から更に1を差し引いた数「1」のダミー値「*」を起点変数から到達変数まで遷移するビット列「100」の後ろに挿入することで、ビット列「100*」を作成し、ビット列の桁を4に統一する。
続いて、第3のケースとして、起点変数と到達変数との間に複数の中間変数が含まれており、遷移先の変数のレベルと遷移元の変数のレベルとのレベル差が2以上で、到達変数のレベルが所定レベルを超えている場合に、起点変数から到達変数まで遷移するビット列を生成する場合について説明する。
ここでは、説明の便宜上、起点変数をノード「H(レベル0)」、中間変数をノード「F(レベル2)」、到達変数をノード「B(レベル6)」、所定レベル4(ビット列を4桁に統一する場合)とする。
検索装置は、遷移先の変数のレベルから遷移元の変数のレベルを差し引き、差し引いた値から更に1を差し引いた数のダミー値を遷移元の変数から遷移先の変数まで遷移するビット列の後ろに挿入する。具体的には、遷移先の変数(ノードF)のレベル2から遷移元の変数(ノードH)のレベル0を差し引き、差し引いた値から更に1を差し引いた数「1」を遷移元の変数(ノードH)から遷移先の変数(ノードF)に遷移するビット列「0」に挿入してビット列「0*」を作成する。
なお、起点変数(ノードH)から到達変数(ノードB)に遷移するまでのビット列(中間変数をノードFとする)は、起点変数(ノードH)から中間変数(ノードF)に遷移するビット列「0*」に、中間変数(ノードF)から到達変数(ノードB)に遷移するビット「0」を付加したビット列「0*0」となる。そして、検索装置は、ビット列の桁を「4」に統一するために、ビット列「0*0」の後ろに「*」を付与して、起点変数(ノードH)から到達変数(ノードB)に遷移するビット列「0*0*」を作成することで、ビット列の桁を4に統一する。
次に、本実施例2にかかる検索装置の構成について説明する。図46は、本実施例2にかかる検索装置200の構成を示す機能ブロック図である。なお、本実施例2にかかる検索装置200を備えた検索システムの構成は、実施例1の検索システムの構成と同様である。
図46に示すように、この検索装置200は、入力部210と、出力部220と、通信制御IF部230と、入出力制御IF部240と、記憶部250と、制御部260とを有する。
入力部210は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ(出力部220)も、マウスと協働してポインティングデバイス機能を実現する。
出力部220は、各種の情報を出力する手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成される。通信制御IF部230は、主に端末装置60との間における通信を制御する手段である。なお、入出力制御IF部240は、入力部210、出力部220、通信制御IF部230、記憶部250、制御部260によるデータの入出力を制御する手段である。
記憶部250は、制御部260による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部250は、XMLデータ250aと、検索クエリ250bと、分解検索クエリ250cと、抽出結果テーブル250dと、論理値テーブル250eと、変換論理式データ250fと、第1ダイアグラムデータ250gと、第2ダイアグラムデータ250hと、評価結果テーブル250iと、検索結果データ250jとを有する。
ここで、XMLデータ250aは、要素識別子「<」、「</」等により要素が区切られた階層構造を有する文書データである。このXMLデータ250aのデータ構造は、図5に示したXMLデータ150aのデータ構造と同様である。
検索クエリ250bは、XMLデータ250aから照合位置のデータを取り出すためのデータである。この検索クエリ250bのデータ構造は、図6に示した検索クエリ150bのデータ構造と同様である。
分解検索クエリ250cは、検索クエリ250bが検索クエリ分解部260a(後述する)によって分解された結果得られるデータである。この分解検索クエリ250cのデータ構造は、図7に示した分解検索クエリ150cのデータ構造と同様である。
抽出結果テーブル250dは、評価式(図7のq1,q2参照)の評価対象となる情報と、検索クエリ250bの評価結果が真であった場合に、端末装置60に返答する項目を管理するテーブルである。この抽出結果テーブル250dのデータ構造は、図8に示した抽出結果テーブル150dのデータ構造と同様である。
論理値テーブル250eは、各評価式の評価結果を管理するテーブルである。この論理値テーブル250eのデータ構造は、図9に示した論理値テーブル150eのデータ構造と同様である。
変換論理式データ250fは、論理式(図7参照)が、論理式変換部260d(後述する)によって逆ポーランド表記に変換されたデータである。第1ダイアグラムデータ250gは、BDD構築部260e(後述する)によって作成されるデータである。この第1ダイアグラムデータ250gのデータ構造は、図10に示した第1ダイアグラムデータ150gと同様である。なお、本実施例2において、第1ダイアグラムデータ250gは、第1レベルテーブル251および第1遷移テーブル252を有する。
第2ダイアグラムデータ250hは、第1ダイアグラムデータ250gが、BDD変換部260f(後述する)によって変換されたデータである。この第2ダイアグラムデータ250hは、第2遷移テーブル253を有しており、第2遷移テーブル253によって定義される2分木は、多ビット毎に評価を行うことができる。
評価結果テーブル250iは、各データ種別(例えば、Data0〜2)に対する評価結果を管理するテーブルである。この評価結果テーブル250iのデータ構造は、図11に示した評価結果テーブル150iのデータ構造と同様である。
検索結果データ250jは、XMLデータ250aに対する検索クエリ250bの検索結果を記憶するデータである。この検索結果データ250jのデータ構造は、図12に示した検索結果データ150jのデータ構造と同様である。
制御部260は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段である。特に本発明に密接に関連するものとしては、図46に示すように、検索クエリ分解部260aと、抽出結果テーブル生成部260bと、論理値算出部260cと、論理式変換部260dと、BDD構築部260eと、BDD変換部260fと、ダイアグラム実行部260gと、検索結果出力部260hとを有する。
このうち、検索クエリ分解部260aは、端末装置60から検索クエリを受信した場合に、受信した検索クエリを検索クエリ250bとして記憶部250に記憶すると共に、周知の手法を用いて、検索クエリ250bから分解検索クエリ250cを生成する手段である。
抽出結果テーブル生成部250bは、分解検索クエリ250cに含まれる評価式に基づいて、第1〜n(n>1)論理変数および返答項目をXMLデータ250aから抽出し、抽出結果テーブル250dを生成する手段である。
論理値算出部260cは、分解検索クエリ250cの評価式と、抽出結果テーブル250dとを比較することにより、評価式の論理値を算出する手段である。論理値算出部260cは、算出結果を論理値テーブル250eに登録する。
論理式変換部260dは、逆ポーランド表記を用いることにより、検索クエリの論理式(例えば、Q=q1 and q2)を変換する手段である。論理式変換部260dは、論理式「q1&q2」を、逆ポーランド表記を用いて変換すると、「q1q2&」となる。論理式変換部260dは、変換した論理式のデータを、変換論理式データ250fとして記憶部250に記憶する。
BDD構築部260eは、変換論理式データ250fに基づいて、第1ダイアグラムデータ250gを生成する手段である。BDD構築部260eは、変換論理式データ250f(逆ポーランド表記の論理式)の文字を先頭から順次読み出し、読み出した文字(論理演算子、論理変数)に応じて、第1レベルテーブル251、第1遷移テーブル252に各種の情報を登録する。なお、BDD構築部260eの具体的な処理の内容は、実施例1に示したBDD構築部260eと同様であるため説明を省略する。
BDD変換部260fは、第1の2分木を第2の2分木(図45参照)となるように、第1ダイアグラムデータ250gを変換して第2ダイアグラムデータ250hを生成する手段である。図47は、本実施例2にかかる第2ダイアグラムデータ250hのデータ構造の一例を示す図である。ただし、図26に示す第1ダイアグラムデータ250gを変換したものが、図47に示す第2ダイアグラムデータ250hとなる。
図47に示すように、この第2ダイアグラムデータ250hは、第2遷移テーブル253を有する。第2遷移テーブル253は、ノードと、各ノードに入力される論理値と、論理値に対応するノードの遷移先を管理するテーブルである。
例えば、第2遷移テーブル253の1段目では、ノード「H」に入力されるビット列が「111(1101あるいは1111)」の場合に、ノード「1’」に遷移する旨の情報が登録されている。なお、図47に示す第2遷移テーブル253によって、図45に示す2分木(第2の2分木)が定義される。
続いて、具体例を用いて、BDD変換部260fの処理について説明する。図48〜図50は、本実施例2にかかるBDD変換部260fの処理を説明するための図である。図48〜図50で説明する処理を実行することにより、図26に示した第1ダイアグラムデータから、図47に示した第2ダイアグラムデータ250hが作成され、多ビット毎に遷移先のノードを判定することが可能となる。また、ビット列および遷移回数が統一されるので、データ検索時に検索装置200にかかる負担が軽減される。まず、図48に示すように、BDD変換部260fは、カレントレベルを「0」に設定し、BDDの初期状態であるノード「H」を始点ノード集合に追加する。
そして、BDD変換部260fは、始点ノード集合「H」の始点ノードに対して、始点ノードとして始点ノード「H」を、遷移ビット列として「空欄」を、終点ノードとして始点ノード「H」をパススタックにスタックし、始点ノード集合を空にする。ここで、パススタックは、BDD変換部260fが保持しており、始点ノード、遷移ビット列、終点ノードを対応付けて記憶している。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「空欄」、終点ノード「H」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部260fは、第1遷移テーブル252を参照し、ポップした終点ノード「H」の論理値「0」および「1」でのそれぞれの遷移先ノード「G」、「F」を得、(遷移先ノードのレベル)−(終点ノード「H」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「F」のレベル「2」から終点ノード「H」のレベル「0」を差し引くと「2」となるので、1個の「*」がビット列「0」の後ろに追加される。そして、始点ノード「H」、ビット列「0」、終点ノード「F」をパススタックにスタックする。
一方、BDD変換部260fは、遷移先ノード「G」のレベル「1」から終点ノード「H」のレベル「0」を差し引くと「1」となるので、0個の「*」がビット列「1」の後ろに追加される。そして、始点ノード「H」、ビット列「1」、終点ノード「G」をパススタックにスタックする(図27のステップS40のパススタックと同様)。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「1」、終点ノード「G」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「G」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「E」、「F」を得、(遷移先ノードのレベル)−(終点ノード「H」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「F」のレベル「2」から終点ノード「G」のレベル「1」を差し引くと「1」となるので、0個の「*」がビット列「10」の後ろに追加される。そして、始点ノード「H」、ビット列「10」、終点ノード「F」をパススタックにスタックする。
一方、BDD変換部260fは、遷移先ノード「E」のレベル「3」から終点ノード「G」のレベル「1」を差し引くと「2」となるので、1個の「*」がビット列「11」の後ろに追加される。そして、始点ノード「H」、ビット列「11」、終点ノード「E」をパススタックにスタックする(図27のステップS41のパススタックと同様)。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「11」、終点ノード「E」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「E」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「1」、「D」を得、(遷移先ノードのレベル)−(終点ノード「H」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「D」のレベル「4」から終点ノード「E」のレベル「3」を差し引くと「1」となるので、0個の「*」がビット列「110」の後ろに追加される。そして、始点ノード「H」、ビット列「110」、終点ノード「D」をパススタックにスタックする。
一方、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「E」のレベル「3」を差し引くと「5」となるので、4個の「*」がビット列「111」の後ろに追加される。そして、始点ノード「H」、ビット列「111」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする(図27のステップS43のパススタックと同様)。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「111」、終点ノード「1」をポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部260fは、第2遷移テーブル253に、始点ノード「H」、論理値「111」、遷移先(終点ノード)「1」を登録すると共に、終点ノード「1」を始点ノード集合に追加する。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「110」、終点ノード「D」をポップする。ここで、(終点ノード「D」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部260fは、第2遷移テーブル253に、始点ノード「H」、論理値「110」、遷移先(終点ノード)「D」を登録すると共に、終点ノード「D」を始点ノード集合に登録する(図48のステップS70)。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「10」、終点ノード「F」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「F」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「E」、「B」を得、(遷移先ノードのレベル)−(終点ノード「F」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「E」のレベル「3」から終点ノード「F」のレベル「2」を差し引くと「1」となるので、0個の「*」がビット列「101」の後ろに追加される。そして、始点ノード「H」、ビット列「101」、終点ノード「E」をパススタックにスタックする。
続いて、BDD変換部260fは、始点ノード「H」、ビット列「101」、終点ノード「E」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「E」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「D」、「1」を得、(遷移先ノードのレベル)−(終点ノード「E」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部260fは、遷移先ノード「D」のレベル「4」から終点ノード「E」のレベル「3」を差し引くと「1」となるので、0個の「*」がビット列「1010」の後ろに追加される。そして、始点ノード「H」、ビット列「1010」、終点ノード「D」をパススタックにスタックする。
BDD変換部260fは、始点ノード「H」、ビット列「1010」、終点ノード「D」をパススタックからポップする。ここで、(終点ノード「D」のレベル)−(カレントレベル「0」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「H」、論理値「1010」、遷移先(終点ノード)「D」を登録する。
ところで、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「E」のレベル「3」を差し引くと「5」となるので、4個の「*」がビット列「1011」の後ろに追加される。そして、始点ノード「H」、ビット列「1011」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「1011」、終点ノード「1」をポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部260fは、第2遷移テーブル253に、始点ノード「H」、論理値「1011」、遷移先(終点ノード)「1」を登録する。
また、BDD変換部260fは、遷移先ノード「B」のレベル「6」から終点ノード「F」のレベル「2」を差し引くと「4」となるので、3個の「*」がビット列「100」の後ろに追加される。そして、始点ノード「H」、ビット列「100」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「B」をパススタックにスタックする(図48のステップS71)。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「100」、終点ノード「B」をポップする。ここで、(終点ノード「B」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部260fは、第2遷移テーブル253に、始点ノード「H」、論理値「100」、遷移先(終点ノード)「B」を登録する。また、BDD変換部260fは、終点ノード「B」を始点ノード集合に登録する(図48のステップS72)。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「0」、終点ノード「F」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「F」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「E」、「B」を得、(遷移先ノードのレベル)−(終点ノード「F」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「B」のレベル「6」から終点ノード「F」のレベル「2」を差し引くと「4」となるので、3個の「*」がビット列「00」の後ろに追加される。そして、始点ノード「H」、ビット列「0」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「B」をパススタックにスタックする。
BDD変換部260fは、パススタックから始点ノード「H」、遷移ビット列「0」、終点ノード「B」をポップする。ここで、(終点ノード「B」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「0」、遷移先(終点ノード)「B」を登録する。
一方、BDD変換部260fは、遷移先ノード「E」のレベル「3」から終点ノード「F」のレベル「2」を差し引くと「1」となるので、0個の「*」がビット列「01」の後ろに追加される。そして、始点ノード「H」、ビット列「01」、終点ノード「E」をパススタックにスタックする。
BDD変換部260fは、始点ノード「H」、ビット列「01」、終点ノード「E」をパススタックからポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「E」の遷移先ノードの論理値「0」および「1」でのそれぞれの遷移先ノード「D」、「1」を得、(遷移先ノードのレベル)−(終点ノード「E」のレベル)−1個の「*」を各遷移ビット列に追加する。遷移先ノード「D」のレベル「4」から終点ノード「E」のレベル「3」を差し引くと「1」となるので、0個の「*」がビット列「010」の後ろに追加される。そして、始点ノード「H」、ビット列「010」、終点ノード「D」をパススタックにスタックする。
BDD変換部260fは、始点ノード「H」、ビット列「010」、終点ノード「D」をパススタックからポップする。ここで、(終点ノード「D」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部260fは、第2遷移テーブル254に、始点ノード「H」、論理値「010」、遷移先(終点ノード)「D」を登録する。
一方、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「E」のレベル「3」を差し引くと「5」となるので、4個の「*」がビット列「011」の後ろに追加される。そして、始点ノード「H」、ビット列「011」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「H」、ビット列「011」、終点ノード「D」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「0」)がN(4)以上であるため、BDD変換部160fは、第2遷移テーブル154に、始点ノード「H」、論理値「011」、遷移先(終点ノード)「1」を登録する(図48のステップS73)。
BDD変換部260fは、カレントレベルを「4」に設定し、始点ノード集合からノード「B」を取り出して始点ノードとする。そして、(始点ノード「B」のレベル「6」)−(カレントレベル「4」)個の「*」を遷移ビット列とする。BDD変換部260fは、始点ノード「B」、遷移ビット列「**」、終点ノード「B」をパススタックにスタックする。
BDD変換部260fは、始点ノード集合からノード「D」を取り出して始点ノードとする。そして、(始点ノード「D」のレベル「4」)−(カレントレベル「4」)個の「*」を遷移ビット列とする(この場合は、差分した結果が0となるので、遷移ビット列は空欄となる)。BDD変換部260fは、始点ノード「D」、遷移ビット列「空欄」、終点ノード「D」をパススタックにスタックする。
BDD変換部260fは、始点ノード集合からノード「1」を取り出して始点ノードとする。ここで、始点ノード「1」のレベルとカレントレベルとの差分が、4(N)以上となるので、BDD変換部260fは、ノード「1」のダミーノード「1’」を定義する。そして、BDD変換部260fは、第2遷移テーブル253を参照し、遷移先がノード「1」となっている項目をダミーノード「1’」に書き換える。
また、BDD変換部260fは、始点ノードとしてダミーノード「1’」を、遷移ビット列として「*」N(本実施例2では4)ビット(****)を、終点ノードとして始点ノード「1」をパススタックにスタックする(図49のステップS74)。
BDD変換部260fは、パススタックから始点ノード「1’」、遷移ビット列「****」、終点ノード「1」をポップし、始点ノード「1’」、遷移ビット列「****」、終点ノード「1」を、第2遷移テーブル253に登録する。
BDD変換部260fは、パススタックから始点ノード「D」、遷移ビット列「空欄」、終点ノード「D」をポップする。そして、ポップした遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「D」の論理値「0」および「1」でのそれぞれの遷移先ノード「B」、「C」を得、(遷移先ノードのレベル)−(終点ノード「D」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部260fは、遷移先ノード「B」のレベル「6」から終点ノード「D」のレベル「4」を差し引くと「2」となるので、1個の「*」がビット列「0」の後ろに追加される。そして、始点ノード「D」、ビット列「0」、終点ノード「B」をパススタックにスタックする。
また、BDD変換部260fは、遷移先ノード「C」のレベル「5」から終点ノード「D」のレベル「4」を差し引くと「1」となるので、0個の「*」がビット列「1」の後ろに追加される。そして、始点ノード「D」、ビット列「1」、終点ノード「C」をパススタックにスタックする。
BDD変換部260fは、始点ノード「D」、ビット列「1」、終点ノード「C」をパススタックからポップする。そして、ポップした遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「C」の論理値「0」および「1」でのそれぞれの遷移先ノード「B」、「1」を得、(遷移先ノードのレベル)−(終点ノード「C」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部260fは、遷移先ノード「B」のレベル「6」から終点ノード「C」のレベル「5」を差し引くと「1」となるので、0個の「*」がビット列「10」の後ろに追加される。そして、始点ノード「D」、ビット列「10」、終点ノード「B」をパススタックにスタックする。
一方、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「C」のレベル「5」を差し引くと「3」となるので、2個の「*」がビット列「11」の後ろに追加される。そして、始点ノード「D」、ビット列「11**」、終点ノード「1」をパススタックにスタックする。
BDD変換部260fは、始点ノード「D」、ビット列「11**」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「D」、論理値「11**」、遷移先(終点ノード)「1」を登録する。また、始点ノード集合にノード「1」を登録する(図49のステップS75)。
BDD変換部260fは、パススタックから始点ノード「D」、遷移ビット列「10」、終点ノード「B」をポップする。そして、ポップした遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル152を参照し、ポップした終点ノード「B」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「A」を得、(遷移先ノードのレベル)−(終点ノード「B」のレベル)−1個の「*」を各遷移ビット列に追加する。
BDD変換部260fは、遷移先ノード「0」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「100」の後ろに追加される。そして、始点ノード「D」、ビット列「100」、終点ノード「0」をパススタックにスタックする。
BDD変換部260fは、始点ノード「D」、ビット列「100」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「D」、論理値「100」、遷移先(終点ノード)「0」を登録する。また、始点ノード集合にノード「0」を登録する。
一方、BDD変換部260fは、遷移先ノード「A」のレベル「7」から終点ノード「B」のレベル「6」を差し引くと「1」となるので、0個の「*」がビット列「101」の後ろに追加される。そして、始点ノード「D」、ビット列「101」、終点ノード「A」をパススタックにスタックする(図49のステップS76)。
BDD変換部260fは、パススタックから始点ノード「D」、遷移ビット列「101」、終点ノード「A」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。また、第1遷移テーブル252を参照し、ポップした終点ノード「A」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「1」を得る。BDD変換部260fは、遷移先ノード「0」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「1010」の後ろに追加される。そして、始点ノード「D」、ビット列「1010」、終点ノード「0」をパススタックにスタックする。
BDD変換部260fは、始点ノード「D」、ビット列「1010」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「1010」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「1011」の後ろに追加される。そして、始点ノード「D」、ビット列「1011」、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「1011」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「1011」、遷移先(終点ノード)「1」を登録する(図49のステップS77)。
BDD変換部260fは、パススタックから始点ノード「D」、遷移ビット列「0」、終点ノード「B」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部160fは、第1遷移テーブル252を参照し、ポップした終点ノード「B」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「A」を得る。BDD変換部260fは、遷移先ノード「0」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「00」の後ろに追加される。そして、始点ノード「D」、ビット列「0」、終点ノード「0」をパススタックにスタックする。
BDD変換部260fは、始点ノード「D」、ビット列「0」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「D」、論理値「0」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部260fは、遷移先ノード「A」のレベル「7」から終点ノード「B」のレベル「6」を差し引くと「1」となるので、0個の「*」がビット列「01」の後ろに追加される。そして、始点ノード「D」、ビット列「01」、終点ノード「A」をパススタックにスタックする(図50のステップS78)。
BDD変換部260fは、パススタックから始点ノード「D」、遷移ビット列「01」、終点ノード「A」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部260fは、第1遷移テーブル252を参照し、ポップした終点ノード「A」の論理値「0」および「1」でのそれぞれの遷移先ノード「1」、「0」を得る。BDD変換部260fは、遷移先ノード「0」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「010」の後ろに追加される。そして、始点ノード「D」、ビット列「010」、終点ノード「0」をパススタックにスタックする。
BDD変換部260fは、始点ノード「D」、ビット列「010」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「D」、論理値「010」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「011」の後ろに追加される。そして、始点ノード「D」、ビット列「011」、終点ノード「1」をパススタックにスタックする。
BDD変換部160fは、始点ノード「D」、ビット列「011」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル154に、始点ノード「D」、論理値「011」、遷移先(終点ノード)「1」を登録する(図50のステップS79)。
BDD変換部260fは、パススタックから始点ノード「B」、遷移ビット列「**」、終点ノード「B」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部260fは、第1遷移テーブル252を参照し、ポップした終点ノード「B」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「A」を得る。遷移先ノード「A」のレベル「7」から終点ノード「B」のレベル「6」を差し引くと「1」となるので、0個の「*」がビット列「**1」の後ろに追加される。そして、始点ノード「B」、ビット列「**1」、終点ノード「A」をパススタックにスタックする。
一方、BDD変換部260fは、遷移先ノード「0」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「**0」の後ろに追加される。そして、始点ノード「B」、ビット列「**」、終点ノード「0」をパススタックにスタックする。
BDD変換部260fは、始点ノード「B」、ビット列「**」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「B」、論理値「**」、遷移先(終点ノード)「0」を登録する(図50のステップS80)。
BDD変換部260fは、パススタックから始点ノード「B」、遷移ビット列「**1」、終点ノード「A」をポップし、遷移ビット列を複製し、0および1をそれぞれ加える。そして、BDD変換部160fは、第1遷移テーブル152を参照し、ポップした終点ノード「A」の論理値「0」および「1」でのそれぞれの遷移先ノード「0」、「1」を得る。遷移先ノード「0」のレベル「8」から終点ノード「A」のレベル「7」を差し引くと「1」となるので、0個の「*」がビット列「**10」の後ろに追加される。そして、始点ノード「B」、ビット列「**10」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「0」をパススタックにスタックする。
BDD変換部260fは、始点ノード「B」、ビット列「**10」、終点ノード「0」をパススタックからポップする。ここで、(終点ノード「0」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「B」、論理値「**10」、遷移先(終点ノード)「0」を登録する。
一方、BDD変換部260fは、遷移先ノード「1」のレベル「8」から終点ノード「B」のレベル「6」を差し引くと「2」となるので、1個の「*」がビット列「**11」の後ろに追加される。そして、始点ノード「B」、ビット列「**11」(先頭から5ビット目以降のビット列はカットされる)、終点ノード「1」をパススタックにスタックする。
BDD変換部260fは、始点ノード「B」、ビット列「**11」、終点ノード「1」をパススタックからポップする。ここで、(終点ノード「1」のレベル)−(カレントレベル「4」)がN(4)以上であるため、第2遷移テーブル253に、始点ノード「B」、論理値「**11」、遷移先(終点ノード)「1」を登録する(図50のステップS81)。
このように、BDD変換部260fは、ステップS70〜S81の処理を実行することにより、図26に示す第1ダイアグラムデータ250gを図47に示す第2ダイアグラムデータ250hに変換する。
図46の説明に戻ると、ダイアグラム実行部260gは、論理値テーブル250eと、第2ダイアグラムデータ250hとを比較して、最終的な論理値が「1(真)」であるか否かを判定する手段である。なお、本実施例2にかかるダイアグラム実行部260gは、実施例1に示したダイアグラム実行部160gとは異なり、所定桁数のビット列を用いて判定を行う。
そして、ダイアグラム実行部260gは、判定結果が「1」となったデータ種別に対応する返答項目を評価結果テーブル250iから検出し、検出した返答項目を検索結果データ250jとして記憶部250に記憶する。例えば、データ種別「Data2」の判定結果が「1」となる場合には、返答項目「第三開発部」を検索結果データ150jとして記憶する。
ここで、ダイアグラム実行部260gの処理を具体的に説明する。図51および図52は、本実施例2にかかるダイアグラム実行部260gの処理を説明するための図である。なお、前提条件として、第2ダイアグラムデータ250hのデータ構造を、図47に示したデータ構造とする。また、データ種別を、「Data0」、「Data1」とし、Data0の各論理値を「H=0、G=1、F=1、E=0、D=0、C=0、B=1、A=1」とし、Data1の論理値を「H=1、G=0、F=0、E=1、D=0、C=1、B=1、A=0」とする。また、入力順序は、第1レベルテーブル251(図26参照)のレベル順に従うため、「H、G、F、E、D、C、B、A」の順となる。また、比較対象となるビット列の桁を「4」とする。
まず、ダイアグラム実行部260gが、「Data0」の真偽を判定する場合について説明する。ダイアグラム実行部260gは、「Data0」のビット列「01100011」のうち、上位4ビット「0110」と、第2遷移テーブル253とを比較し、遷移先ノード「D」を得る(図51のステップS90)。
そして、ダイアグラム実行部260gは、残りのビット列「0011」と、第2遷移テーブル253とを比較し、遷移先ノード「1(真)」を得る。ダイアグラム実行部260gは、評価結果テーブル250iにおいて、データ種別「Data0」に対応する評価結果に「1(真)」を登録する(図51のステップS91)。
次に、ダイアグラム実行部260gが、「Data1」の真偽を判定する場合にについて説明する。ダイアグラム実行部260gは、「Data1」のビット列「10010110」のうち、上位4ビット「1001」と、第2遷移テーブル253とを比較し、遷移先ノード「B」を得る(図52のステップS92)。
そして、ダイアグラム実行部260gは、残りのビット列「0110」と、第2遷移テーブル253とを比較し、遷移先ノード「0(偽)」を得る。ダイアグラム実行部260gは、評価結果テーブル250iにおいて、データ種別「Data1」に対応する評価結果に「0(偽)」を登録する(図52のステップS93)。
検索結果出力部260hは、記憶部250に記憶された検索結果データ250jを端末装置60(図3参照)に送信する手段である。端末装置60は、検索結果データ250jを受信した場合に、受信した検索結果データ250jをモニタ画面に出力する。
次に、本実施例2にかかる検索装置200の処理手順について説明する。図53は、本実施例2にかかる検索装置200の処理手順を示すフローチャートである。同図に示すように、検索装置200は、検索クエリを受信し(ステップS301)、検索クエリ分解部260aが、分解検索クエリ250cを生成する(ステップS302)。
続いて、抽出結果テーブル生成部260bが、分解検索クエリ250cに対応するデータを抽出して抽出結果テーブル250dに登録し(ステップS303)、論理値算出部260cが論理値を算出して論理値テーブル250eに登録する(ステップS304)。
そして、BDD構築部260eがBDD入力順序を決定し(ステップS305)、BDD構築処理を実行する(ステップS306)。BDD変換部260fは、BDD変換処理を実行することにより、第1ダイアグラムデータ250gを第2ダイアグラムデータ250hに変換する(ステップS307)。
ダイアグラム実行部260gは、論理式判定ダイアグラム実行処理を実行し(ステップS308)、評価結果データを格納し(ステップS309)、検索結果出力部260hが、返答項目出力処理を実行する(ステップS310)。
ここで、図53のステップS306に示したBDD構築処理は、図35に示したBDD構築処理と同様である。また、図53のステップS310に示した返答項目出力処理は、図44に示した返答項目出力処理と同様である。
次に、図53のステップS307に示したBDD変換処理について説明する。図54および図55は、本実施例2にかかるBDD変換処理の処理手順を示すフローチャートである。図54に示すように、BDD変換部260fは、カレントレベルを0に設定し(ステップS311)、BDDの初期状態であるノードを始点ノード集合に追加する(ステップS312)。
続いて、BDD変換部260fは、始点ノード集合から一つノードを取り除き、取り除いたノードを始点ノードに設定し(ステップS313)、(始点ノードのレベル)−(カレントレベル)がN(例えば、4)以上であるか否かを判定する(ステップS314)。
N以上である場合には(ステップS315,Yes)、第2遷移テーブル253の遷移先が始点ノードとなっている項目をダミーノードに書き換え(ステップS316)、始点ノードとしてダミーノードを、遷移ビット列として「*」Nビットを、終点ノードとして始点ノードをパススタックにスタックし(ステップS317)、ステップS319に移行する。
一方、N未満の場合は(ステップS315,No)、始点ノードとして始点ノードを、遷移ビット列として(始点ノードのレベル)−(カレントレベル)分の「*」を、終点ノードとして始点ノードをパススタックにスタックする(ステップS318)。
続いて、BDD変換部260fは、始点ノード集合が空か否かを判定し(ステップS319)、空ではない場合には(ステップS320,No)、ステップS313に移行する。一方、始点ノード集合が空の場合には(ステップS320,Yes)、図55に示すように、パススタックから始点ノード、遷移ビット列、終点ノードをポップする(ステップS321)。
そして、BDD変換部260fは、終点ノードのレベルからカレントレベルを減算し、減算した値がN以上であるか否かを判定する(ステップS322)。減算した値がN未満の場合には(ステップS323,No)、ポップした遷移ビット列を複製し、0および1をそれぞれ加え、第1遷移テーブル252を参照し、ポップしたノードの論理値0および1でのそれぞれの遷移先ノードを取得する。また、(遷移先ノードのレベル)−(終点ノードのレベル)−1分の「*」を遷移ビット列にそれぞれ更に追加し、取得した遷移先ノードをそれぞれの終点ノードとして追加し、取得した各遷移先ノードをそれぞれの終端ノードとして、それぞれパススタックにスタックし(ステップS324)、ステップS321に移行する。
一方、BDD変換部260fは、減算した値がN以上の場合には(ステップS323,Yes)、第2遷移先テーブルにノードを始点ノードとし、論理値を遷移ビット列の先頭Nビットとし、遷移先のノードを終点ノードとするエントリを登録する(ステップS325)。
BDD変換部260fは、終点ノードを始点ノード集合に追加し(ステップS326)、パススタックが空か否かを判定し(ステップS327)、パススタックが空ではない場合には(ステップS328,No)、ステップS321に移行する。
一方、パススタックが空の場合には(ステップS328,Yes)、カレントレベルにNを加算し(ステップS329)、カレントレベルが最終レベル以上であるか否かを判定する(ステップS330)。カレントレベルが最終レベル未満の場合には(ステップS331)、ステップS313に移行する。カレントレベルが最終レベル以上の場合には(ステップS331,Yes)、BDD変換処理を終了する。
次に、図53のステップS308に示した論理式判定ダイアグラム実行処理について説明する。図56は、本実施例2にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。図56に示すように、抽出結果テーブル生成部260bが抽出結果テーブル250dを作成し(ステップS341)、論理値算出部260cが論理値テーブル250eを作成する(ステップS342)。
そして、ダイアグラム実行部260gは、初期ノードを現在のノードとし、現在のレベルを0に設定し(ステップS343)、現在のレベルが最終レベルか否かを判定する(ステップS344)。
現在のレベルが最終レベルではない場合に(ステップS345,No)、論理値テーブル250eを参照し、現在のレベルの入力ビット列を取得し(ステップS346)、第2遷移テーブル253を参照し、遷移先の情報を取得する(ステップS347)。
続いて、ダイアグラム実行部260gは、現在のノードを遷移先のノードに設定し(ステップS348)、現在のレベルに1を加算し(ステップS349)、ステップS344に移行する。
一方、現在のレベルが最終レベルの場合には(ステップS345,Yes)、ノードに割り当てられている真偽値を評価結果テーブル250iに登録し(ステップS350)、全ての文書データを選択したか否かを判定する(ステップS360)。全ての文書データを選択していない場合には(ステップS370,No)、ステップS343に移行する。一方、全ての文書データを選択している場合には(ステップS370,Yes)、論理式判定ダイアグラム実行処理を終了する。
上述してきたように、本実施例2にかかる検索装置200は、第2ダイアグラムデータ250hを作成する場合に、遷移先を判定するビット列にダミー値「*」あるいは、遷移先のノードの間にダミーノードを挿入することで、最終的な真偽を判定するまでに、比較対象となるビット列の桁を固定するので、遷移先のノード毎に比較するビット列の桁を判定する必要を無くし、効率的に真偽判定を実施することを可能にする。
また、本実施例2にかかる検索装置200は、ダミーノードを挿入して、初期ノードから最終レベルのノードに遷移するまでの遷移回数を固定するので、真偽判定にかかる処理をシンプルにし、検索装置200にかかる処理負荷を軽減することができる。
ところで、本実施例2にかかる検索装置200は、一例として、ダミー値「*」およびダミーノードを用いて、第2ダイアグラムデータ250hを作成したが、ダミー値のみを挿入してビット列を固定した第2ダイアグラムデータ250hを作成しても良いし、ダミーノードのみを挿入して遷移回数を固定した第2ダイアグラムデータ250hを作成しても良い。
次に、本実施例3にかかる検索装置の概要および特徴について説明する。図57は、本実施例3にかかる検索装置の概要および特徴を説明するための図である。本実施例3にかかる検索装置は、論理変数の論理値が求まっているか否かの状態を表す論理変数(以下、不明論理変数)を用いて、第1の2分木を構築し、実施例1または実施例2に示した手法を用いて、第1の2分木を第2の2分木に変換し、論理式の真偽を判定する。入力されるビット列によっては、論理変数(例えば、計算コストの高い論理変数)の論理値を求めなくとも、最終的な真偽を判定することができる。
ここで、計算コストの高い論理変数(論理値が「1」か「0」かを計算する時間が所定時間以上となる論理変数)は、できれば計算しないでおくことが望ましい。従って、計算コストの高い論理変数に対応する不明論理変数を作成することにより、真偽判定にかかる検索装置の処理負荷を軽減させることが出来る。
図57に示す第1の2分木は、論理式「A and B or (C and D or E)and (F or G and H)」の第1の2分木を示す。また、図57において、計算コストの高い論理変数を「A」、「C」とする。そして、「A」の不明論理変数を「A?」とし、論理変数「A」と不明論理変数「A?」とを用いて、論理変数「A」の値を示す。本実施例3では、論理変数と、かかる論理変数に対応する不明論理変数を用いて、論理変数の3つの状態を定義する。具体的には、「a?=0 a=0」の場合には、Aの論理値が求まっていない旨を示し、「a?=1 a=0」の場合には、Aの論理値が「0」である旨を示し、「a?=1 a=1」の場合には、Aの論理値が「1」であることを示す。なお、不明論理変数と、不明論理変数に対応する論理変数の初期値は「0」となる。
同様に、「C」の不明論理変数を「C?」とし、論理変数「C」と不明論理変数「C?」とを用いて、論理変数「C」の値を示す。具体的には、「c?=0 c=0」の場合には、Cの論理値が求まっていない旨を示し、「c?=1 c=0」の場合には、Cの論理値が「0」である旨を示し、「c?=1 c=1」の場合には、Cの論理値が「1」であることを示す。
なお、図57に示す「Ax」は、論理変数「A」の不定最終ノードを示す。ビット列を第2の2分木に入力し、最終的に、不定最終ノード「Ax」に到達した場合には、論理変数「Ax」の論理値が必要となる。検索装置は、不定最終ノード「Ax」に到達した場合には、論理変数「A」の論理値を求めると共に、不明論理変数「A?」の値を「1」に設定した後に、不定最終ノード「Ax」の一つ前のノード「A?」から比較をやり直すことで、真値判定を行う。
同様に、図57に示す「Cx」は、論理変数「C」の不定最終ノードを示す。ビット列を第2の2分木に入力し、最終的に、不定最終ノード「Cx」に到達した場合には、論理変数「Cx」の論理値が必要となる。検索装置は、不定最終ノード「Cx」に到達した場合には、論理変数「C」の論理値を求めると共に、不明論理変数「C?」の値を「1」に設定した後に、不定最終ノード「Cx」の一つ前のノード「D」から比較をやり直すことで、真値判定を行う。
具体的に、第2の2分木に入力する各論理値を「H=1、G=1、F=0、E=1、D=0、C?=0、C=0、B=1、A?=0、A=0」(A、Cの論理値は不明)とすると、初期ノード「H」からノード「1」に遷移するため、計算コストの高い論理変数「A、C」の論理値を求めなくとも、論理式の真偽(この場合は真)を判定することができる。
一方、第2の2分木に入力する各論理値を「H=1、G=1、F=0、E=0、D=1、C?=0、C=0、B=1、A?=0、A=0」(A、Cの論理値は不明)とすると、初期ノード「H」からノード「D」を介して不定最終ノード「Cx」に遷移する。この場合は、論理変数「C」の論理値を求める必要があるので、論理変数「C」の論理値を求め、不明論理変数「C?」の値を「1」に設定した後に、再度、ノード「D」にビット列を入力する。
例えば、論理変数「C」の論理値を「1」とすれば、各論理値は、「H=1、G=1、F=0、E=0、D=1、C?=1、C=1、B=1、A?=0、A=0」(Aの論理値は不明)となり、ノード「D」に各論理値「D=1、C?=1、C=1、B=1」を入力すると、ノード「D」を介しからノード「1」に遷移するため、計算コストの高い全ての論理変数を求めなくとも、論理式の真偽を判定することができる(この場合では、論理変数Aの論理値を求める必要がない)。
次に、本実施例3にかかる検索装置の構成について説明する。図58は、本実施例3にかかる検索装置300の構成を示す機能ブロック図である。なお、本実施例3にかかる検索装置300を備えた検索システムの構成は、実施例1の検索システムの構成と同様である。
図58に示すように、この検索装置300は、入力部310と、出力部320と、通信制御IF部330と、入出力制御IF部340と、記憶部350と、制御部360とを有する。
入力部310は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ(出力部320)も、マウスと協働してポインティングデバイス機能を実現する。
出力部320は、各種の情報を出力する手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成される。無線制御IF部330は、主に端末装置60との間における通信を制御する手段である。なお、入出力制御IF部340は、入力部310、出力部320、通信制御IF部330、記憶部350、制御部360によるデータの入出力を制御する手段である。
記憶部350は、制御部360による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部350は、XMLデータ350aと、検索クエリ350bと、分解検索クエリ350cと、計算量見積テーブル350dと、計算量テーブル350eと、抽出結果テーブル350fと、論理値テーブル350gと、変換論理式データ350hと、第1ダイアグラムデータ350iと、第2ダイアグラムデータ350jと、評価結果テーブル350kと、検索結果データ350lとを有する。
ここで、XMLデータ350aは、要素識別子「<」、「</」等により要素が区切られた階層構造を有する文書データである。このXMLデータ350aのデータ構造は、図5に示したXMLデータ150aのデータ構造と同様である。
検索クエリ350bは、XMLデータ350aから照合位置のデータを取り出すためのデータである。この検索クエリ350bのデータ構造は、図6に示した検索クエリ150bのデータ構造と同様である。
分解検索クエリ350cは、検索クエリ350bが検索クエリ分解部360a(後述する)によって分解された結果得られるデータである。この分解検索クエリ350cのデータ構造は、図7に示した分解検索クエリ150cのデータ構造と同様である。
計算量見積テーブル350dは、論理変数の論理値を評価する評価式の計算コストを管理するテーブルである。図59は、本実施例3にかかる計算量見積テーブル350dのデータ構造の一例を示す図である。同図に示すように、この計算量見積テーブル350dは、評価式種別と、計算コストとを対応付けて記憶している。例えば、評価式種別は、単純検索、正規表現、数値演算、日時計算、近傍検索を有する。また、各評価式種別に対応する計算コストの値は、ユーザの経験により適宜設定・更新される。
ここで、単純検索に分類される評価式は、所定の文書データが、検索対象の要素に含まれているか否かを判定する評価式である。例えば、図7の評価式q1が単純検索の評価式に該当する。
正規表現に分類される評価式は、各種の複雑な処理を要する評価式である。数値演算に分類される評価式は、比較や四則演算、複雑な関数を含む(単なる一致判定は含まない)評価式である。例えば、図7の評価式qが数値演算に該当する。
日時計算に分類される評価式は、2008年1月以後・以前などのように、様々なフォーマットに対応しながら判定する評価式である。近傍検索に分類される評価式は、「情報」と「統合」の間が五文字以内などのように、文字間隔などを数える必要がある評価式である。
計算量テーブル350eは、評価式に対応する計算コストを管理するテーブルである。図60は、本実施例3にかかる計算量テーブル350eのデータ構造の一例を示す図である。同図に示すように、この計算量テーブル350eは、評価式識別情報と、計算コストとを対応付けて記憶している。ここでは、評価式「q1」の計算コストが「1」、評価式「q2」の計算コストが「100」となっている。
抽出結果テーブル350fは、評価式(図7のq1,q2参照)の評価対象となる情報と、検索クエリ350bの評価結果が真であった場合に、端末装置60に返答する項目を管理するテーブルである。この抽出結果テーブル350fのデータ構造は、図8に示した抽出結果テーブル150dのデータ構造と同様である。
論理値テーブル350gは、各評価式の評価結果を管理するテーブルである。この論理値テーブル350gのデータ構造は、図9に示した論理値テーブル150eのデータ構造と同様である。ただし、初期段階では、計算コストの大きい論理値は「?」とする。例えば、評価式「q2」の計算コストが大きい(所定値以上)場合には、第2論理値(q2)の値を「?」とし、「q2」の値が必要になった場合に、「1」または「0」が登録される。
変換論理式データ350hは、論理式(図7参照)が、論理式変換部360e(後述する)によって逆ポーランド表記に変換されたデータである。第1ダイアグラムデータ350iは、BDD構築部360f(後述する)によって作成されるデータである。
この第1ダイアグラムデータ350iのデータ構造は、図10に示した第1ダイアグラムデータ150gと同様である。ただし、本実施例3にかかる第1ダイアグラムデータ350iは、通常の論理変数、ノードのほかに、計算コストが所定値以上となる論理変数の不明論理変数、および、不定最終ノードを有する。また、本実施例3において、第1ダイアグラムデータ350iは、第1レベルテーブル351および第1遷移テーブル352を有する。
第2ダイアグラムデータ350jは、第1ダイアグラムデータ350iが、BDD変換部360g(後述する)によって変換されたデータである。この第2ダイアグラムデータ350jは、第2レベルテーブル、第2遷移テーブルを有している(第2レベルテーブル、第2遷移テーブルのデータ構造は、上記実施例2と同様)。この第2ダイアグラムデータ350jのデータ構造は、図25に示した、第2レベルテーブル153と、第2遷移テーブル154と同様である。ただし、本実施例3にかかる第2ダイアグラムデータ350jは、通常のノードの他に、不明論理変数に対応するノードおよび不定最終ノードを有する。
評価結果テーブル350kは、各データ種別(例えば、Data0〜2)に対する評価結果を管理するテーブルである。この評価結果テーブル350kのデータ構造は、図11に示した評価結果テーブル150iのデータ構造と同様である。
検索結果データ350lは、XMLデータ350aに対する検索クエリ350bの検索結果を記憶するデータである。この検索結果データ350bのデータ構造は、図12に示した検索結果データ150jのデータ構造と同様である。
制御部360は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段である。特に本発明に密接に関連するものとしては、図58に示すように、検索クエリ分解部360aと、計算量見積部360bと、抽出結果テーブル生成部360cと、論理値算出部360dと、論理式変換部360eと、BDD構築部360fと、BDD変換部360gと、ダイアグラム実行部360hと、検索結果出力部360iとを有する。
このうち、検索クエリ分解部360aは、端末装置60から検索クエリを受信した場合に、受信した検索クエリを検索クエリ350bとして記憶部350に記憶すると共に、周知の手法を用いて、検索クエリ350bから分解検索クエリ350cを生成する手段である。
計算量見積部360bは、分解検索クエリ350cに含まれる各評価式(図7に示す例では、評価式q1、q2)の計算コストを判定し、計算量テーブル350e(図60参照)を生成する処理部である。計算量見積部360bは、分解検索クエリ350cの評価式と、計算量見積テーブル(図59参照)とを比較することにより、評価式の計算コストを判定する。
抽出結果テーブル生成部360cは、分解検索クエリ350cに含まれる評価式に基づいて、第1〜n(n>1)論理変数および返答項目をXMLデータ350aから抽出し、抽出結果テーブル350fを生成する手段である。
論理値算出部360dは、評価式の計算コストに基づいて、計算コストの少ない評価式を評価し(計算コストが所定値未満となる論理変数の論理値を算出し)、論理値テーブル350gを生成するする手段である。また、論理値算出部360dは、ダイアグラム実行部360bからの要求に応じて、算出することが必要になった論理変数の論理値を算出する。
論理式変換部360eは、逆ポーランド表記を用いることにより、検索クエリの論理式(例えば、Q=q1 and q2)を変換する手段である。論理式変換部360eは、論理式「q1&q2」を、逆ポーランド表記を用いて変換すると、「q1q2&」となる。論理式変換部360eは、変換した論理式のデータを、変換論理式データ350hとして記憶部350に記憶する。
BDD構築部360fは、変換論理式データ350fに基づいて、第1ダイアグラムデータ350iを生成する手段である。BDD構築部360fは、変換論理式データ350f(逆ポーランド表記の論理式)の文字を先頭から順次読み出し、読み出した文字(論理演算子、論理変数)に応じて、第1レベルテーブル351、第2レベルテーブルに各種の情報を登録する。
本実施例3にかかるBDD構築部360fは、特に、計算コストの大きい論理変数が論理式に含まれている場合に、計算コストの大きい論理変数に対応する不明論理変数および不定最終ノードを作成して、第2の2分木を作成する。なお、不明論理変数のノードを、不明論理ノードとする。
以下において、BDD構築部360fが、第1ダイアグラムデータ350iを作成する処理について具体的に説明する。図61〜65は、本実施例3にかかるBDD構築部360fの処理を説明するための図である。図61〜65に示す処理を実行することで、計算コストの高い論理変数の不明論理変数および不定最終ノードが2分木に組み込まれる。結果として、計算コストの高い論理変数の論理値を算出していなくても、第2の2分木を作成することができ、多ビット毎にノードの遷移先を判定することができる。
ここで、前提条件として、論理変数「A」、「C」の計算コストが100以上であるものとする。なお、BDD構築部360fは、一旦、実施例1に示したBDD構築部160eと同様の手法を用いて、第1ダイアグラムデータを作成した後に、計算コストの大きい論理変数を検索して、不明論理変数および最終ノードを利用した第1ダイアグラムデータ350iを作成する。
ここでは説明の便宜上、実施例1のBDD構築部160eの手法を用いて生成した第1ダイアグラムデータを図61の上段に示す第1ダイアグラムデータ350iとする。BDD構築部360fは、第1レベルテーブル351の先頭エントリをカレントエントリとし、現在のレベルを0に設定する。カレントエントリのノード「D」は、計算コストが所定値未満のノードであるため、そのまま、ノード「D」、レベル「0」、論理変数「d」を新レベルテーブルに登録する(図61のステップS400、および、ステップS401)。新レベルテーブルは、BDD構築部360fが保持しているものとする。
BDD構築部360fは、現在のレベルに1を加算し、第1レベルテーブル351の次のエントリ(図61の第1レベルテーブル351の2段目)を、カレントエントリに設定する。カレントエントリのノード「C」は、計算コストが所定値以上のノードであるため、ノード「C」に対応する不明論理ノード「C?」、現在のレベル「1」、論理変数(不明論理変数)「c?」を登録する。また、論理変数「C」に対応する不定最終ノード「Cx」および論理変数「c」を新レベルテーブルに登録する。
その後、BDD構築部360fは、現在のレベルに1を加算し、ノード「C」、レベル「2」、論理変数「c」を新レベルテーブルに登録する(図62のステップS402)。
BDD構築部360fは、現在のレベルに1を加算し、第1レベルテーブル351の次のエントリ(図61の第1レベルテーブル351の3段目)をカレントエントリに設定する。カレントエントリのノード「B」は、計算コストが所定値未満のノードであるため、そのまま、ノード「B」、レベル「3」、論理変数「b」を新レベルテーブルに登録する。
続いて、BDD構築部360fは、現在のレベルに1を加算し、第1レベルテーブル351の次のエントリ(図61の第1レベルテーブル351の4段目)をカレントエントリに設定する。カレントエントリのノード「A」は、計算コストが所定値以上のノードであるため、ノード「A」に対応する不明論理ノード「A?」、現在のレベル「4」、論理変数(不明論理変数)「a?」を登録する。また、論理変数「A」に対応する不定最終ノード「Ax」および論理変数「a」を新レベルテーブルに登録する。
その後、BDD構築部360fは、現在のレベルに1を加算し、ノード「A」、レベル「5」、論理変数「a」を新レベルテーブルに登録する。続いて、BDD構築部360fは、第1レベルテーブル351の次のエントリ(図61の第1レベルテーブル351の5段目)をカレントエントリに設定する。カレントエントリのノード「1」は、最終レベルのノードであるため、ノード「1」、レベル「6」を新レベルテーブルに登録する。
続いて、BDD構築部360fは、第1レベルテーブル351の次のエントリ(図61の第1レベルテーブル351の6段目)をカレントエントリに設定する。カレントエントリのノード「0」は、最終レベルのノードであるため、ノード「0」、レベル「6」を新レベルテーブルに登録する(図62のステップS403)。
BDD構築部360fは、新レベルテーブルの不定最終ノード「Cx」、「Ax」のレベルを最終レベル「6」に設定する。また、BDD構築部360fは、第1遷移テーブル352の先頭エントリをカレントエントリとし、ノード「D」、論理値「0」の遷移先ノード「B」を得る。遷移先ノード「B」の計算コストは所定値未満であるため、第1遷移テーブル352をそのままにする(図63のステップS404)。
BDD構築部360fは、第1遷移テーブル352の2段目のエントリをカレントエントリとし、ノード「D」、論理値「1」の遷移先ノード「C」を得る。遷移先ノード「C」の計算コストは、所定値以上であるため、BDD構築部360fは、遷移先ノード「C」を遷移先ノード「C?」に書き換える(図63のステップS405)。
続いて、BDD構築部360fは、第1遷移テーブル352の3段目のエントリをカレントエントリとし、ノード「C」、論理値「0」の遷移先ノード「B」を得る。ノード「C」の計算コストは、所定値以上であり論理値が「0」であるため、BDD構築部360fは、不明論理ノード「C?」、論理値「0」、不定最終ノード「Cx」を第1遷移テーブル352に登録する(図64のステップS406)。
続いて、BDD構築部360fは、第1遷移テーブル352の4段目のエントリをカレントエントリとし、ノード「C」、論理値「1」の遷移先ノード「1」を得る。ノード「C」の計算コストは、所定値以上であり、論理値が「1」であるため、BDD構築部360fは、不明論理ノード「C?」、論理値「1」、読み出したノード「C」を第1遷移テーブル352に登録する(図64のステップS407)。
BDD構築部360fは、第1遷移テーブル352の5段目のエントリをカレントエントリとし、ノード「B」、論理値「0」の遷移先ノード「0」を得る。遷移先ノード「0」の計算コストは、所定値未満であるため、BDD構築部360fは、第1遷移テーブル352をそのままにする。
続いて、BDD構築部360fは、第1遷移テーブル352の6段目のエントリをカレントエントリとし、ノード「B」、論理値「1」の遷移先ノード「A」を得る。遷移先ノード「A」の計算コストは、所定値以上であるため、BDD構築部360fは、遷移先を「A?」に書き換える(図65のステップS408)。
BDD構築部360fは、第1遷移テーブル352の7段目のエントリをカレントエントリとし、ノード「A」、論理値「0」の遷移先ノード「0」を得る。ノード「A」の計算コストは、所定値以上であり、論理値が「0」であるため、BDD構築部360fは、不明論理ノード「A?」、論理値「0」、不定最終ノード「Ax」を第1遷移テーブル352に登録する。
続いて、BDD構築部360fは、第1遷移テーブル352の8段目のエントリをカレントエントリとし、ノード「A」、論理値「1」の遷移先ノード「1」を得る。ノード「A」の計算コストは、所定値以上であり、論理値が「1」であるため、BDD構築部360fは、不明論理ノード「A?」、論理値「1」、読み出したノード「A」を第1遷移テーブル352に登録する(図65のステップS409)。そして、BDD構築部360fは、新レベルテーブルによって、第1レベルテーブル351を更新する。
図58の説明に戻ると、BDD変換部350gは、第1の2分木を第2の2分木となるように、第1ダイアグラムデータ350iを変換して第2ダイアグラムデータ350jを作成する手段である。なお、第1ダイアグラムデータ350iを第2ダイアグラムデータ350jに変換する手法は、実施例1に示したBDD変換部160fあるいは実施例2に示したBDD変換部260fと同様である。
ダイアグラム実行部360hは、論理値テーブル350gと、第2ダイアグラムデータ350jとを比較して、最終的な論理値が「1(真)」であるか否かを判定する手段である。
そして、ダイアグラム実行部360hは、判定結果が「1」となったデータ種別に対応する返答項目を評価結果テーブル350kから検出し、検出した返答項目を検索結果データ350lとして記憶部350に記憶する。例えば、データ種別「Data3」の判定結果が「1」となる場合には、返答項目「第三開発部」を検索結果データ350lとして記憶する。
ところで、ダイアグラム実行部360hが、論理値テーブル350gを参照し、論理値が「?」となる論理変数(計算コストが所定値以上となる論理変数)が存在する場合には、計算コストの高い論理変数に対応する不明論理変数を定義し、該当する論理変数および不明論理変数の値を「0」した状態で、ビット列を作成し、第2ダイアグラムデータ350jと比較して、最終的な真偽を求める。
また、ダイアグラム実行部360hは、最終的な論理値を算出する過程で、論理値が「?」となる論理変数の値が必要となった場合には、該当する論理変数の論理値を算出する(論理値算出部360dに論理変数の論理値の算出要求を行う)。そして、該当する論理変数の論理値が「1」の場合には、論理変数「1」、不明論理変数「1」としてビット列を作成し、第2ダイアグラムデータ350jと比較して、最終的な真偽を求める。
一方、該当する論理変数の論理値が「0」の場合には、論理変数「0」、不明論理変数「1」としてビット列を作成し、第2ダイアグラムデータ350jと比較して、最終的な真偽を求める。
例えば、論理変数「H、G、F、E、D、C、B、A」の論理値のビット列を作成して、最終的な真偽を判定する場合に、「H=1、G=1、F=1、E=1、D=0、C=?、B=1、A=?」の場合(論理変数A、Cの計算コストが所定値以上の場合)には、不明論理変数「C?」、「A?」を定義する。そして、論理変数「C=0」、不明論理変数「C?=0」、論理変数「A=0」、不明論理変数「A?=0」として、ビット列「H=1、G=1、F=1、E=1、D=0、C?=0、C=0、B=1、A?=0、A=0」を作成する。
一例として、第2の2分木を図57の下段に示す第2の2分木であるとし、かかる第2の2分木と、ビット列「H=1、G=1、F=1、E=1、D=0、C?=0、C=0、B=1、A?=0、A=0」とを比較すると、初期ノード「H」からノード「1」に遷移する。従って、論理変数「C」、「A」の論理値を求めなくとも、最終的な真偽を求めることができる。
一方、論理変数「H、G、F、E、D、C、B、A」の論理値のビット列を作成して、最終的な真偽を判定する場合に、「H=1、G=1、F=1、E=0、D=1、C=?、B=1、A=?」の場合には、不明論理変数「C?」を定義する。そして、論理変数「C=0」、不明論理変数「C?=0」、論理変数「A=0」、不明論理変数「A?=0」として、ビット列「H=1、G=1、F=1、E=0、D=1、C=0、C?=0、B=1、A?=0、A=0」を作成する。
第2の2分木を図57の下段に示す第2の2分木であるとし、かかる第2の2分木と、ビット列「H=1、G=1、F=1、E=0、D=1、C?=0、C=0、B=1、A?=0、A=0」とを比較すると、初期ノード「H」から不定最終ノード「Cx」に遷移する。この場合には、論理変数「C」の論理値を算出する必要がある。ここでは、論理変数「C」の論理値を算出した結果、論理変数「C」の論理値が「1」であったとすると、「C=1」、「C?=1」となる。
ダイアグラム実行部360hは、不定最終ノード「Cx」の一つ前のノード「D」にビット列「D=1、C?=1、C=1、B=1」を入力すると、ノード「D」からノード「1」に遷移する。従って、論理変数「A」の論理値を求めなくても、最終的な真偽を求めることができる。
検索結果出力部360iは、記憶部350に記憶された検索結果データ350lを端末装置60(図3参照)に送信する手段である。端末装置60は、検索結果データ350lを受信した場合に、受信した検索結果データ350lをモニタ画面に出力する。
次に、本実施例3にかかる検索装置300の処理手順について説明する。図66は、本実施例3にかかる検索装置300の処理手順を示すフローチャートである。同図に示すように、検索装置300は、検索クエリを受信し(ステップS411)、検索クエリ分解部360aが、分解検索クエリ350cを生成する(ステップS412)。
続いて、計算量見積部360bが、各論理変数の計算量(計算コスト)を見積り(ステップS413)、抽出結果テーブル生成部360cが、分解検索クエリ350cに対応するデータを抽出して抽出結果テーブル350fに登録し(ステップS414)、論理値算出部360dが、計算量(計算コスト)が閾値未満となる論理変数の論理値を算出する(ステップS415)。
続いて、BDD構築部360fがBDD入力順序を決定し(ステップS416)、BDD構築処理1およびBDD構築処理2を実行する(ステップS417、418)。BDD変換部360gは、BDD変換処理を実行することにより、第1ダイアグラムデータ350iを第2ダイアグラムデータ350jに変換する(ステップS419)。
そして、ダイアグラム実行部360hは、論理式判定ダイアグラム実行処理を実行し(ステップS420)、評価結果データを格納し(ステップS421)、検索結果出力部360iが、返答項目出力処理を実行する(ステップS422)。
ここで、図66のステップS417に示したBDD構築処理1は、図35に示したBDD構築処理と同様である。また、図66のステップS422に示した返答項目出力処理は、図44に示した返答項目出力処理と同様である。
次に、図66のステップS418に示したBDD構築処理2について説明する。図67および図68は、本実施例3にかかるBDD構築処理2の処理手順を示すフローチャートである。図67および図68の処理を実行することにより、計算コストの高い論理変数に対応する不明論理ノードおよび不定最終ノードが第1ダイアグラムデータ350iに組み込まれる。図67に示すように、BDD構築部360fが第1レベルテーブル351の先頭エントリをカレントエントリとし、現在のレベルを「0」に設定し(ステップS431)、カレントエントリのレベルが最終レベルか否かを判定する(ステップS432)。
カレントエントリが最終レベルの場合には(ステップS433,Yes)、新レベルテーブルに、読み出したノード、現在のレベル、論理変数を登録し(ステップS434)、ステップS441に移行する。
カレントエントリが最終レベルではない場合には(ステップS433,No)、計算コストが所定値以上か否かを判定し(ステップS435)、所定値未満の場合には(ステップS436,No)、ステップS439に移行する。
一方、計算コストが所定値以上の場合には(ステップS436,Yes)、新レベルテーブルに、読み出した論理変数に対応した不明論理ノード、現在のレベル、論理変数と、不定最終ノード(読み出した論理変数に対応する不定最終ノード)、論理変数とを登録する(ステップS437)。
そして、BDD構築部360fは、現在のレベルに1を加算し(ステップS438)、新レベルテーブルに、読み出したノード、現在のレベル、論理変数を登録し(ステップS439)、現在のレベルに1を加算する(ステップS440)。
BDD構築部360fは、第1レベルテーブル351中の全てのエントリを選択したか否かを判定し(ステップS441)、全てを選択していない場合には(ステップS442,No)、カレントエントリを次のエントリに設定し(ステップS443)、ステップS432に移行する。
第1レベルテーブル351中の全てのエントリを選択した場合には(ステップS442,Yes)、図68において、仮登録されているノード(不定最終ノード)のレベル項目に現在のレベル(最終レベル)を登録し(ステップS444)、第1遷移テーブル352の先頭エントリをカレントエントリに設定する(ステップS445)。
続いて、BDD構築部360fは、遷移先ノードに対応する論理変数の計算コストが所定値以上か否かを判定し(ステップS446)、所定値未満の場合には(ステップS447,No)、ステップS449に移行する。
遷移先ノードに対応する論理変数の計算コストが所定値以上の場合には(ステップS447,Yes)、遷移先項目を遷移先ノードに対応する論理変数の不明論理ノードに書き換え(ステップS448)、カレントエントリのノードに対応する論理変数の計算コストが所定値以上か否かを判定する(ステップS449)。
カレントエントリのノードに対応する論理変数の論理値の計算コストが所定値未満の場合には(ステップS450,No)、ステップS455に移行する。一方、ノードに対応する論理変数の論理値の計算コストが所定値以上の場合には(ステップS450,Yes)、論理値が0か否かを判定する(ステップS451)。
論理値が1の場合には(ステップS452,No)、第1遷移テーブル352に、カレントエントリのノードの不明論理ノード、論理値を1、遷移先を、読み出したノード(カレントエントリのノード)とするエントリを追加し(ステップS453)、ステップS455に移行する。
一方、論理値が0の場合には(ステップS452,Yes)、第1遷移テーブル352に、カレントエントリのノードの不明論理ノード、論理値を0、遷移先を、カレントエントリに対応する不定最終ノードとするエントリを追加する(ステップS454)。
そして、BDD構築部360fは、カレントエントリが追加されたエントリか否かを判定し(ステップS455)、追加されたエントリでない場合には(ステップS456,No)、カレントエントリを次のエントリに設定し(ステップS457)、ステップS446に移行する。一方、カレントエントリが追加されたエントリの場合には(ステップS456,Yes)、BDD構築処理2を終了する。
次に、図66のステップS420に示した論理式判定ダイアグラム実行処理について説明する。図69および図70は、本実施例3にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。図69に示すように、抽出結果テーブル生成部360cが、抽出結果テーブル350fを作成し(ステップS461)、論理値算出部360dが、計算量見積テーブル350dを参照し、計算量の少ない(計算コストが所定値未満の)論理変数の論理値を算出する(ステップS462)。
続いて、ダイアグラム実行部360hは、初期ノードを現在のノードとし、現在のステップを0に設定し(ステップS463)、第2レベルテーブルを参照し、現在のノードのレベルと論理変数列(ビット列)を取得する(ステップS464)。
ダイアグラム実行部360hは、取得したノードのレベルが最終レベルか否かを判定し(ステップS465)、ノードのレベルが最終レベルではない場合には(ステップS466,No)、論理変数列の論理値列を読み出す(ステップS467)。
続いて、ダイアグラム実行部360hは、第2遷移テーブルを参照し、遷移先情報を取得し(ステップS468)、現在のノードを遷移先のノードに設定し(ステップS469)、ステップS466に移行する。
一方、取得したノードのレベルが最終レベルの場合には(ステップS466,Yes)、図70に示すように、最終的な評価値(真または偽)が得られたか否かを判定し(ステップS470)、最終的な評価値が得られていない場合には(ステップS471,No)、評価に必要な論理変数の論理値を抽出結果テーブル350fから算出し、論理値列を更新する(ステップS472)。そして、論理値を算出した論理変数に対応する不明論理変数を1に設定し(ステップS473)、現在のノードを一つ前の状態に戻し(ステップS474)、ステップS464に移行する。
ところで、最終的な評価結果を得られた場合には(ステップS471,Yes)、ノードに割り当てられている真偽値を評価結果テーブル350kに登録し(ステップS475)、全ての文書データを選択したか否かを判定する(ステップS476)。全ての文書データを選択していない場合には(ステップS477,No)、未選択の文書データを選択し(ステップS478)、ステップS463に移行する。一方、全ての文書データを選択した場合には(ステップS477,Yes)、論理式判定ダイアグラム実行処理を終了する。
上述してきたように、本実施例3にかかる検索装置300は、計算量見積部360bが、各論理変数の計算コストを見積もり、BDD構築部360fが、不明論理変数を利用して計算コストの高い論理変数の論理値を未算出のままの状態にして、ダイアグラム実行部360hが第2ダイアグラムデータ350jを評価する。そして、第2ダイアグラムデータ350jを評価する過程において、計算コストの高い論理変数が必要になった場合(不定最終ノードに遷移した場合)にはじめて、かかる論理変数の論理値を算出するので、第2計算コストの高い論理変数の論理値を算出する機会を減らし、検索装置の処理負荷を軽減させることが出来る。
なお、上述した本実施例1〜3にかかる検索装置は、一例として、第2遷移テーブル(例えば、図25参照)を作成し、ノードと論理値との組合せから遷移先となるノードを判定していたが、必ずしも、第2遷移テーブルを作成して、遷移先となるノードを判定しなくてもよい。例えば、ノードと論理値との組合せをビット列で表現し、表現したビット列に対応するメモリアドレスに遷移先のノードを登録しておき、ノードと論理値とが特定された場合に、ノードと論理値との組合せからなるビット列に対応するメモリアドレスを参照することにより、遷移先のノードを特定することができる。
また、ノードと論理値との組合せをビット列で表現する場合、ダミー値は全ビット列パターンに変換することが出来る。例えば、「1**」は、「100」、「101」、「110」、「111」に変換することが出来る。
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図4、図46、図58に示した検索装置100、200、300の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がCPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
図71は、実施例にかかる検索装置100(あるいは検索装置200,300)を構成するコンピュータ400のハードウェア構成を示す図である。図71に示すように、このコンピュータ(検索装置)400は、入力装置401、モニタ402、RAM(Random Access Memory)403、ROM(Read Only Memory)404、記憶媒体からデータを読み取る媒体読取装置405、他の装置(例えば、端末装置60)との間でデータの送受信を行う通信装置406、CPU(Central Processing Unit)407、HDD(Hard Disk Drive)408をバス409で接続して構成される。
そして、HDD408には、上記した検索装置100(あるいは検索装置200,300)の機能と同様の機能を発揮する検索プログラム408bが記憶されている。CPU407が、検索プログラム408bを読み出して実行することにより、検索プロセス407aが起動される。ここで、検索プロセス407aは、図4に示した、検索クエリ分解部160a、抽出結果テーブル生成部160b、論理値算出部160c、論理式変換部160d、BDD構築部160e、BDD変換部160f、ダイアグラム実行部160g、検索結果出力部160hに対応する(あるいは、検索プロセス407aは、図46の制御部260に示した各機能部260a〜260h、図58の制御部360に示した各機能部360a〜360iに対応する)。
また、HDD408は、XMLデータ150a、検索クエリ150b、分解検索クエリ150c、抽出結果テーブル150d、論理値テーブル150e、変換論理式データ150f、第1ダイアグラムデータ150g、第2ダイアグラムデータ150h、評価結果テーブル150i、検索結果データ150jに対応する各種データ408aを記憶する。(あるいは、各種データ408は、図46に示した各データ250a〜250j、図58に示した各データ350a〜350lに対応する)。CPU407は、HDD408に格納された各種データ408aを読み出して、RAM403に格納し、RAM403に格納された各種データ403aを利用して、検索クエリを評価する。
ところで、図71に示した検索プログラム408bは、必ずしも最初からHDD408に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータに接続される「他のコンピュータ(またはサーバ)」などに検索プログラム408bを記憶しておき、コンピュータがこれらから検索プログラム408bを読み出して実行するようにしてもよい。
上記の実施例を含む実施形態に関し、以下の付記を開示する。
(付記1)検索装置が、
複数の変数からなる論理条件を含む検索条件を受け付けるステップと、
記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換するステップと、
前記検索条件をBDD法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成するステップと、
遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行うステップと、
を実行することを特徴とする真偽判定方法。
(付記2)前記起点変数のレベルと前記所定レベルとの差を前記起点変数に対応付けたレベルテーブルを前記記憶装置に記憶させておき、前記真偽判定を行うステップにおいて、前記レベルテーブルに基づいて、前記ビット列の前記所定桁数を決定することを特徴とする付記1に記載の真偽判定方法。
(付記3)第1の到達変数のレベルが前記所定レベルを超えている場合には、前記第1の到達変数を起点変数とした次の第2の到達変数に遷移するビット列の先頭ビットに、前記第1の到達変数のレベルから前記所定レベルを差し引いた数のダミー値を挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記1に記載の真偽判定方法。
(付記4)前記起点変数と前記到達変数との間に中間変数が含まれ、前記到達変数のレベルが前記所定レベルを超えている場合には、前記所定レベルから、前記到達変数に遷移する一つ前の中間変数のレベルを差し引き、差し引いた値から更に1を差し引いた数のダミー値を前記起点変数から前記到達変数まで遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記1または3に記載の真偽判定方法。
(付記5)前記到達変数を除く遷移先の変数のレベルと遷移元の変数のレベルとのレベル差が2以上の場合には、遷移先の変数のレベルから遷移元の変数のレベルを差し引き、差し引いた値から更に1を差し引いた数のダミー値を遷移元の変数から遷移先の変数に遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記1または3に記載の真偽判定方法。
(付記6)各変数の間にダミー変数を挿入することにより、初期の変数から最終の変数までの遷移回数を統一することを特徴とする付記1、3、4または5に記載の真偽判定方法。
(付記7)前記遷移テーブルに、変数の論理値が求まっているか否かの状態を示す不明論理変数を追加し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして、遷移先となる前記到達変数を特定した結果、前記不明論理変数に対応する変数の論理値が必要となった場合に、論理値の必要となった変数の論理値を算出すると共に、前記不明論理変数の状態を論理値が求まっている状態に設定することを特徴とする付記1〜6のいずれか一つに記載の真偽判定方法。
(付記8)コンピュータに、
複数の変数からなる論理条件を含む検索条件を受け付ける受付手順と、
記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換する変換手順と、
前記検索条件をBDD法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成する作成手順と、
遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行う判定手順と、
を実行させることを特徴とする真偽判定プログラム。
(付記9)前記起点変数のレベルと前記所定レベルとの差を前記起点変数に対応付けたレベルテーブルを前記記憶装置に記憶させる記憶手順を更に実行させ、前記判定手順において、前記レベルテーブルに基づいて、前記ビット列の前記所定桁数を決定することを特徴とする付記8に記載の真偽判定プログラム。
(付記10)前記作成手順は、第1の到達変数のレベルが前記所定レベルを超えている場合には、前記第1の到達変数を起点変数とした次の第2の到達変数に遷移するビット列の先頭ビットに、前記第1の到達変数のレベルから前記所定レベルを差し引いた数のダミー値を挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする付記8に記載の真偽判定プログラム。
周知技術のBDDを説明するための図である。 本実施例1にかかる検索装置の概要および特徴を説明するための図である。 本実施例1にかかる検索システムの構成を示す図である。 本実施例1にかかる検索装置の構成を示す機能ブロック図である。 本実施例1にかかるXMLデータのデータ構造の一例を示す図である。 本実施例1にかかる分解検索クエリのデータ構造の一例を示す図である。 本実施例1にかかる検索クエリのデータ構造の一例を示す図である。 本実施例1にかかる抽出結果テーブルのデータ構造の一例を示す図である。 本実施例1にかかる論理値テーブルのデータ構造の一例を示す図である。 本実施例1にかかる第1ダイアグラムデータのデータ構造の一例を示す図である。 本実施例1にかかる評価結果テーブルのデータ構造の一例を示す図である。 本実施例1にかかる検索結果データのデータ構造の一例を示す図である。 TOPスタックとTrueスタックとFalseスタックの状態変化を示す図(1)である。 TOPスタックとTrueスタックとFalseスタックの状態変化を示す図(2)である。 TOPスタックとTrueスタックとFalseスタックの状態変化を示す図(3)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(1)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(2)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(3)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(4)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(5)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(6)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(7)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(8)である。 第1レベルテーブルと第1遷移テーブルの状態変化を示す図(9)である。 本実施例1にかかる第2ダイアグラムデータのデータ構造の一例を示す図である。 BDD変換部の処理を説明するための第1ダイアグラムデータを示す図である。 本実施例1にかかるBDD変換部の処理を説明するための図(1)である。 本実施例1にかかるBDD変換部の処理を説明するための図(2)である。 本実施例1にかかるBDD変換部の処理を説明するための図(3)である。 本実施例1にかかるBDD変換部の処理を説明するための図(4)である。 本実施例1にかかるダイアグラム実行部の処理を説明するための図(1)である。 本実施例1にかかるダイアグラム実行部の処理を説明するための図(2)である。 検索結果データを出力したモニタ画面の一例を示す図である。 本実施例1にかかる検索装置の処理手順を示すフローチャートである。 本実施例1にかかるBDD構築処理の処理手順を示すフローチャートである。 本実施例1にかかる論理変数対応処理の処理手順を示すフローチャートである。 本実施例1にかかるNOT対応処理の処理手順を示すフローチャートである。 本実施例1にかかるAND対応処理の処理手順を示すフローチャートである。 本実施例1にかかるOR対応処理の処理手順を示すフローチャートである。 本実施例1にかかる終了処理の処理手順を示すフローチャートである。 本実施例1にかかるBDD変換処理の処理手順を示すフローチャート(1)である。 本実施例1にかかるBDD変換処理の処理手順を示すフローチャート(2)である。 本実施例1にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。 本実施例1にかかる返答項目出力処理の処理手順を示すフローチャートである。 本実施例2にかかる検索装置の概要および特徴を説明するための図である。 ビット列の桁数を所定桁数に統一する場合の処理の概要を説明するための図である。 本実施例2にかかる検索装置の構成を示す機能ブロック図である。 本実施例2にかかる第2ダイアグラムデータのデータ構造の一例を示す図である。 本実施例2にかかるBDD変換部の処理を説明するための図(1)である。 本実施例2にかかるBDD変換部の処理を説明するための図(2)である。 本実施例2にかかるBDD変換部の処理を説明するための図(3)である。 本実施例2にかかるダイアグラム実行部の処理を説明するための図(1)である。 本実施例2にかかるダイアグラム実行部の処理を説明するための図(2)である。 本実施例2にかかる検索装置の処理手順を示すフローチャートである。 本実施例2にかかるBDD変換処理の処理手順を示すフローチャート(1)である。 本実施例2にかかるBDD変換処理の処理手順を示すフローチャート(2)である。 本実施例2にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャートである。 本実施例3にかかる検索装置の概要および特徴を説明するための図である。 本実施例3にかかる検索装置の構成を示す機能ブロック図である。 本実施例3にかかる計算量見積テーブルのデータ構造の一例を示す図である。 本実施例3にかかる計算量テーブルのデータ構造の一例を示す図である。 本実施例3にかかるBDD構築部の処理を説明するための図(1)である。 本実施例3にかかるBDD構築部の処理を説明するための図(2)である。 本実施例3にかかるBDD構築部の処理を説明するための図(3)である。 本実施例3にかかるBDD構築部の処理を説明するための図(4)である。 本実施例3にかかるBDD構築部の処理を説明するための図(5)である。 本実施例3にかかる検索装置の処理手順を示すフローチャートである。 本実施例3にかかるBDD構築処理2の処理手順を示すフローチャート(1)である。 本実施例3にかかるBDD構築処理2の処理手順を示すフローチャート(2)である。 本実施例3にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャート(1)である。 本実施例3にかかる論理式判定ダイアグラム実行処理の処理手順を示すフローチャート(2)である。 実施例にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
符号の説明
10a 論理値テーブル
20 2分木
20a レベルテーブル
20b 遷移テーブル
50 ネットワーク
60 端末装置
100,200,300 検索装置
110,210,310 入力部
120,220,320 出力部
130,230,330 通信制御IF部
140,240,340 入出力制御IF部
150,250,350 記憶部
150a,250a,350 XMLデータ
150b,250b,350b 検索クエリ
150c,250c,350c 分解検索クエリ
150d,250d,350f 抽出結果テーブル
150e,250e,350g 論理値テーブル
150f,250f,350h 変換論理式データ
150g,250g,350i 第1ダイアグラムデータ
150h,250h,350j 第2ダイアグラムデータ
150i,250i,350k 評価結果テーブル
150j,250j,350l 検索結果データ
151,251,351 第1レベルテーブル
152,252,352 第1遷移テーブル
153 第2レベルテーブル
154,253 第2遷移テーブル
160,260,360 制御部
160a,260a,360a 検索クエリ分解部
160b,260b,360c 抽出結果テーブル生成部
160c,260c,360d 論理値算出部
160d,260d,360e 論理式変換部
160e,260e,360f BDD構築部
160f,260f,360g BDD変換部
160g,260g,360h ダイアグラム実行部
160h,260h,360i 検出結果出力部
350d 計算量見積テーブル
350e 計算量テーブル
360b 計算量見積部
400 コンピュータ
401 入力装置
402 モニタ
403 RAM
403a,408a 各種データ
404 ROM
405 媒体読取装置
406 通信装置
407 CPU
408 HDD
408b 検索プログラム
409 バス

Claims (7)

  1. 検索装置が、
    複数の変数からなる論理条件を含む検索条件を受け付けるステップと、
    記憶装置に記憶された各検索対象データを各変数の真偽結果に基づく論理ビット列に変換するステップと、
    前記検索条件をBDD法を用いて、起点変数から所定レベル以上の到達変数まで到達するための各レベルの変数の真偽を示したビット列と前記起点変数との組合せを前記到達変数に対応付けた遷移テーブルを作成するステップと、
    遷移先の到達変数を起点変数とし、前記検索対象データの論理ビット列のうち前記起点変数から所定桁数のビット列を取り出し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして遷移先となる前記到達変数を特定することにより前記検索対象データの検索条件に関する真偽判定を行うステップと、
    を実行することを特徴とする真偽判定方法。
  2. 前記起点変数のレベルと前記所定レベルとの差を前記起点変数に対応付けたレベルテーブルを前記記憶装置に記憶させておき、前記真偽判定を行うステップにおいて、前記レベルテーブルに基づいて、前記ビット列の前記所定桁数を決定することを特徴とする請求項1に記載の真偽判定方法。
  3. 第1の到達変数のレベルが前記所定レベルを超えている場合には、前記第1の到達変数を起点変数とした次の第2の到達変数に遷移するビット列の先頭ビットに、前記第1の到達変数のレベルから前記所定レベルを差し引いた数のダミー値を挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする請求項1に記載の真偽判定方法。
  4. 前記起点変数と前記到達変数との間に中間変数が含まれ、前記到達変数のレベルが前記所定レベルを超えている場合には、前記所定レベルから、前記到達変数に遷移する一つ前の中間変数のレベルを差し引き、差し引いた値から更に1を差し引いた数のダミー値を前記起点変数から前記到達変数まで遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする請求項1または3に記載の真偽判定方法。
  5. 前記到達変数を除く遷移先の変数のレベルと遷移元の変数のレベルとのレベル差が2以上の場合には、遷移先の変数のレベルから遷移元の変数のレベルを差し引き、差し引いた値から更に1を差し引いた数のダミー値を遷移元の変数から遷移先の変数に遷移するビット列の後ろに挿入することで、ビット列の桁数を所定桁数に統一することを特徴とする請求項1または3に記載の真偽判定方法。
  6. 各変数の間にダミー変数を挿入することにより、初期の変数から最終の変数までの遷移回数を統一することを特徴とする請求項1、3、4または5に記載の真偽判定方法。
  7. 前記遷移テーブルに、変数の論理値が求まっているか否かの状態を示す不明論理変数を追加し、前記起点変数および前記ビット列の組合せと、前記遷移テーブルとを基にして、遷移先となる前記到達変数を特定した結果、前記不明論理変数に対応する変数の論理値が必要となった場合に、論理値の必要となった変数の論理値を算出すると共に、前記不明論理変数の状態を論理値が求まっている状態に設定することを特徴とする請求項1〜6のいずれか一つに記載の真偽判定方法。
JP2008207367A 2008-08-11 2008-08-11 真偽判定方法 Active JP5195149B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008207367A JP5195149B2 (ja) 2008-08-11 2008-08-11 真偽判定方法
US12/479,569 US8655921B2 (en) 2008-08-11 2009-06-05 True/false decision method for deciding whether search query containing logical expression is true or false

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008207367A JP5195149B2 (ja) 2008-08-11 2008-08-11 真偽判定方法

Publications (2)

Publication Number Publication Date
JP2010044523A true JP2010044523A (ja) 2010-02-25
JP5195149B2 JP5195149B2 (ja) 2013-05-08

Family

ID=41653836

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008207367A Active JP5195149B2 (ja) 2008-08-11 2008-08-11 真偽判定方法

Country Status (2)

Country Link
US (1) US8655921B2 (ja)
JP (1) JP5195149B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012128603A (ja) * 2010-12-14 2012-07-05 Canon Marketing Japan Inc 情報処理装置、情報処理方法、及びコンピュータプログラム
JP2015118609A (ja) * 2013-12-19 2015-06-25 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
WO2017163342A1 (ja) * 2016-03-23 2017-09-28 株式会社日立製作所 計算機システム及びデータの分類方法
JP7354014B2 (ja) 2020-02-20 2023-10-02 ヤフー株式会社 情報処理装置、情報処理方法及び情報処理プログラム

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9138143B2 (en) * 2010-08-17 2015-09-22 Fujitsu Limited Annotating medical data represented by characteristic functions
US9286371B2 (en) * 2010-12-23 2016-03-15 Sap Se Presenting a multidimensional decision table
JP6020031B2 (ja) 2012-10-19 2016-11-02 富士通株式会社 抽出プログラム、抽出装置及び抽出方法
JP6003561B2 (ja) 2012-11-15 2016-10-05 富士通株式会社 抽出プログラム、抽出装置及び抽出方法
JP5962471B2 (ja) * 2012-11-30 2016-08-03 富士通株式会社 抽出プログラム、抽出装置及び抽出方法
CN105159665B (zh) * 2015-08-07 2018-09-25 珠海格力电器股份有限公司 一种自动绘制空调机组设备监测界面的方法和绘制系统
US10956416B2 (en) * 2019-03-12 2021-03-23 International Business Machines Corporation Data schema discovery with query optimization
CN110427969B (zh) * 2019-07-01 2020-11-27 创新先进技术有限公司 数据处理方法、装置和电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0380366A (ja) * 1989-08-23 1991-04-05 Hitachi Ltd ストリングサーチ方法およびそのための装置
JPH03218571A (ja) * 1989-03-09 1991-09-26 Fujitsu Ltd 多段論理回路の最適化処理方法
JPH04264979A (ja) * 1991-02-20 1992-09-21 Fujitsu Ltd 2分決定グラフの変数順決定方式
JPH06215065A (ja) * 1992-10-28 1994-08-05 Nippon Telegr & Teleph Corp <Ntt> 論理関数データ処理装置
WO1996034351A1 (fr) * 1995-04-25 1996-10-31 Hitachi, Ltd. Procede de conception de circuits integres a semi-conducteurs et appareil de conception automatique
JPH08328920A (ja) * 1995-05-02 1996-12-13 Hewlett Packard Co <Hp> データベース照会最適化システム
JPH10247203A (ja) * 1997-01-27 1998-09-14 Internatl Business Mach Corp <Ibm> リレーショナル・データベースに照会処理ツリーを適用する方法及びシステム
JP2003036269A (ja) * 2001-07-23 2003-02-07 Sony Corp 情報処理装置および情報処理方法並びにこの情報処理のプログラムが記録された記録媒体

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5243538B1 (en) * 1989-08-09 1995-11-07 Hitachi Ltd Comparison and verification system for logic circuits and method thereof
FR2690541B1 (fr) * 1992-04-28 1994-06-17 Bull Sa Procede d'elaboration automatique d'une representation implicite des impliquants premiers d'une fonction.
JP2000330786A (ja) 1999-05-20 2000-11-30 Nec Corp データ処理方法及びデータ処理装置並びにデータ処理プログラムを記録した記録媒体
US20030005407A1 (en) * 2000-06-23 2003-01-02 Hines Kenneth J. System and method for coordination-centric design of software systems
US6687883B2 (en) * 2000-12-28 2004-02-03 International Business Machines Corporation System and method for inserting leakage reduction control in logic circuits
US20080021795A1 (en) * 2004-03-01 2008-01-24 Hardi Hungar Device for generating selection structures, for making selections according to selection structures, and for creating selection descriptions
US7007009B2 (en) * 2001-03-15 2006-02-28 International Business Machines Corporation Representation for data used in query optimization
US7076407B2 (en) * 2001-08-24 2006-07-11 Wayne Biao Liu Space reduction in compositional state systems
JP4365162B2 (ja) * 2003-08-20 2009-11-18 富士通株式会社 構造化文書のデータを検索する装置および方法
US7865339B2 (en) * 2004-07-12 2011-01-04 Sri International Formal methods for test case generation
JP4481762B2 (ja) * 2004-08-13 2010-06-16 富士通株式会社 論理検証装置、論理検証方法、論理検証プログラムおよび記録媒体
US8195006B2 (en) * 2004-08-30 2012-06-05 Bauhaus-Universitaet Weimar Method and device for representing a digital image on a surface which is non-trivial in terms of its geometry and photometry
US7546563B2 (en) * 2005-06-28 2009-06-09 Fujitsu Limited Validating one or more circuits using one of more grids
JP4528728B2 (ja) * 2006-01-31 2010-08-18 株式会社東芝 デジタル回路の自動設計装置、自動設計方法、および自動設計プログラム

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03218571A (ja) * 1989-03-09 1991-09-26 Fujitsu Ltd 多段論理回路の最適化処理方法
JPH0380366A (ja) * 1989-08-23 1991-04-05 Hitachi Ltd ストリングサーチ方法およびそのための装置
JPH04264979A (ja) * 1991-02-20 1992-09-21 Fujitsu Ltd 2分決定グラフの変数順決定方式
JPH06215065A (ja) * 1992-10-28 1994-08-05 Nippon Telegr & Teleph Corp <Ntt> 論理関数データ処理装置
WO1996034351A1 (fr) * 1995-04-25 1996-10-31 Hitachi, Ltd. Procede de conception de circuits integres a semi-conducteurs et appareil de conception automatique
JPH08328920A (ja) * 1995-05-02 1996-12-13 Hewlett Packard Co <Hp> データベース照会最適化システム
JPH10247203A (ja) * 1997-01-27 1998-09-14 Internatl Business Mach Corp <Ibm> リレーショナル・データベースに照会処理ツリーを適用する方法及びシステム
JP2003036269A (ja) * 2001-07-23 2003-02-07 Sony Corp 情報処理装置および情報処理方法並びにこの情報処理のプログラムが記録された記録媒体

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012128603A (ja) * 2010-12-14 2012-07-05 Canon Marketing Japan Inc 情報処理装置、情報処理方法、及びコンピュータプログラム
JP2015118609A (ja) * 2013-12-19 2015-06-25 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
WO2017163342A1 (ja) * 2016-03-23 2017-09-28 株式会社日立製作所 計算機システム及びデータの分類方法
JPWO2017163342A1 (ja) * 2016-03-23 2018-12-06 株式会社日立製作所 計算機システム及びデータの分類方法
JP7354014B2 (ja) 2020-02-20 2023-10-02 ヤフー株式会社 情報処理装置、情報処理方法及び情報処理プログラム

Also Published As

Publication number Publication date
JP5195149B2 (ja) 2013-05-08
US20100036815A1 (en) 2010-02-11
US8655921B2 (en) 2014-02-18

Similar Documents

Publication Publication Date Title
JP5195149B2 (ja) 真偽判定方法
US10146532B2 (en) Apparatus and method for detecting code cloning of software
TWI729472B (zh) 特徵詞的確定方法、裝置和伺服器
CN1834903B (zh) 使文本适合于图形内形状的方法和系统
CN113242296B (zh) 一种集群中主节点选举方法、系统及介质
JP5125662B2 (ja) クエリ変換方法および検索装置
JP5169831B2 (ja) 能動学習システム、方法およびプログラム
US20220035602A1 (en) Graph-Based Vectorization for Software Code Optimization References
CN111831785A (zh) 敏感词检测方法、装置、计算机设备及存储介质
JP5278535B2 (ja) データベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法
CN113342922A (zh) 一种基于标签细粒度自监督的跨模态检索方法
CN113032548A (zh) 信息处理装置、存储介质及信息处理方法
CN106648636B (zh) 一种基于图挖掘的软件函数变更预测系统及方法
CN113032336A (zh) 信息处理装置、存储介质及信息处理方法
JP2009169689A (ja) データ分類方法およびデータ処理装置
JPWO2008072459A1 (ja) 能動学習システム、能動学習方法、及び能動学習用プログラム
JP5223380B2 (ja) 評価方法および検索装置
US9189249B2 (en) Method for automatically defining icons
CN114995869A (zh) 一种配置文件解析方法、装置、设备及介质
JP5396843B2 (ja) 検索方法および検索装置
CN114791865A (zh) 一种基于关系图的配置项自洽性检测方法、系统和介质
CN114612211A (zh) 一种启发式自引入技术债务数据标注及训练方法和系统
JP7381290B2 (ja) 計算機システム及びデータの管理方法
JP5803481B2 (ja) 情報処理装置及び情報処理プログラム
CN106293897B (zh) 组件自动化调度系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110513

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130121

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160215

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5195149

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150