JPH08137914A - データ検索装置、データ処理装置、データ検索方法及びデータ処理方法 - Google Patents

データ検索装置、データ処理装置、データ検索方法及びデータ処理方法

Info

Publication number
JPH08137914A
JPH08137914A JP7233927A JP23392795A JPH08137914A JP H08137914 A JPH08137914 A JP H08137914A JP 7233927 A JP7233927 A JP 7233927A JP 23392795 A JP23392795 A JP 23392795A JP H08137914 A JPH08137914 A JP H08137914A
Authority
JP
Japan
Prior art keywords
node
section
length
data
binary tree
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
JP7233927A
Other languages
English (en)
Other versions
JP2768921B2 (ja
Inventor
Mutsumi Fujiwara
睦 藤原
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP7233927A priority Critical patent/JP2768921B2/ja
Publication of JPH08137914A publication Critical patent/JPH08137914A/ja
Application granted granted Critical
Publication of JP2768921B2 publication Critical patent/JP2768921B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

(57)【要約】 【課題】 検索用データの更新所要時間が短いデータ検
索装置を提供する 【解決手段】 区分手段4が、キー列による検索対象と
なるコード列1から、第1の部分列2と第2の部分列3
とを決定する。生成手段7が、前記各部分列について、
当該部分列の後方の部分である後方列と、その後方列の
先頭の前記コード列中における位置とを対照する辞書デ
ータ5,6を生成する。検索手段8が、前記辞書データ
に基づいて、キー列の全部又は一部を前方列とする後方
列を検索する。除去手段9が、前記後方列の重複検出を
除去する。変更手段10によって前記コード列を変更す
ると、更新手段11が、前記変更の内容に基づいて、変
更に係る前記部分列の辞書データを更新する。第1の維
持手段12が、前記各境界の間隔を前記キー最大長以上
に維持し、第2の維持手段13が、前記各境界の間隔を
所定の長さ以下に維持する。

Description

【発明の詳細な説明】
【0001】
【発明が属する技術分野】本発明は、文字列などのコー
ド列のうち、キー列の全体又は一部を含む部分を検索す
る、データ検索装置及びデータ検索方法の改良に関す
る。また、本発明は、データを処理するデータ処理装置
及びデータ検索方法の改良に関する。
【0002】
【従来の技術】従来から、文字列などのコード列から、
所定のキー列(パターン)の出現位置を全て発見する、
データ検索装置及びデータ検索方法が知られている。図
75は、文字列s中に存在するパターンpの例を示す。
コード列の検索は、辞書・索引の応用分野であり、具体
的適用分野としてはテキストエディタ、テキストデータ
ベース、音声認識等のパターンマッチング、DNA解析
等のパターン分析、データ圧縮(substitutional codin
g) などが挙げられる。
【0003】コード列の検索の最も単純な手法は、コー
ド列の全ての部分を、キー列と順次照合することである
が、この手法は、検索所要時間が文字列sの長さに比例
して増大するという問題点を有していた。
【0004】検索所要時間を文字列sの長さによらず、
パターンpの出現回数に比例する程度に抑えるために
は、一次元の文字列sとは別に、検索用データを用意し
ておく手法が用いられる。検索用データの構造として
は、position tree (Majster, M.et. al. 1980), suffi
x tree (McCreght, E. 1976), directed acyclic word
graph (Blumer, A. et al. 1985) が知られる。
【0005】これらのデータ構造は、(1)使用記憶領
域がコード列sの長さに比例する程度で、過度に増大し
ない、(2)検索所要時間もキー列p(パターンP)の
長さと出現位置の数に比例する程度で、過度に増大しな
い、という優れた特長を有する。
【0006】これらのデータ構造は、Trie(digital sea
rch tree) を基本構造とする。図76に例示する様に、
Trieは、複数のノードをルートから末端まで樹状に接続
したデータ構造で、ルート(根)から末端ノード(葉)
に至るパスの各エッジにつけられたラベルが文字列wi
を綴り出す木構造である。これらのデータ構造では、葉
はある文字列wi (の終端)に対応する。また、根から
ある節xを経て葉に至るパスは、根から節xまでのパス
が綴り出す文字列をprefix(先頭側の部分文字列)とす
る文字列wi に対応する。
【0007】従来のデータ構造であるposition tree, s
uffix tree, directed acyclic word graph は、上記の
Trieの応用である。
【0008】このうち、position tree は、コード列s
中の各位置から始まる同定部分列を文字列としたTrieで
ある。ここで、同定部分列とは、その位置固有の最も短
い文字列である。図77は、コード列“abbabb
$”に対する、位置と同定部分列の対照表(辞書)の例
である。この図において、記号“$”は、位置を特定す
るためにコード列の終端に付加されたダミーコードであ
る。また、図78は、コード列“abbabb$”の辞
書を表すposition tree の例を示す。
【0009】次に、suffix tree は、コード列sの各su
ffix(後方部分列)を文字列wi としたTrieであり、図
79はsuffix tree の例を示す。suffix tree は、Trie
のうち最も単純なもので、このsuffix tree では、根
(ルート)から葉(末端ノード)に至るパスの各エッジ
につけられたラベルが、コード列sのsuffixを綴り出す
木構造Tである。suffix tree では、葉はあるsuffixの
終端(=sの終端)に対応する。また、sの任意のsuff
ixに対して、Tは、根から葉に至るパスであってそれを
綴り出すものをもれなく含む。また、根からある節xを
経て葉に至るパスは、根から節xまでのパスが綴り出す
文字列をprefixとするコード列sのsuffixに対応する。
【0010】directed acyclic word graph は、suffix
tree の特定のパスをマージ(共用)したもので、図8
0はdirected acyclic word graph の例を示す。
【0011】
【発明が解決しようとする課題】しかしながら、従来の
データ構造では、コード列sを更新したとき、対応する
検索用データの更新所要時間が、コード列sの長さに比
例して増大していた。その理由は、例えばsuffix tree
においてはTrieはコード列sの全てのsuffixを反映して
おり、コード列sが一部でも変更されると、変更箇所以
前から開始する全てのsuffixが影響を受け、変更がTrie
全体に及ぶからである。この傾向は、変更箇所がコード
列sの終端に近いほど大きい。
【0012】例えば、図79において、コード列sの末
尾の“c”を削除した場合、3つの辺(c)が消去さ
れ、2つの辺のラベル(abc)が変更される。この結
果、従来のデータ検索装置及びデータ検索方法では、デ
ータの更新所要時間が長く、更新が頻繁な用途において
は実用性が低いという問題点が存在していた。
【0013】これに対して、コード列を複数の部分列に
区分し、各部分列に対して個別にTrieを作成しておくこ
とも考えられる。しかし、この場合も2つの問題点が存
在する。1つの問題点は、キー列に対応するコード列中
の部分が途中で前後に分断され、前部と後部がそれぞれ
別個のTrieに含まれた場合、当該部分をキー列で検索す
ることができないことである。
【0014】もう1つの問題点は、可変長である各部分
列に対し、編集や検索などのデータ処理が効率的に行え
ないことである。例えば、部分列は、コード列の編集に
よって変化し可変長であるから、部分列に対する処理の
ためには、常に、各部分列とコード列中の位置を対照す
る必要がある。
【0015】部分列に対する効率的なデータ処理の困難
さは、データ検索に限らず、データ圧縮や文字列編集な
ど、多くの情報処理分野に普遍的に存在する。部分列を
用いる情報処理の一例は、文字列(文章)の編集であ
る。
【0016】データ列を計算機上で処理する際は、デー
タ列中の各データ値とそのデータ列中での位置を対照す
る必要が生じる。例えば、文字列の編集においては、文
字コード列のうち所定の順番(位置)のコードを得る必
要がしばしば生じる。例えば、文字列の100文字目を
取り出すなどである。一方、編集操作によってコード列
中の特定のコードの位置は変化しうる。例えば、文字列
の先頭に10文字の追加を行えば、それまでの文字列中
の文字コードの先頭からの位置はすべて10(文字)増
加する。
【0017】データ列中のデータの位置は、上記文字列
の場合の「何文字目」というような離散的な値に限られ
るものではなく、浮動小数点で表わされる実数の区間を
もって1つのデータ値が連続する範囲とする必要がある
場合も多い。例えばデジタル回路の信号値はL(ロ
ー)、H(ハイ)、F (フローティング、未定義)で表
わされるが、シミュレーション等でこれらの値の時系列
を扱う際には信号値の継続時間は実数値とし、計算機上
ではそれらを浮動小数点として扱うのが簡便である。こ
のような応用においては、文字列の場合と同様の編集が
行われるのはもちろん、任意の時点のデータ値だけでな
く、ある時点の値がどこまで継続するのか、またどこか
ら始まっているのか、2つの時点の間にデータ値の変化
が(何回)あるのか等の問い合わせにも迅速に答える必
要がある。
【0018】ここで、部分列に対する効率的なデータ処
理の困難さを、単純な例によって説明する。この例は、
0,1又はNのいずれかのコード値を取るコードの列で
あり、同一コード値は多くの場合、複数連続するものと
する。このような例は、少なくとも、ビットマップによ
るグラフィックス表示において存在し得る。このような
コードの列の具体例を次に示す。
【0019】
【表1】 位置 データ −−−− −−−−− 1 0 2 0 3 0 4 N 5 N 6 0 7 0 8 0 9 0 10 1 11 1 12 1 13 1 14 1 15 1 16 0
【0020】この例では、区間[1..3]に0、区間
[4..5]にN、区間[6..9]に0、区間[1
0..15]に1、区間[16..16]に0が格納さ
れている。この例は、コード列が、連続している同一コ
ード値の列すなわち区間に区分されている状態と考える
こともできる。
【0021】このようなデータをコンピュータで保持し
処理する手法として、まず、連続する番地のメモリにコ
ード値を順番通りに格納することが考えられる(第1の
手法)。第1の手法によって表1のコード列を表したも
のを図81に示す。第1の手法では、各コード値の位置
が、当該コード値を格納する記憶領域の番地と、コード
列の記憶領域の先頭番地との、差に比例する。このた
め、特定位置のコード値のアドレスを、機械的な加減乗
除を用いて容易に算出することができる。
【0022】すなわち、Aをコード列の記憶領域の先頭
番地とした場合、コード値のアドレスは、
【数1】アドレス=位置+A−1 となる。
【0023】しかし、この手法には次の問題点が存在す
る。 (1)データがコード数分のメモリを占有するので、メ
モリ効率が悪い。特に、同一コード値が多数連続する場
合、メモリは無駄に浪費されることとなる。 (2)データが複数のコードごとに別個に格納されてい
るので、同一コード値の連続範囲の特定に長時間を要す
る。すなわち、連続範囲を特定するためには、前後のコ
ード値を読み出しながら連続範囲をカウントする必要が
ある。 (3)部分列の長さ変更を伴う編集の際には、変更対象
位置以降の全てのデータを記憶領域上で前方又は後方へ
移動させるため、処理に長時間を要する。例えば、図8
2は、時点5(番地はA+4)のコード値Nの直後にコ
ード値1の区間[6..8]を挿入する場合を示す。こ
の場合、この図に示すように、番地A+5からA+15
までのデータを番地A+8からA+18の領域に転送す
るという繁雑な処理を要する。
【0024】(4)コードの単位に対応する記憶領域が
コード数分すなわち位置の数だけ必要なため、記憶領域
を制限すればコードの単位ごとの情報量が制限される。
一方、コードの単位ごとの最大の情報量を増やせば、膨
大な記憶領域を消費する。すなわち位置の数が少なくな
って精度=位置の刻みが大まかになる。逆に位置の精度
を上げる、つまり位置の刻みを細かくすれば位置の数が
増えて膨大な記憶領域を要する。このため、実際的には
整数のような離散的な長さ(位置)しか扱えない。次
に、他の手法として、コード値と、当該コード値が連続
して存在する部分列の範囲とのペアを、連続する記憶領
域に部分列の並び順に格納することも考えられる(第2
の手法)。図83は、表1のコード列を、第2の手法に
よって格納したデータを示す。
【0025】第2の手法によれば、コード値が連続する
区間を単位としてメモリが利用されるので、所要メモリ
量が位置の数ではなく区間の数に比例し、メモリ効率は
向上する。また、同一コード値の連続範囲は、データか
ら端的に得られる。さらに、区間による長さの精度(長
さの種類=離散的か連続的か)の相違が一層許容され、
例えば、浮動小数点の処理が容易になる。
【0026】しかし、この場合も、部分列(区間)の長
さや部分列の個数を変更するには、変更箇所以降の全て
の部分列の範囲のデータを書き替えるという繁雑な処理
を要する。さらに、この手法では、特定位置のコード値
を得るには、二分法などを用いてその位置を範囲のデー
タから探索しなければならない。
【0027】二分法を用いる場合、二分探索木を用いれ
ば処理が効率化できる。すなわち、コード列の中ほどの
部分列をルートノードとする。また、部分列の範囲のデ
ータと、当該部分列のコード値を各ノードに持たせる。
部分列の範囲のデータは、範囲の始点と終点によって表
してもよいし、また、範囲の始点のみとして、終点は次
の部分列のノードが持つ始点に基づいて得てもよい。図
84は、このような従来の手法において、表1に対応す
る部分木の例である。この図では、各ノードに、対応す
る部分列の始点位置と(円内)、当該部分列のコード値
(各円の下方)が割り当てられる。
【0028】そして、一のノードの末端側に位置する各
ノードからなる部分木は、一方(例えば図において左)
の部分木が前記一のノードよりも前の部分列、右の部分
木は前記一のノードよりも後の部分列に対応する。しか
し、この場合も、部分列の位置の変更の際は、変更箇所
以降の範囲のデータを全て変更するという煩雑な処理を
要する。
【0029】また、コード値と、当該コード値が連続し
て存在する部分列の長さとのペアを、連続する記憶領域
に部分列の並び順に格納することも考えられる(第3の
手法)。図85は、従来の第3の手法におけるデータの
例である。この場合、部分列の伸縮の際に当該区間の長
さの変更のみで足りるという利点はあるが、特定位置の
コードを得るためには、先頭又は末尾から区間の長さの
加算を続けるという煩雑な処理を要する。また、特定の
区間に関する情報のみからは、当該区間の区間長しか知
ることができないので、この場合二分法を使うこともで
きない。
【0030】また、各区間のデータとして、連続領域で
はなくリスト構造(linear list) を用いれば、不連続な
領域をポインタで接続することによってデータを表すこ
とができる(第4の手法)。図86は、従来の第4の手
法におけるデータ構造を示す。
【0031】第4の手法によれば、任意の区間の追加・
削除・分割・併合の際にメモリ上でデータを転送する必
要がなくなるので、データ処理が効率化される。しか
し、この場合、任意の位置の検索について区間長の積算
をしなければならない点は解決しない。
【0032】本発明は、上記のような従来技術の問題点
を解決するために提案されたもので、その目的は、検索
用データの更新所要時間が短いデータ検索装置及びデー
タ検索方法を提供することである。また、本発明の他の
目的は、単純な構成又は処理手順のデータ検索装置及び
データ検索方法を提供することである。また、本発明の
他の目的は、検索を高速に行うデータ検索装置及びデー
タ検索方法を提供することである。また、本発明の他の
目的は、効率的にデータを処理するデータ処理装置及び
データ処理方法を提供することである。このデータ処理
装置及びデータ処理方法は、前記データ検索装置及びデ
ータ検索方法の実施に特に適したものである。さらに具
体的には、本発明の他の目的は、データ変更の手続が簡
潔なデータ処理装置及びデータ処理方法を提供すること
である。また、本発明の他の目的は、メモリを効率的に
利用するデータ処理装置及びデータ処理方法を提供する
ことである。
【0033】
【課題を解決するための手段】上記の目的を達成するた
め、請求項1のデータ検索装置は、キー列による検索対
象となるコード列から、第1の境界によって区分されキ
ー列の最大長であるキー最大長より長い又は等しい複数
の第1の部分列と、第2の境界によって区分され前記第
1の境界の前後少なくともキー最大長又はその直前ずつ
にわたる第2の部分列と、を決定する区分手段と、前記
各部分列について、当該部分列の後方の部分である後方
列と、その後方列の先頭の前記コード列中における位置
とを対照する辞書データを生成する生成手段と、前記辞
書データに基づいて、キー列の全体又は一部を前方列と
する後方列を検索する検索手段と、前記コード列を変更
する変更手段と、前記変更の内容に基づいて、変更に係
る前記部分列の辞書データを更新する更新手段と、前記
各境界の間隔を前記キー最大長又はその直前以上維持す
る第1の維持手段と、を有することを特徴とする。
【0034】また、請求項37のデータ検索方法は、請
求項1の発明を方法の観点から把握したものであって、
キー列による検索対象となるコード列から、第1の境界
によって区分されキー列の最大長であるキー最大長より
長い又は等しい複数の第1の部分列と、第2の境界によ
って区分され前記第1の境界の前後少なくともキー最大
長又はその直前ずつにわたる第2の部分列と、を決定す
る区分処理と、前記各部分列について、当該部分列の後
方の部分である後方列と、その後方列の先頭の前記コー
ド列中における位置とを対照する辞書データを生成する
生成処理と、前記辞書データに基づいて、キー列の全体
又は一部を前方列とする後方列を検索する検索処理と、
前記コード列を変更する変更処理と、前記変更の内容に
基づいて、変更に係る前記部分列の辞書データを更新す
る更新処理と、前記各境界の間隔を前記キー最大長又は
その直前以上維持する第1の維持処理と、を含むことを
特徴とする。
【0035】請求項1、37の発明によれば、第1と第
2の境界がキー最大長以上ずれているので、コード列の
うちキー最大長以下のいかなる部分も、第1の境界と第
2の境界の双方によって同時に分断されることがない。
このため、コード列のうち、キー列の全体又は一部と同
一の部分は、少なくともいずれか一つの辞書データには
完全な形で含まれ、各辞書データに基づく検索によって
発見することができる。
【0036】また、請求項1、37の発明では、検索用
データが、辞書データとして、部分列ごとに細分化され
ている。このため、コード列の変更があっても、検索用
データ全体の更新は不要で、変更に影響される部分列の
辞書データのみ更新すれば足りる。したがって、従来よ
りも更新所要時間が短縮できる。この更新所要時間は、
変更に影響される部分列の長さに比例し、コード列全体
の長さには比例しない。このため、請求項1、37の発
明は、更新が頻繁に行われる用途においても実用に耐え
る。
【0037】また、請求項2記載の発明は、請求項1記
載のデータ検索装置において、前記区分手段は、前記コ
ード列について、前記第1の境界と前記第2の境界を交
互に、かつ、境界間のコード数がキー最大長又はその直
前以上になるように設定することによって、前記決定を
行うように構成されたことを特徴とする。
【0038】また、請求項38の発明は、請求項2の発
明を方法の観点から把握したものであって、請求項37
記載のデータ検索方法において、前記区分処理は、前記
コード列について、前記第1の境界と前記第2の境界を
交互に、かつ、境界間のコード数がキー最大長又はその
直前以上になるように設定することによって、前記決定
を行うことを特徴とする。
【0039】請求項2、38の発明では、第1及び第2
の部分列の決定を、第1及び第2の境界を交互に設定す
るという単純な規則的処理で決定することができる。
【0040】また、請求項3記載の発明は、請求項1記
載のデータ検索装置において、前記辞書データはサフィ
ックス・ツリーであり、このツリーは、ルートから末端
ノードに至る複数のノードを有するデータ構造で、末端
ノード以外の各ノードは、経路を表すエッジで1又は2
以上の末端側のノードに接続され、各エッジにはラベル
が設定され、部分列の各後方列にはそれぞれ終端ノード
が対応し、ルートから前記各終端ノードに至るパスのラ
ベルを順次接続すると部分列の各後方列となることを特
徴とする。
【0041】また、請求項39の発明は、請求項3の発
明を方法の観点から把握したものであって、請求項37
記載のデータ検索方法において、前記辞書データはサフ
ィックス・ツリーであり、このツリーは、ルートから末
端ノードに至る複数のノードを含むデータ構造で、末端
ノード以外の各ノードは、経路を表すエッジで1又は2
以上の末端側のノードに接続され、各エッジにはラベル
が設定され、部分列の各後方列にそれぞれ特定の終端ノ
ードが対応し、ルートからそれら終端ノードに至るパス
のラベルを順次接続すると部分列の各後方列となること
を特徴とする。
【0042】請求項3、39の発明では、辞書データ
が、サフィックス・ツリーというツリー構造データの形
式で構成される。このため、ツリーをキー列のコードに
基づいて辿ることによって、キー列の全体又は一部を前
方列とする後方列を高速に検索でき、また、テーブル形
式よりも、小さなデータサイズで辞書データが実現でき
る。
【0043】また、請求項4記載の発明は、請求項3記
載のデータ検索装置において、前記各ラベルは、前記コ
ード列の1単位ずつであることを特徴とする。
【0044】請求項4の発明では、各ラベルは、コード
列の1単位ずつであるため、ラベルのコード数が不統一
である場合と比べて、処理手順が単純化される。
【0045】また、請求項5記載の発明は、請求項3記
載のデータ検索装置において、前記検索手段は、前記キ
ー列の各コードに基づいて前記ツリーのパスを辿ること
によって、キー列に最も長くパスが一致するノードを検
出し、このノードの末端側に位置する各終端ノードに対
応する後方列について、位置を特定することによって検
索を行うように構成されたことを特徴とする。
【0046】また、請求項40の発明は、請求項5の発
明を方法の観点から把握したものであって、請求項39
記載のデータ検索方法において、前記検索処理は、前記
キー列の各コードに基づいて前記ツリーのパスを辿るこ
とによって、キー列に最も長くパスが一致するノードを
検出し、このノードの末端側に位置する各終端ノードに
対応する後方列について、位置を特定することによって
検索を行うことを特徴とする。
【0047】請求項5、40の発明では、検索手段が、
ツリーのうち、キー列に一致するパスが一致する最後の
ノードである最終一致ノードまではパスを辿る。このた
め、キー列の全体を含む後方列の位置のみならず、キー
列の一部を含む後方列も検索される。しかも、キー列の
一部を含む後方列のうち一致コード数が最大のものを特
定するので、キー列の全体を発見できない場合でも、キ
ー列と最も関連性の高い後方列が得られる。
【0048】また、請求項6記載の発明は、請求項3記
載のデータ検索装置において、前記ツリーは、部分列の
終端を指すポインタを、部分列である後方列に対応する
終端ノードにのみ設定し、部分列である後方列及び他の
各後方列については、1コード短い後方列の終端ノード
への第2のエッジを設定したことを特徴とする。
【0049】また、請求項41の発明は、請求項6の発
明を方法の観点から把握したものであって、請求項39
記載のデータ検索方法において、前記ツリーは、部分列
の終端を指すポインタを、部分列である後方列の終端ノ
ードにのみ設定し、部分列である後方列及び他の各後方
列については、当該後方列よりも1コード短い後方列の
終端ノードへの第2のエッジを設定したことを特徴とす
る。
【0050】請求項6、41の発明では、ポインタのな
い任意の終端ノードから、ポインタのある末端ノードま
での第2のエッジの数は、両ノードに対応する2つの後
方列の位置の差と同じである。このため、検索時には、
この差に基づいて部分列中での後方列の開始位置が特定
でき、位置を特定するために後方列ごとにツリーを遡る
煩雑な処理が不要となる。
【0051】また、コード列の変動によって部分列の位
置が変動した場合も、唯1つのポインタを変更すれば足
り、終端ノードと同数のポインタを変更するよりも、処
理が高速化される。この利点は、複数の辞書データを一
体のツリーによって実現し、ツリー内のデータ構造が複
雑化した時に、特に実益がある。
【0052】また、請求項7記載の発明は、請求項6記
載のデータ検索装置において、前記第2のエッジには、
当該エッジが結ぶ両終端ノードの両後方列の相違となる
コードをラベルとして設定したことを特徴とする。
【0053】請求項7の発明では、第2のエッジに、後
方列間において有無が異なるコードをラベルとして設定
するので、ポインタのある終端ノード側から第2のエッ
ジをルート側に遡りながらラベルを接続することによっ
てコード列を復元することができる。
【0054】また、請求項8記載の発明は、請求項1又
は3記載のデータ検索装置において、前記検索手段は、
検索結果である後方列について、キー列と一致したコー
ド数を出力するように構成されたことを特徴とする。
【0055】請求項8の発明では、前記検索手段は、検
索結果である後方列とキー列との一致コード数を出力す
るので、一致の程度の判断が容易になる。
【0056】また、請求項9記載の発明は、請求項1又
は3記載のデータ検索装置において、前記検索手段は、
検索結果である後方列がキー列の全体を含むときは、そ
の旨を出力するように構成されたことを特徴とする。
【0057】請求項9の発明では、前記検索手段は、後
方列はキー列の全体を含むときは、その旨を出力するの
で、検索結果の利用が容易になる。
【0058】また、請求項10記載の発明は、請求項1
又は3記載のデータ検索装置において、前記後方列の重
複検出を除去する除去手段を有することを特徴とする。
【0059】また、請求項42の発明は、請求項10の
発明を方法の観点から把握したものであって、請求項3
7又は39記載のデータ検索方法において、前記後方列
の重複検出を除去する除去処理を含むことを特徴とす
る。
【0060】請求項10、42の発明では、後方列の重
複検出が除去されるので、位置の重複によって検索結果
が混乱することはない。
【0061】また、請求項11記載の発明は、請求項1
又は3記載のデータ検索装置において、前記更新手段
は、変更の結果追加すべき後方列を前記辞書データに追
加登録した後、変更の結果削除すべき後方列を前記辞書
データから削除するように構成されたことを特徴とす
る。
【0062】請求項11の発明では、更新の際、データ
の追加を削除よりも先に行うので、削除後に追加する場
合と比べ、利用可能なデータの部分は更新後もそのまま
利用でき、変更の所要時間が短縮される。
【0063】また、請求項12記載の発明は、請求項1
又は3記載のデータ検索装置において、前記更新手段
は、更新の際、登録しようとする後方列が辞書データに
登録済か否かを検出し、未登録の後方列のみを登録する
ように構成されたことを特徴とする。
【0064】請求項12の発明では、前記更新手段は、
更新の際、登録しようとする後方列が辞書データに登録
済か否かを検出し、未登録の後方列のみを登録するの
で、辞書データ全体を再度生成する場合と比べて、更新
所要時間が短縮される。なお、この場合請求項7の発明
を使用すると効率的である。
【0065】また、請求項13記載の発明は、請求項1
又は3記載のデータ検索装置において、前記第1の維持
手段は、前記境界の間隔がキー最大長未満になった場
合、当該間隔に係るいずれかの境界のうち、消去の結果
一体化する部分列が短い方の境界を消去するように構成
されたことを特徴とする。
【0066】また、請求項43の発明は、請求項13の
発明を方法の観点から把握したものであって、請求項3
7又は39記載のデータ検索方法において、前記第1の
維持処理は、前記境界の間隔がキー最大長未満になった
場合、当該間隔に係るいずれかの境界のうち、消去の結
果一体化する部分列が短い方の境界を消去することを特
徴とする。
【0067】請求項13、43の発明では、第1の維持
手段は、境界間隔がキー最大長未満になった場合、当該
間隔に係るいずれかの境界のうち、消去の結果一体化す
る部分列が短い方の境界を消去する。このため、一体化
した部分列のサイズが増大して更新所要時間が増大する
こともない。
【0068】また、請求項14記載の発明は、請求項1
又は3記載のデータ検索装置において、前記各部分列の
長さを所定の長さ以下に維持する第2の維持手段を有す
ることを特徴とする。
【0069】請求項14の発明では、第2の維持手段
が、境界間隔を所定の長さ以下に維持するので、コード
列の変更によって辞書データのサイズが増大し、更新所
要時間が増大することがない。
【0070】また、請求項15記載の発明は、請求項1
又は3記載のデータ検索装置において、前記辞書データ
に基づいて部分列を復元する復元手段を有することを特
徴とする。
【0071】請求項15の発明では、復元手段が、辞書
データに基づいて部分列を復元するので、ツリーの元と
なった部分列自体の保存が不要となり、記憶領域が節約
できる。この復元は、元のコード列の長さに比例しない
時間で行うことができるので、処理を効率化する。な
お、この場合請求項7の発明を使用すると効率的であ
る。
【0072】また、請求項16記載の発明は、請求項1
又は3記載のデータ検索装置において、複数の部分列の
各辞書データを、単一のツリーとして生成することを特
徴とする。
【0073】また、請求項44の発明は、請求項16の
発明を方法の観点から把握したものであって、請求項3
7又は39記載のデータ検索方法において、複数の部分
列の各辞書データを、単一のツリーとして生成すること
を特徴とする。
【0074】請求項16、44の発明では、複数の部分
列の各辞書データを、単一のツリーとして生成する。こ
のため、辞書データごとに独立したツリーを生成した場
合と比べ、必要なツリーの数が減少し、メモリが節約さ
れる。特に、同一又は類似の部分を複数含むコード列に
効果的である。
【0075】また、請求項17記載の発明は、請求項1
又は3記載のデータ検索装置において、前記キー列を複
数の部分キー列に区分するキー区分手段を有し、前記検
索手段は、前記部分キー列の全体又は一部を前方列とす
る後方列を検索するように構成されたことを特徴とす
る。
【0076】請求項17の発明では、キー区分手段が、
キー列を複数の部分キー列に区分し、検索手段は、前記
部分キー列の全体又は一部を前方列として含む後方列を
検索する。この場合、各部分キー列は、境界によって分
断されなければ検出できるので、キー最大長は部分キー
列の最大長となる。このため、キー最大長が短縮され、
辞書データがコンパクト化される。逆に、一定のキー最
大長が設定されている場合でも、各部分キー列をキー最
大長以下にすれば、キー最大長より長いキー列に基づい
た検索が可能である。
【0077】また、請求項18のデータ処理装置は、1
又は2以上の区間を含むコード列の各区間に基づいて各
区間の範囲を表す二分木を生成する二分木生成手段を有
し、前記二分木は各区間に対応するノードを有し、各ノ
ードはルートから末端側に向けて樹状に接続され、各ノ
ードの末端側には、当該ノードに対応する区間以前の区
間に対応するノードである前方ノード及び当該ノードに
対応する区間以降の区間に対応するノードである後方ノ
ードのうち該当するものが接続され、各ノードには、当
該ノード及び当該ノードより末端側に存在する各ノード
に対応する区間の区間長の合計である部分区間長が設定
されたことを特徴とする。
【0078】また、請求項45のデータ処理方法は、請
求項18の発明を方法の観点から把握したものであっ
て、1又は2以上の区間を含むコード列の各区間に基づ
いて各区間の範囲を表す二分木を生成する二分木生成処
理を含み、前記二分木は各区間に対応するノードを有
し、各ノードはルートから末端側に向けて樹状に接続さ
れ、各ノードの末端側には、当該ノードに対応する区間
以前の区間に対応するノードである前方ノード及び当該
ノードに対応する区間以降の区間に対応するノードであ
る後方ノードのうち該当するものが接続され、各ノード
には、当該ノード及び当該ノードより末端側に存在する
各ノードに対応する区間の区間長の合計である部分区間
長が設定されたことを特徴とする。
【0079】請求項18、45の発明では、検索などの
処理においては、各ノードのコード列中の位置は当該ノ
ードの前方(後方)ノードの区間長に基づいて算出で
き、また、ノードの区間長から前方ノードと後方ノード
の区間長を減ずることによって当該ノードの正味の区間
長を算出できる。このため、コード列の任意の位置(指
定位置)のコードは、指定位置と各ノードの位置・区間
長を比較することによって容易に特定することができ
る。
【0080】そして、各ノードの位置関係はノード間の
相互関係で表され、各ノードの位置は他のノードに関す
る部分区間長に基づいて算出される。このため、区間の
一部の変更に際しても、変更の影響の波及範囲は変更さ
れたノードやそのノードからルート側の部分に局限され
るので、変更の手続が簡潔で済む。
【0081】また、請求項18、45の発明では、区間
ごとにノードが設定されるので、ノードを格納するため
のデータブロックは区間と同数あれば足り、データがコ
ード数分のメモリを占有することがない。このため、メ
モリ効率が向上する。特に、二分木は、各ノードのため
のデータ格納領域をポインタで接続することによって構
成することができるので、コード列が長大な場合でも膨
大な連続領域を確保する必要がなくなり、メモリを効率
よく利用できる。また、区間ごとに長さの精度が異なる
データを扱うこともできるので、浮動小数点など自由な
種類のデータを効率よく処理できる。
【0082】また、請求項19の発明は、請求項18記
載のデータ処理装置において、前記コード列中の任意の
位置である指定位置が属する区間を特定するための区間
検索手段を有し、この区間検索手段は、所定のポインタ
が指すノードであるカレントノードを前記ルートから前
記末端側へ順次移動し、各カレントノードにおいて、カ
レントノード及び、カレントノードの末端側に直接接続
されている前記前方ノード乃至前記後方ノードのうち少
なくとも一方、の区間長に基づいてカレントノードの範
囲を算出し、算出した範囲と前記指定位置を比較し、算
出した範囲よりも指定位置が前方の場合は、カレントノ
ードの前方ノードにカレントノードを進め、算出した範
囲よりも指定位置が後方の場合は、カレントノードの後
方ノードにカレントノードを進め、算出した範囲に指定
位置が含まれる場合は、指定位置がカレントノードに含
まれると特定するように構成されたことを特徴とする。
【0083】また、請求項46の発明は、請求項19の
発明を方法の観点から把握したものであって、請求項4
5記載のデータ処理方法において、前記コード列中の任
意の位置である指定位置が属する区間を特定するための
区間検索処理を含み、この区間検索処理は、所定のポイ
ンタが指すノードであるカレントノードを前記ルートか
ら前記末端側へ順次移動し、各カレントノードにおい
て、カレントノード及び、カレントノードの末端側に直
接接続されている前記前方ノード乃至前記後方ノードの
うち少なくとも一方、の区間長に基づいてカレントノー
ドの範囲を算出し、算出した範囲と前記指定位置を比較
し、算出した範囲よりも指定位置が前方の場合は、カレ
ントノードの前方ノードにカレントノードを進め、算出
した範囲よりも指定位置が後方の場合は、カレントノー
ドの後方ノードにカレントノードを進め、算出した範囲
に指定位置が含まれる場合は、指定位置がカレントノー
ドに含まれる、と特定することを特徴とする。
【0084】請求項19、46の発明では、区間検索手
段が、カレントノードをルートから順次下位側に移動さ
せながらカレントノードの範囲と指定位置を比較すると
いう簡潔な手順によって、指定位置が属する区間を特定
するので、容易に検索などの処理を行うことができる。
【0085】請求項19、46の発明は、カレントノー
ドの範囲の算出に、後方ノードの区間長を用いること
で、左右対象に適用することができる。
【0086】また、請求項20の発明は、請求項18記
載のデータ処理装置において、前記二分木中の任意のノ
ードである指定ノードに対応する区間を特定するための
特定手段を有し、この特定手段は、所定のポインタが指
すノードであるカレントノードを、前記指定ノードから
前記カレントノードの上位ノードである親ノードの方向
へ前記ルートまで順次移動し、前記各移動について、当
該移動前の前記カレントノードである子ノードが、当該
移動後の前記親ノードに対して前記前方ノードであるか
前記後方ノードであるかに応じて、ノードの区間長及び
前記前方ノード又は前記後方ノードの部分区間長を順次
加算し、L−C−R順において前記指定ノード以前の総
区間長である左区間長又はL−C−R順において前記指
定ノード以降の総区間長である右区間長のうち少なくと
も一方を算出することによって前記指定ノードに対応す
る区間を特定するように構成されたことを特徴とする。
【0087】また、請求項47の発明は、請求項20の
発明を方法の観点から把握したものであって、請求項4
5記載のデータ処理方法において、前記二分木中の任意
のノードである指定ノードに対応する区間を特定するた
めの特定処理を含み、この特定処理は、所定のポインタ
が指すノードであるカレントノードを、前記指定ノード
から前記カレントノードの上位ノードである親ノードの
方向へ前記ルートまで順次移動し、前記各移動につい
て、当該移動前の前記カレントノードである子ノード
が、当該移動後の前記親ノードに対して前記前方ノード
であるか前記後方ノードであるかに応じて、ノードの区
間長及び前記前方ノード又は前記後方ノードの部分区間
長を順次加算し、L−C−R順において前記指定ノード
以前の総区間長である左区間長又はL−C−R順におい
て前記指定ノード以降の総区間長である右区間長のうち
少なくとも一方を算出することによって前記指定ノード
に対応する区間を特定することを特徴とする。
【0088】請求項20、47の発明では、カレントノ
ードを指定ノードからルートまで移動させながら、移動
方向に応じてノードの(正味)区間長及び前記前方ノー
ド又は前記後方ノードの部分区間長を順次加算する。こ
れによって、指定ノードの区間の位置を、L−C−R順
における区間の左又は右の区間長を通じて特定する。請
求項20、47の発明では、このような簡潔な手順によ
って、指定ノードの区間の位置が特定されるので、容易
に各種処理を行うことができる。
【0089】また、請求項21の発明は、請求項18記
載のデータ処理装置において、前記二分木中の任意のノ
ードである指定ノードに対応する区間を特定するための
特定手段を有し、この特定手段は、前記指定ノードをsp
layingによって前記ルートへ移動するように構成された
ことを特徴とする。
【0090】請求項21の発明では、指定ノードがルー
トへ移動する結果、ルートとなった指定ノードが表す区
間は、二分木全体に係る区間の左端を0とした場合、始
端が指定ノードの左の子の部分区間長の次(+1)であ
り、終端が、指定ノードの部分区間長から指定ノードの
右の子の部分区間長を減じた値の位置となり、容易に特
定される。
【0091】また、請求項22の発明は、請求項18記
載のデータ処理装置において、前記区間が変更された場
合に変更の内容に応じて前記二分木を更新する二分木更
新手段を有することを特徴とする。また、請求項48の
発明は、請求項22の発明を方法の観点から把握したも
のであって、請求項45、46又は47記載のデータ処
理方法において、前記区間が変更された場合に変更の内
容に応じて前記二分木を更新する二分木更新処理を含む
ことを特徴とする。
【0092】請求項22、48の発明では、区間の変更
の場合に、二分木更新手段が二分木を更新するので、二
分木の生成をやり直す必要がない。
【0093】また、請求項23の発明は、請求項22記
載のデータ処理装置において、前記二分木更新手段は、
前記区間長を変更する区間長変更手段と、前記区間が削
除された場合に削除された区間に対応する前記ノードを
前記二分木から削除する削除手段と、区間が追加された
場合に追加された区間に対応するノードを前記二分木に
追加する追加手段と、を有することを特徴とする。ま
た、請求項49の発明は、請求項23の発明を方法の観
点から把握したものであって、請求項48記載のデータ
処理方法において、前記二分木更新処理は、前記区間長
を変更する区間長変更処理と、前記区間が削除された場
合に削除された区間に対応する前記ノードを前記二分木
から削除する削除処理と、区間が追加された場合に追加
された区間に対応するノードを前記二分木に追加する追
加処理と、を含むことを特徴とする。
【0094】請求項23、49の発明では、区間の長さ
変更・削除・追加という区間の変更の内容に応じて、そ
れぞれ区間長変更手段・削除手段・追加手段が二分木を
更新する。このため、これらの手段を組み合わせること
によってコード列の一部の置き換えなど複雑な処理を行
うことができる。
【0095】また、請求項24の発明は、請求項23記
載のデータ処理装置において、前記区間長変更手段は、
長さを変更する前記区間の前記ノードから前記ルートへ
至る各ノードの前記部分区間長を、変更分だけ順次変更
するように構成されたことを特徴とする。請求項24の
発明では、区間の長さが変更された場合でも、変更され
た区間のノードからルートまでのノードを変更すれば足
りる。このため、従来のように、変更された区間以降の
区間に対応する全ノードを記憶領域上で移動させる必要
がないので、データ処理が効率化される。
【0096】また、請求項25の発明は、請求項23記
載のデータ処理装置において、前記区間長変更手段は、
長さを変更しようとする前記区間の前記ノードをsplayi
ngによって前記ルートへ移動し、前記ルートとなった当
該ノードの前記部分区間長を変更分だけ増減するように
構成されたことを特徴とする。
【0097】請求項25の発明によれば、ルート以外の
部分区間長を変更する必要がないので、処理が間略化さ
れる。
【0098】また、請求項26の発明は、請求項23記
載のデータ処理装置において、前記追加手段は、追加さ
れる前記区間に対応する前記ノードを前記二分木に追加
し、各ノードの結合順序を調整し、各ノードについて前
記区間長の調整を行うように構成されたことを特徴とす
る。請求項26の発明では、追加手段がノードの結合順
序や区間長を調整するので、二分木の整合性が維持され
る。
【0099】また、請求項27の発明は、請求項26記
載のデータ処理装置において、前記追加手段は、前記区
間長の調整において、追加した前記ノードの前記部分区
間長を、当該ノードの部分区間長及び当該ノードの前記
下位ノードの部分区間長の和とし、追加したノードが下
位ノードとして直接接続されているノードである親ノー
ドから前記ルートに至る経路上の各ノードについて、追
加したノードの区間長だけ部分区間長を加算するように
構成されたことを特徴とする。請求項27の発明では、
区間の追加の場合も、追加されたノードの親ノードから
ルートまでの区間長を加算するという単純な処理で区間
長を調整することができる。
【0100】また、請求項28の発明は、請求項23記
載のデータ処理装置において、前記追加手段は、追加し
ようとするノードの直前及び直後のノードをsplayingに
よって前記ルートに順次移動し、前記直前のノードの直
後に相当する位置又は前記直後のノードの直前に相当す
る位置に、前記追加される区間に対応する前記ノードを
追加し、前記直前若しくは直後のノード又は前記追加し
たノードのうち必要なノードについて、追加したノード
の区間長だけ部分区間長を加算するように構成されたこ
とを特徴とする。
【0101】請求項28の発明では、部分区間長の変更
(増加)はルートを中心とした少数のノードについて行
なえばよく、手順が間略化される。
【0102】また、請求項29の発明は、請求項23記
載のデータ処理装置において、前記追加手段は、追加さ
れる前記区間に対応する前記ノードを、当該ノードの区
間長を0として前記二分木に追加し、追加した当該ノー
ドをsplayingによって前記二分木のルートに移動し、ル
ートに移動した当該ノードの部分区間長を、追加した区
間の区間長だけ増加させるように構成されたことを特徴
とする。
【0103】請求項29の発明では、所望の追加アルゴ
リズムを用いながら、ノードの部分区間長の増加を1度
だけ行なえばよいので、処理が迅速化される。
【0104】また、請求項30の発明は、請求項23記
載のデータ処理装置において、前記削除手段は、削除す
る前記区間に対応する前記ノードを前記二分木から削除
し、各ノード間の結合関係を調整し、各ノードについて
前記区間長の調整を行うように構成されたことを特徴と
する。請求項30の発明では、削除手段がノードの結合
順序や区間長を調整するので、残りの区間の順序など二
分木の整合性が維持される。
【0105】また、請求項31の発明は、請求項23記
載のデータ処理装置において、前記削除手段は、削除す
る前記区間に対応する前記ノードをsplayingによってル
ートに移動し、削除すべきノードの直前又は直後のノー
ドをsplayingによってルートに移動し、ルートとなった
前記直前又は直後のノードの部分区間長を、前記削除す
べきノードの区間長だけ減じ、前記削除すべきノードを
削除するように構成されたことを特徴とする。
【0106】請求項31の発明では、削除の際の部分区
間長の調整の対象がルートのノードに限定されるので、
処理が迅速化される。
【0107】また、請求項32の発明は、請求項22記
載のデータ処理装置において、前記各ノード間の結合順
序を変更することによって、前記二分木の構造を調整す
る構造調整手段を有することを特徴とする。また、請求
項50の発明は、請求項32の発明を方法の観点から把
握したものであって、請求項48記載のデータ処理方法
において、前記各ノード間の結合順序を変更することに
よって、前記二分木の構造を調整する構造調整処理を含
むことを特徴とする。
【0108】請求項32、50の発明によれば、構造調
整によって、二分木の一部のみが突出することがなくな
り、データ処理で参照されるルートから各ノードに至る
パスの長さが平均化される。このため、データ処理で対
象とするノードまでのパスが偶然に長いためにデータ処
理に長時間を要する事態が防止され、検索や変更などの
データ処理が効率化される。
【0109】また、請求項33の発明は、請求項32記
載のデータ処理装置において、前記構造調整手段は、構
造調整の手順の単位として、前記二分木の前記ノードの
順序を維持して構造を変化させる処理であるrotation、
double rotation (zig-zig)及びdouble rotation (zig-
zag) を用いることを特徴とする。請求項33の発明で
は、二分木の所定の範囲について構造を変化させる異な
った複数の処理を組み合わせて構造調整が行われるの
で、二分木の状態に応じた内容の構造調整を行うことが
できる。
【0110】また、請求項34の発明は、請求項32記
載のデータ処理装置において、前記構造調整手段は、任
意の前記ノードである対象ノードを前記ルートへ移動す
るsplayingを用いて前記二分木の構造を調整するように
構成されたことを特徴とする。
【0111】請求項34の発明では、splayingによって
対象ノードがルートに移動するとともに、対象ノードか
らもとのルートに至るパス上に位置していた各ノードか
らルートに至るパスの長さが大部分短縮される。このた
め、二分木に対する各種処理が迅速化される。
【0112】また、請求項35の発明は、請求項19記
載のデータ処理装置において、前記コード列として複数
行を含むテキストを用い、前記区間としてテキストに含
まれる各行を用い、前記二分木生成手段は、テキストの
1又は2以上の行に対応する各ノードによって各行の順
序を表す第1の二分木と、各行ごとの1又は2以上の文
字に対応する各ノードによって各行のコード順を表す第
2の二分木と、を生成するように構成されたことを特徴
とする。
【0113】請求項35の発明では、各行の順序を表す
二分木と各行ごとの内容を表す二分木が別個独立に形成
される。このため、各行の順序又は行の内容の一方を変
更する場合に他方の内容を変更する必要がなく、テキス
トの処理を効率的に行うことができる。
【0114】また、請求項36のデータ処理装置は、請
求項19記載のデータ処理装置において、前記コード列
として、長さが一定の行を複数含むテキストを用い、前
記二分木生成手段は、前記行のうち文字の存在しない部
分には所定の空白文字を配置し、連続する同じ文字又は
空白文字を、当該文字をラベルとし連続の個数を区間長
とする単一の前記ノードで、テキストの各部分列を表す
ことによって、テキストを表す前記二分木を生成するよ
うに構成されたことを特徴とする。
【0115】請求項36の発明では、データを単純な構
成の単一の二分木で表すことができる。また、請求項3
6の発明では、連続する文字又は空白を単一のノードで
表せるので処理効率とメモリ効率が向上する。
【0116】
【発明の実施の形態】次に、本発明の実施の形態(以下
「実施形態」という)について、図面に従って具体的に
説明する。なお、後述する実施形態はコンピュータ上に
実現され、実施形態の各機能は、所定の手順(プログラ
ム)がこのコンピュータを制御することで実現される。
【0117】本明細書における各「手段」は、実施形態
の各機能に対応する概念的なもので、必ずしも特定のハ
ードウェアやソフトウェア・ルーチンに1対1には対応
しない。同一のハードウェア要素が、場合によって異な
った手段を構成する。例えば、コンピュータは、ある命
令を実行するときにある手段となり、別の命令を実行す
るときは別の手段となりうる。また、一つの手段が、わ
ずか1命令によって実現される場合もあれば、多数の命
令によって実現される場合もある。
【0118】したがって、本明細書では、以下、実施形
態の各機能を有する仮想的回路ブロック(手段)を想定
して実施形態を説明する。但し、コンピュータの使用は
一例であり、本発明の機能の全部又は一部は、可能なら
ば、カスタムチップ(専用の集積回路)のような電子回
路上に実現してもよい。
【0119】実施形態に用いられるコンピュータは、一
般には、CPU(中央演算処理装置)と、RAM(随時
書込読出型記憶素子)からなる主記憶装置とを有する。
また、前記コンピュータの規模は自由であり、マイクロ
コンピュータ・パーソナルコンピュータ・スモールコン
ピュータ・ワークステーション・メインフレームなど、
いかなる規模のものを用いてもよい。
【0120】また、前記コンピュータのハードウェア
は、典型的には、キーボードやマウスなどの入力装置
と、ハードディスク装置などの外部記憶装置と、CRT
表示装置やプリンタ印字装置などの出力装置と、必要な
入出力制御回路を含む。
【0121】但し、前記コンピュータのハードウェア構
成は自由であり、本発明が実施できる限り、上記の構成
要素の一部を追加・変更・除外してもよい。例えば、実
施形態は、複数のコンピュータを接続したコンピュータ
ネットワーク上に実現してもよい。また、CPUの種類
は自由であり、CPUを複数同時に用いたり、単一のC
PUをタイムシェアリング(時分割)で使用し、複数の
処理を同時平行的に行ってもよい。また、他の入力装置
(例えば、タッチパネル・ライトペン・トラックボール
などのポインティングデバイスや、デジタイザ・イメー
ジ読取装置やビデオカメラなどの画像入力装置・音声識
別装置・各種センサなど)を用いてもよい。また、他の
外部記憶装置(例えば、フロッピーディスク装置・RA
Mカード装置・磁気テープ装置・光学ディスク装置・光
磁気ディスク装置・バブルメモリ装置・フラッシュメモ
リなど)を用いてもよい。また、他の出力装置(例え
ば、液晶表示装置・プラズマディスプレイ装置・ビデオ
プロジェクター・LED表示装置・音響発生回路・音声
合成回路など)を用いてもよい。
【0122】また、前記コンピュータにおいて実施形態
を実現するためのソフトウェアの構成としては、典型的
には、実施形態の各機能を実現するためのアプリケーシ
ョンプログラムが、OS(オペレーティングシステム)
上で実行される態様が考えられる。また、実施形態を実
現するためのプログラムの態様としては、典型的には、
高級言語やアセンブラからコンパイル(翻訳)された機
械語が考えられる。但し、前記コンピュータのソフトウ
ェア構成も自由であり、本発明が実施できる限り、ソフ
トウェア構成を変更してもよい。例えば、必ずしもOS
を用いる必要はなく、また、プログラムの表現形式も自
由であり、BASICのようなインタプリタ(逐次解釈
実行型)言語を用いてもよい。
【0123】また、プログラムの格納態様も自由であ
り、ROM(読出し専用メモリ)に格納しておいてもよ
く、また、ハードディスク装置のような外部記憶装置に
格納しておき、コンピュータの起動時や処理の開始時に
主メモリ上にロード(読み込み)してもよい。また、プ
ログラムを複数の部分に分割して外部記憶装置に格納し
ておき、処理内容に応じて必要なモジュールのみを随時
主メモリ上にロード(読み込み)してもよい。さらに、
プログラムの部分ごとに異なった態様で格納してもよ
い。
【0124】また、本実施形態における各手順の各ステ
ップは、その性質に反しない限り、実行順序を変更し、
複数同時に実行し、また、実行ごとに異なった順序で実
行してもよい。このような順序の変更は、例えば、ユー
ザが実行可能な処理を選択するなどメニュー形式のイン
ターフェース手法によって実現することができる。
【0125】また、本明細書における「入力」は、本来
の情報の入力のみならず、情報の入力と密接に関連する
他の処理を含む。このような処理は、例えば、入力内容
のエコーバックや修正・編集である。また、本明細書に
おける「出力」は、本来の情報の出力のみならず、情報
の出力と密接に関連する他の処理を含む。このような処
理は、例えば、出力すべき範囲の入力や、画面スクロー
ルの指示である。なお、対話的入出力手順によって入力
と出力を一体的操作によって実現してもよく、このよう
な一体的操作によって、選択・指定・特定などの処理を
行ってもよい。
【0126】また、本明細書におけるデータ(情報)や
データの格納手段は前記コンピュータ上においていかな
る態様で存在してもよい。例えば、データのハードウェ
ア上の所在部分は、主記憶装置・外部記憶装置・CPU
のレジスタやキャッシュメモリなどいかなる部分でもよ
い。また、データの保持態様も自由である。例えば、デ
ータは、ファイル形式で保持されるのみならず、メモリ
やディスクなどの記憶装置を物理的アドレスで直接アク
セスすることによって実現してもよい。また、データの
表現形式も自由で、例えば、文字列を表すコードの単位
は、文字単位でも単語単位でもよい。また、データは必
要とされる一定時間だけ保持されれば十分で、その後消
滅してもよく、保持時間の長短は自由である。また、辞
書データのように当面変更されない情報は、ROMに格
納してもよい。
【0127】また、本明細書において、特定の情報への
言及は確認的で、言及されない情報の存在を否定するも
のではない。すなわち、本発明の動作では、動作に必要
な一般的な情報、例えば、各種ポインタ、カウンタ、フ
ラグ、パラメータ、バッファなどが適宜用いられる。
【0128】実施形態の各部分が処理に要する情報は、
特に記載がない場合、当該情報を保持している他の部分
から獲得される。このような情報の獲得は、例えば、当
該情報を格納している変数やメモリをアクセスすること
によって実現することができる。なお、情報の消去・抹
消は、当該情報の内容自体を必ずしも記憶領域から現実
に削除せず、消去を表すフラグを設定するなど、情報の
意味付けの変更によって行うことができる。
【0129】[1.第1実施形態]第1実施形態は、デ
ータ検索装置(請求項1−5、8−14に対応するも
の)及びこのデータ検索装置上で実行されるデータ検索
方法(請求項37−40、42、43に対応するもの)
に関するものである。
【0130】第1実施形態の目的は、検索用データの更
新所要時間が短いデータ検索装置及びデータ検索方法を
提供することである。また、第1実施形態の他の目的
は、処理が高速なデータ検索装置及びデータ検索方法を
提供することである。また、第1実施形態のさらに他の
目的は、処理手順が単純なデータ検索装置及びデータ検
索方法を提供することである。
【0131】[1−1.第1実施形態の構成]図1は、
第1実施形態の構成を示す機能ブロック図である。
【0132】第1実施形態のデータ検索装置は、キー列
による検索対象となるコード列1から、第1の境界によ
って区分されキー列の最大長であるキー最大長より長い
複数の第1の部分列2と、第2の境界によって区分され
それぞれ前記第1の境界の前後少なくともキー最大長ず
つにわたるすべての部分列を含む第2の部分列3と、を
決定する区分手段4を有する。
【0133】また、第1実施形態は、前記各部分列につ
いて、当該部分列の後方の部分である後方列と、その後
方列の先頭の前記コード列中における位置とを対照する
辞書データ5,6を生成する生成手段7を有する。ま
た、第1実施形態は、前記辞書データに基づいて、キー
列の全部又は一部を前方列とする後方列及びその開始位
置を検索する検索手段8と、前記後方列及びその開始位
置の重複検出を除去する除去手段9とを有する。
【0134】また、第1実施形態は、前記コード列を変
更する変更手段10と、前記変更の内容に基づいて、変
更に係る前記部分列の辞書データを更新する更新手段1
1とを有する。また、第1実施形態は、前記各境界の間
隔を前記キー最大長以上に維持する第1の維持手段12
と、前記各境界の間隔を所定の長さ以下に維持する第2
の維持手段13とを有する。
【0135】[1−2.第1実施形態の作用及び効果]
上記のような構成を有する第1実施形態は、次のような
作用を有する。
【0136】[1−2−1.コード列の区分処理]第1
実施形態におけるコード列は文字列であり、1文字が1
つのコードで表される。まず、区分手段4が、検索対象
となるコード列1から、第1の境界によって区分され、
キー列の最大長であるキー最大長(以下「k」と表す)
より長い複数の第1の部分列2を決定する。また、区分
手段4は、コード列1から、第2の境界によって区分さ
れ、第1の境界の前後少なくともkずつにわたる第2の
部分列3を決定する。
【0137】この決定は、例えば、コード列1について
第1の境界と第2の境界を交互に設定し、各第1の境界
と第2の境界の間隔(文字数)をk以上に設定すること
によって行うことができる。図2は、第1の部分列s1i
(s11〜s14)と第2の部分列s2i(s21〜s24)に区
分されたコード列の例を示す。
【0138】[1−2−2.辞書データの生成処理]次
に、生成手段7が、各部分列2,3について、当該部分
列の後方の部分である後方列と、各後方列の開始位置と
を対照する辞書データ5,6を生成する。なお、本実施
形態では後方列には部分列自体を含むものとする。
【0139】第1実施形態における各辞書データ5,6
はサフィックス・ツリー(suffix tree /以下「ツリ
ー」という)である。ツリーは、ルートから末端ノード
に至る複数のノードを有するデータ構造で、末端ノード
以外の各ノードは、経路を表すエッジで1又は2以上の
末端側のノードに接続されている。各エッジにはラベル
が設定され、各末端ノードが部分列の各後方列に対応
し、ルートから各末端ノードに至るパスのラベルを順次
接続すると後方列となる。
【0140】図3は、部分列“ababc”の辞書デー
タを表すツリーの例であり、このツリーは、次のような
後方列と位置とを対照する辞書データとしての役割を有
する。
【0141】ababc:0 abc :2 babc :1 bc :3 c :4
【0142】このツリーでは、0から4までの位置は潜
在的に表されている。すなわち、全ての各末端ノードに
は、その末端ノードに対応する後方列の終端位置が部分
列の終端であることを示す終端ポインタが設定されてお
り、部分列の長さから各後方列の文字数を減じれば位置
を求めることができる。すなわち、後方列は終端の文字
までなので、開始位置が定まれば当該開始位置に対応す
る後方列は一意に定まる。例えば、後方列“abc”の
文字数は3文字で、かつ、5文字である部分列“aba
bc”の終端で終了するので、開始位置は2となる。
【0143】上記は、各位置から開始する後方列のみで
ある。しかし、第1実施形態では、キー列の全体又は一
部を前方列(前方の部分)として含む後方列を検索する
ので、このツリーは、次のような部分列と位置とを対照
する辞書データとしての役割を果たす。
【0144】a :0 a :2 a :5 ab :0 ab :2 ab :5 aba :0 abab :0 ababc:0 abc :2 abca :2 abcab:2 b :1 b :3 b :6 ba :1 bab :1 babc :1 bc :3 bca :3 bcab :3 c :4 ca :4 cab :4
【0145】なお、第1実施形態では、各ラベルは、コ
ード列の単位である1文字ずつであるから、処理手順が
単純化される。
【0146】次に、図4のフローチャートに、部分列か
らこのようなツリーを生成する手順を示す。すなわち、
この手順では、部分列から登録すべき後方列を1つずつ
取り出し(ステップ41)、全ての後方列について(ス
テップ42)、次の処理を繰り返す。
【0147】まず、登録する後方列をキー列として、登
録する後方列の最長一致ノードを検出する(ステップ4
3)。最長一致ノードとは、ルートから続くラベルの列
がキー列のコードの列に一致する最後のノードであり、
検出の具体的な手順は後述する。最長一致ノードが検出
された時点でキー列が終了していなければ(ステップ4
4)、登録する後方列は既登録の後方列に含まれない。
【0148】そこで、登録する後方列のうちラベルと一
致しなかった最初の文字以降、1文字ずつを取り出し
(ステップ45)、その時点において処理の対象として
いるノード(以下「カレントノード」という)からの新
たなエッジを生成し、このエッジの先に新たなノードを
設定し、このエッジには、取り出した1文字を設定する
(ステップ46)。なお、最長一致ノード検出時のカレ
ントノードは最長一致ノードである。
【0149】この作業が後方列の最後の文字まで繰り返
されると(ステップ47)、後方列の各文字をラベルと
する連続したパスが成立する。そこで、この時点におけ
るカレントノードに、部分列の終端を指す終端ポインタ
を設定する(ステップ48)。
【0150】ステップ44において、最長一致ノードま
でにキー列が終了したときは、キー列である登録する後
方列へのパスは成立しているので、最長一致ノードを終
端ノードと見做してこのノードに終端ポインタが設定さ
れる。なお、各終端ノードには、各部分列の開始位置を
設定してもよい。
【0151】次に、図5は、ステップ43の最長一致ノ
ードの検出の手順を示す。この手順では、カレントノー
ドをルートに設定するとともにカウンタをリセットする
(ステップ51)。そして、キー列が終了するまで(ス
テップ53)、キー列の先頭から1文字ずつを取り出し
(ステップ52)、取り出した文字に対応するエッジが
ある限り(ステップ54)、当該エッジの先のノードに
カレントノードを進め(ステップ55)、カウンタをイ
ンクリメント(ステップ56)する動作を繰り返す。こ
のように文字に対応するラベルのエッジを辿る動作を繰
り返し、ステップ53又は54において手順が終了した
ときのカレントノードが最長一致ノードである。また、
このときのカウンタの数値としてキー列と一致したコー
ド数が得られる。
【0152】[1−2−3.データの検索処理及び除去
処理]次に、データの検索の手順を図6に示す。すなわ
ち、まず、k以下のキー列が特定される(ステップ6
1)。このとき、キー列の長さはk以下に制限される
が、多くの場合は、キー列はコード列よりも格段に短い
ので、この制限による不利益はほとんど存在しない。
【0153】次に、検索手段8が、図5に示すような手
順で、各辞書データ5,6から、キー列の最長一致ノー
ドを検出する(ステップ62)。検索結果となる後方列
(以下「結果列」という)の数は、検出された最長一致
ノードの末端側(部分木)に位置する各終端ノードに設
定されたポインタの数と等しい。
【0154】次に、各結果列の位置が特定される(ステ
ップ63)。各結果列の位置は、部分列の長さと各結果
列の文字数から算出できる。また、各結果列の文字数
は、ルートから、結果列の各終端ノードまでのエッジ数
と等しいので、各終端ノードからルート又は最長一致ノ
ードまでを遡り、エッジ数を数えれば算出可能である。
【0155】なお、続いて、除去手段9が位置の重複を
除去したうえ(ステップ64)、位置が出力される(ス
テップ65)。すなわち、検索は、第1と第2の辞書デ
ータ5,6双方について重複して行われるので、第1及
び第2の境界のいずれにも分断されない列は、第1及び
第2の辞書データ5,6から重複して検出される。しか
し、前記のように重複が除去されるので、位置の重複に
よって結果が混乱することはない。
【0156】第1実施形態では、検索所要時間は出現位
置の数にほぼ比例するに止まり、コード列の長さには比
例しないので、長大なコード列からキー列を検索する場
合でも、検索時間が短くて済む。
【0157】また、第1実施形態では、検索手段8が、
キー列の全体を含む後方列の位置のみならず、キー列の
一部を含む後方列をも検索するので、キー列の全体を発
見できない場合でも、キー列に関連深い結果列を得られ
る。特に、第1実施形態では、検索手段8が、キー列の
各コードに基づいてツリーのパスを辿ることによって、
キー列の一部を含む後方列のうち一致コード数が最大の
ものを特定するので、キー列と最も関連性の高い結果列
が得られる。また、結果列とキー列との一致コード数を
出力するので、一致の程度の判断が容易になる。
【0158】また、検出終了時にキー列が終了している
ときは(ステップ66)、後方列はキー列の全体を含む
ので、一致コード数と共に、または、一致コード数の代
わりに、全体一致である旨が出力される(ステップ6
7)。
【0159】[1−2−4.コード列の変更処理及び辞
書データの更新処理]図7のフローチャートは、コード
列の変更の手順を示す。すなわち、図1の変更手段10
からコード列、具体的には変更対象の部分列が変更され
る(ステップ71)。続いて、変更された部分列の長さ
が変化したか否かが判断され(ステップ72)、変化し
ていない場合は、更新手段11が、変更の内容に基づい
て、変更された部分列の辞書データ5,6を更新する。
【0160】更新の際には、変更によって追加すべき後
方列をツリーに追加し、その後、変更対象部分列に一部
又は全部が含まれる後方列をツリーから削除する。この
順序で処理することにより、ツリーの構造のうち変更に
よって影響を受けない部分をそのまま利用できるので、
変更の所要時間が短縮される。
【0161】なお、ツリーのうち、変更の影響を受ける
部分列に関する部分を削除するには、削除する後方列の
終端ノードからルート側に向かって遡りながらノードと
エッジを削除していく。この削除は、削除されるノード
又はポインタに接続されているものを除き、後方列への
パス又はポインタを伴うノードに遭遇したときに、終了
すればよい。
【0162】また、新たな内容のツリーへの登録は、図
4の手順で行うことができる。なお、図4の手順では、
変更時にも、登録しようとする後方列が辞書データ5,
6(ツリー)に登録済か否かが検出され、未登録の後方
列のみを登録するので、辞書データ5,6全体を再度生
成する場合と比べて、更新所要時間が短縮される。
【0163】[1−2−5.境界間隔および部分列の長
さの維持]なお、部分列の長さが変化したときは(ステ
ップ72)、辞書データの更新(ステップ73)の前
に、部分列の長さ調整が行われる(ステップ74)。こ
の調整では、まず、第1の維持手段12が、境界間隔を
k以上に維持するので、コード列のうちk以下のいかな
る部分も第1の境界と第2の境界の双方によって同時に
分断されることがない。
【0164】次に、第1の維持手段12が、前記境界間
隔をk以上に維持する具体的な手法を次に示す。まず、
第1の維持手段12は、境界間隔がk未満になった場合
(図8)、当該間隔に係るいずれかの境界を消去する
(図9,図10)。この場合、第1の維持手段12は、
消去の結果一体化する部分列が短い方の境界を消去する
ので、一体化した部分列のサイズが増大して更新所要時
間が増大することもない。
【0165】また、第2の維持手段13が、部分列(区
間)を所定の長さ以下に維持する。このため、コード列
の変更によって辞書データ5,6のサイズが増大し、更
新所要時間が長くなることがない。次に、維持の手法の
具体例を示す。これらの具体例によれば、部分列の長さ
がkの6倍未満に維持される。
【0166】まず、第2の維持手段13は、第1と第2
の境界間隔が2k以上になった場合に(図11)、当該
間隔に係る両境界からk以上離れた位置で当該部分の第
1の部分列又は第2の部分列を区分する(図12,図1
3)。
【0167】また、第2の維持手段13は、隣接する第
1の境界同士がkの2倍以上で、その間に第2の境界が
存在しない場合に(図14)、前記隣接する両第1の境
界からk以上離れた(中間)位置に、第2の境界を設定
する(図15)。この処理は、第1の境界と第2の境界
の関係が逆であっても適用できる。
【0168】また、部分列の長さが変化した場合、これ
によって位置が変化した部分列の辞書データ5,6(ツ
リー)について、ポインタが指すコード列中の位置が変
更される(ステップ75)。
【0169】以上のように、コード列を変更する際に
は、変更の影響を受ける部分列のみについて、辞書デー
タ5,6を更新すれば足りるので、従来よりも更新所要
時間が短縮できる。この更新所要時間は、影響を受ける
各部分列の長さに比例し、元のコード列の長さには比例
しない。このため、更新が頻繁に行われる状況でも、実
用に耐えるデータ検索装置を提供することができる。な
お、検索所要時間は具体的な実施態様に応じて異なる。
【0170】[2.第2実施形態]第1実施形態では、
全ての末端ノードにポインタを設定したが、部分列終端
を指すポインタは部分列である後方列の終端ノードにの
み設定し、部分列である後方列及び他の各後方列につい
ては、当該後方列よりも1コード短い後方列の終端ノー
ドから他の後方列への第2のエッジを設定してもよい
(第2実施形態)。
【0171】第2実施形態は、請求項6、7、15、4
1に対応する。また、図16は、第2実施形態における
ツリーの例を示し、破線は第2のエッジを示す。
【0172】このとき、ポインタのない任意の終端ノー
ドから、ポインタのある終端ノードまでの第2のエッジ
の数は、両ノードに対応する2つの後方列の位置の差と
同じである。このため、検索時には、この差に基づいて
後方列の部分列の先頭からの位置が特定でき、後方列ご
とにツリーを遡る煩雑な処理が不要となる。
【0173】また、部分列の位置が変動した場合も、唯
1つのポインタを変更すれば足り、終端ノードと同数の
ポインタの変更を要する第1実施形態よりも、処理が高
速化される。この利点は、複数の辞書データを一体のツ
リーによって実現し、ツリー内のデータ構造が複雑化し
た時に、特に実益がある。
【0174】このように、第2実施形態によれば、コー
ド列に関する情報のうち、文字の順序に関する情報はツ
リー自体の構造で表し、文字の位置に関する情報をポイ
ンタで表し、ポインタを1つに集約したことで、文字の
順序の情報と位置の情報を相互に独立させた。このた
め、それぞれをより効果的なアルゴリズムで処理するこ
とが可能になる。また、複数の部分列でツリーを共有し
て処理を効率化でき、さらに、部分列のコード列中にお
ける位置を移動することにより、編集など様々な機能の
高度化を図ることができる。
【0175】また、第2のエッジは1コードの有無が異
なる2つの後方列のノードを結ぶが、第2のエッジに
は、有無が異なるこのコードをラベルとして設定しても
よい(図16)。この場合、ポインタのある終端ノード
側から第2のエッジをルート側に遡りながらラベルを接
続していくと、部分列の内容を復元することができる。
このため、ツリーの元となった部分列自体の保存が不要
となり、記憶領域が節約できる。この復元は、元のコー
ド列の長さに比例しない時間で行うことができる。
【0176】なお、部分列の復元は、部分列である後方
列の終端ノードに至るパスをルートまで遡って収集ラベ
ル順を逆転させることによっても行うことができる。
【0177】[3.第3実施形態]複数の部分列の各辞
書データは、単一のツリーとして生成してもよい(第3
実施形態)。第3実施形態は、請求項16、44に対応
するもので、図17は、このような単一のツリーの例を
示す。このツリーは、コード列“ababcab”の前
方列“ababc”と後方列“abcab”の辞書デー
タの役割を併有している。各ポインタは各部分列の終端
を指す。
【0178】第3実施形態によれば、辞書データごとに
独立したツリーを生成した場合と比べ、必要なツリーの
数が減少し、メモリが節約される。第3実施形態は、特
に、同一又は類似の部分を複数含むコード列に効果的で
ある。なお、第3実施形態において、ツリーのサイズは
部分列の最大長と部分列数に比例し、検索所要時間は部
分列の最大長と出現位置の積に比例し、また、更新所要
時間は、部分列の最大長と変更部分列数の積に比例す
る。
【0179】また、コード列が長くなり、及び/又は、
部分列が多くなり単一のツリーが多くの後方列を含め
ば、部分列の変更に伴うツリーの更新に要する処理の内
容や増加率は小さくなることが期待される。
【0180】[4.第4実施形態]第2の部分列は連続
する必要はなく、コード列のうち各第1の境界の前後少
なくともkにわたって一体に存在していればよい(第4
実施形態)。第4実施形態は請求項1、37に対応す
る。図18は、第4実施形態における部分列の一例を示
す。このような第4実施形態では、第1と第2の境界の
間隔がk以上であるから、長さのk以内の任意の部分
は、第1と第2の境界双方によって同時に分断されるこ
とがない。このため、キー列が当該部分に対応する場合
は、当該部分は第1又は第2の部分列のいずれかにおい
ては必ず検出される。
【0181】また、第2の部分列は相互に重複してもよ
い(図19)。このため、重複の検出と排除を省略する
ことで、処理の高速化を図ることができる。この場合、
検索結果の重複が増えることがあり得るが、3つの重複
を排除することは、2つの重複の排除と同様の手順で行
うことができる。
【0182】[5.第5実施形態]本発明では、キー列
を複数の部分キー列に区分し、検索手段8は、各部分キ
ー列pの全部又は一部を含む後方列を検索することによ
って行ってもよい(図20)。第5実施形態は、請求項
17に対応するものである。この場合、各部分キー列
は、境界によって分断されなければ検出できるので、k
は部分キー列の最大長となる。このため、kが短縮さ
れ、辞書データがコンパクト化される。逆に、一定のk
が設定されている場合でも、各部分キー列をk以下にす
れば、kより長いキー列に基づいた検索が可能である。
【0183】第5実施形態では各部分キー列の検索によ
って得られたコード列中の位置に、キー列全体が相連な
って現われるか否かを確認し、確認された位置のみを出
力する。この確認は、例えば最も検索結果の件数の少な
い部分キー列の前後に、他の部分キー列が連なって現わ
れるかを判定するというようにして効率的に行うことが
できる。
【0184】[6.第6実施形態] [6−1.第6実施形態の構成]第6実施形態は、デー
タ処理装置(請求項18−34に対応するもの)及びこ
のデータ処理装置上で実行されるデータ処理方法(請求
項45−50に対応するもの)であり、図21は、第6
実施形態の構成を示す機能ブロック図である。
【0185】第6実施形態の目的は、効率的にデータを
処理するデータ処理装置及びデータ処理方法を提供する
ことである。このデータ処理装置及びデータ処理方法
は、前記データ検索装置及びデータ検索方法の実施に特
に適したものである。すなわち、第1実施形態から第5
実施形態に係るデータ検索装置及びデータ検索方法にお
ける部分列を区間とみなし、第6実施形態のデータ処理
装置及びデータ処理方法で扱えば、データの検索を含む
各種の処理を一層効率的に実行することができる。
【0186】部分列の具体的内容はデータ検索装置及び
データ検索方法の辞書ツリー上で復元できる(特に請求
項7の発明)から、コード列1を除いて、第1、第2の
部分列2,3を本実施形態のデータ処理装置及びデータ
処理方法で扱えばよい。
【0187】さらに具体的には、第6実施形態の目的
は、データ変更の手続が簡潔なデータ処理装置及びデー
タ処理方法を提供することである。第6実施形態の他の
目的はメモリを効率的に利用するデータ処理装置及びデ
ータ処理方法を提供することである。
【0188】第6実施形態のデータ処理装置は、図21
に示すように、コード列の各区間に基づいて各区間の範
囲を表す二分木31を生成する二分木生成手段32と、
指定位置に対応する区間を二分木31に基づいて検索す
る区間検索手段33と、区間が変更された場合に変更の
内容に応じて二分木31を更新する二分木更新手段34
と、を有する。
【0189】このうち、前記二分木更新手段34は、区
間長を変更する区間長変更手段41と、区間が削除され
た場合に削除された区間に対応するノードを削除する削
除手段42と、区間が追加された場合に追加された区間
に対応するノードを追加する追加手段43と、を有す
る。また、第6実施形態のデータ処理装置は、各ノード
間の結合順序を変更することによって、二分木の構造を
調整する構造調整手段45を有する。
【0190】[6−2.第6実施形態の作用及び効果]
上記のような構成を有する第6実施形態では、次のよう
な作用によって、複数の区間を含むコード列を格納し、
コード列から所望の位置のコード値を取り出し、及び、
コード列に対して所望の編集を行うことができる。
【0191】[6−2−1.二分木生成処理]まず、二
分木生成手段32が、コード列の各区間に基づいて各区
間の範囲を表す二分木31を生成する。二分木の生成
は、各区間を入力する度にノードを追加する追加手段4
3を適用することによっても実現することができる。コ
ード列と区間はキーボード入力など所望の方法で与えれ
ばよい。二分木31は、各区間に対応するノードをルー
トから末端側に向けて樹状に接続したものである。各ノ
ードの末端側には当該ノード以前の区間に対応するノー
ドである前方ノード及び当該ノード以降の区間に対応す
るノードである後方ノードのうち該当するものが接続さ
れる。また、各ノードには、当該ノード及び当該ノード
より末端側に存在する各ノード(部分木)に対応する区
間長の合計である部分区間長が設定される。
【0192】図22は、第6実施形態における二分木3
1の例であり、図23は、図22の二分木31を説明す
る図である。これらの図に示すように、第6実施形態に
おける二分木31は、各区間[1..3],[4..
5],[6..9],[10..15],[16..1
6]に対応するノードA,B,C,D,Eをルートであ
るノードBから末端側に向けて樹状に接続したものであ
る。ノードBの末端側にはノードB以前の区間[1..
3]のノードA、及び、ノードB以降の区間のノード
D,C,Eが接続されている。さらに、ノードDの末端
側にはノードD以前の区間のノードC及びノードD以降
の区間のノードEが接続されている。
【0193】また、各ノードA,B,C,D,Eには、
当該ノード及び当該ノードより末端側の各ノード(部分
木)に対応する区間長の合計である部分区間長3,1
6,4,11,1が設定されている。例えば、ノードD
には、ノードDに対応する区間[10..15]の区間
長である6に加え、ノードC,Eに対応する区間
[6..9],[16..16]の長さである4,1を
加えた11が設定されている。
【0194】このように、第6実施形態のデータ処理装
置では、区間ごとにノードが設定されるので、ノードを
格納するためのデータブロックは区間と同数あれば足
り、データがコード(位置)数分のメモリを占有するこ
とがない。このため、メモリ効率が向上する。特に、二
分木は、各ノードのためのデータ格納領域をポインタで
接続することによって構成することができるので、膨大
な連続領域を確保する必要がなくなり、メモリを効率よ
く利用できる。また、区間ごとに長さの精度が異なるデ
ータを扱うこともできるので、浮動小数点など自由な種
類の長さの区間を効率よく処理できる。
【0195】このデータ処理装置では、検索などの処理
においては、各ノードの区間の位置は当該ノードの前方
(後方)ノードの区間長に基づいて算出でき、また、ノ
ードの部分区間長からそのノードを根とする部分木に含
まれる前方ノードと後方ノードの区間長を減ずることに
よって当該ノードの正味区間長を算出できる。前方(後
方)ノードの区間長の合計は左(右)の子の部分区間長
から得られる。このため、コード列の任意の位置(指定
位置)のコードは、指定位置と各ノードの位置・区間長
を比較することによって容易に特定することができる。
【0196】ここで、あるノードの区間の位置は当該ノ
ードの前方(後方)ノードの区間長の合計から算出でき
る。そして、各ノードの位置関係はノード間の相互関係
で表され、各ノードの位置は、他のノードに関する部分
区間長に基づいて算出される。このため、区間の一部の
変更に際しても、変更の影響の波及範囲は変更されたノ
ードや当該ノードからルートに至るパス上のノードに局
限されるので、変更の手続が簡潔で済む。具体的には、
区間の長さ変更を伴う編集の際にも、データ処理の所要
時間は、区間の数の対数に比例する程度となる。
【0197】[6−2−2.区間検索処理]図24は、
第6実施形態のデータ処理装置における検索の手順を示
すフローチャートである。すなわち、検索などの処理で
は、区間検索手段33が、コード列中の任意の位置であ
る指定位置が属する区間を特定する場合に、ポインタの
指すノードであるカレントノードをルートから(ステッ
プ241)順次下位ノードに移動させながら、次の手順
を繰り返す。
【0198】すなわち、カレントノード及びカレントノ
ードの下位ノードの区間長に基づいてカレントノードの
範囲を算出し(ステップ242)、算出した範囲と指定
位置を比較し、算出した範囲よりも指定位置が前方の場
合は(ステップ243)、前方ノードにカレントノード
を進め(ステップ244)、算出した範囲よりも指定位
置が後方の場合は(ステップ245)後方ノードにカレ
ントノードを進め(ステップ246)、算出した範囲に
指定位置が含まれる場合は(ステップ247)、指定位
置がカレントノードに含まれると特定する(ステップ2
48)。
【0199】この手順の実行の具体例を示す。すなわ
ち、与えられた指定位置を変数Pに格納し、カレントノ
ードを指すポインタを変数nに格納する(以下、カレン
トノードをnで表す)。
【0200】なお、この手順において、ツリー全体中に
おける実質的な指定位置は変化しないが、カレントノー
ドが下方に移動するときは、指定位置の表現形式は、カ
レントノードの相対的位置に基づいて更新される。
【0201】そして、nに前方ノード(以下「左の子」
という)があり、かつ、
【数2】P≦nの左の子の部分区間長 (但し、区間が浮動小数点で表わされ、各区間が左の端
点を含み右の端点を含まない場合つまり[a,b),
[b,c),・・・(a,b,cは実数)という形式の
区間の列を扱う場合(以下「浮動小数点の場合」とい
う)は、
【数3】P<nの左の子の部分区間長) ならば、nをnの左の子に変更する。
【0202】また、nに後方ノード(以下「右の子」と
いう)があり、かつ、
【数4】 P>(nの部分区間長−nの右の子の部分区間長) (浮動小数点の場合は
【数5】 P≧(nの部分区間長−nの右の子の部分区間長)) ならばPを
【数6】 P−(nの部分区間長−nの右の子の部分区間長) に変更し、nをnの右の子に変更する。
【0203】この繰り返しが終了したとき、
【数7】(nの左の子の部分区間長)<P (浮動小数点の場合は
【数8】(nの左の子の部分区間長)≦P) かつ
【数9】 P≦(nの部分区間長−nの右の子の部分区間長) (浮動小数点の場合は
【数10】 P<(nの部分区間長−nの右の子の部分区間長)) であれば、nが与えられた位置を含む区間に対応するノ
ードである。これは、指定位置がカレントノードの前の
区間より後で、かつ、指定位置がカレントノードの正味
の区間長に収まっていれば、カレントノードの区間が指
定位置を含むことを意味する。
【0204】なお、nに左の子がなくかつ
【数11】P≦0 (浮動小数点の場合は
【数12】P<0) あるいは、nに右の子がなくかつ
【数13】P>n (浮動小数点の場合は
【数14】P≧n) の部分区間長、であれば、与えられた位置を含む区間は
登録されていない。これは、最前のノードより指定位置
が前か、又は、指定位置が最後のノードより後の場合
は、指定位置はどの区間にも含まれないことによる。こ
れは、nがルートのときに、左右の子の有無にかかわら
ず判定してよい。
【0205】ところで、発見されたノードnが表す区間
は[指定位置−(P−nの左の子の部分区間長)+Δ
(位置の最小単位)..指定位置+(nの部分区間長−
nの右の子の部分区間長−P)]である(但し、浮動小
数点の場合は、ノードnが表す区間は[指定位置−(P
−nの左の子の部分区間長),指定位置+(nの部分区
間長−nの右の子の部分区間長−P)])。
【0206】例えば、図22の二分木において、指定位
置8を含む区間に対応するノードは、図25、図26、
図27のようにノードを辿って特定される。特定された
ノードでは、nは[8−(3−0)+1..8+(4−
0−3)]=[6..9]を表している(図27)。
【0207】このように、第6実施形態のデータ処理装
置では、区間検索手段33が、カレントノードをルート
から順次下位側に移動させながらカレントノードの範囲
と指定位置を比較するという簡潔な手順によって、指定
位置が属する区間を特定するので、容易に検索などの処
理を行うことができる。
【0208】[6−2−3.特定処理]本実施形態で
は、上記とは逆に、任意のノードを指定し、指定された
ノードである指定ノードに対応する区間を特定すること
もできる。この処理では、次のような手順によって、区
間の位置を特定することができる。したがって、右区間
又は左区間(総区間)というときは、ルートの区間より
も指定ノードの区間側の区間を意味する。
【0209】すなわち、カレントノードを、与えられた
指定ノードから順次親ノードの方向へルートまで移動さ
せる。この移動の際に、移動前の子ノードの親ノードに
対する左右の別に応じてノードの区間長を順次加算する
ことによって、指定ノード以前の総区間長である左区間
長又は指定ノード以降の総区間長である右区間長のうち
少なくとも一方を特定する(請求項20、47)。図2
8は、指定ノードに対応する区間を特定する手順の一例
を示すフローチャートである。
【0210】この手順では、まず指定ノードをカレント
(ノード)とし、カレントの左の子の部分区間長を左区
間長とする(ステップ281)。ここで、左区間(長)
は指定ノードに対応する以前の総区間(長)である。
【0211】そして、カレントがルートとなるまで(ス
テップ282)、次の手順を繰り返す。すなわち、元の
カレントを子ノードとしてカレントを親に進め(ステッ
プ283)、このとき元の子ノードがカレントの右の子
であったときは(ステップ284)、カレントの正味区
間長とカレントの左の子の部分区間長との和を算出し
(ステップ285)、左区間長にこの和を加算する(ス
テップ286)。
【0212】ここで、ノードの部分区間長は、当該ノー
ドをルートとする部分木に含まれる各ノードの正味区間
長の合計(区間長)を意味することに留意されたい。
【0213】カレントの正味区間長とカレントの左の子
の部分区間長との和は、カレントの部分区間長から元の
カレントである右の子の部分区間長の合計を減じること
によって算出できる。
【0214】カレントがルートとなったとき(ステップ
282)、指定ノードの左端は、左区間長の値の次、す
なわち1加算した値として得られる(ステップ28
7)。このとき、区間が不動小数点で表されるときは左
区間長の値がそのまま区間の左端となる。また、指定ノ
ードの右端は、左区間長に指定ノードの正味区間長を加
算した値として得られる(ステップ288)。
【0215】なお、指定ノードの右区間(指定ノードに
対応する区間以降の総区間)は、指定ノードの右端の値
の次(1加算)から始まり、二分木の表す区間全体の終
端まで続く。この終端は、ルートの部分区間長の値と同
じ値で示される。
【0216】図29は、指定ノードに対応する区間を特
定する手順の他の一例を示すフローチャートである。図
28の手順では、指定ノードの区間の左側に存在する左
区間を求め、指定ノードの区間の右側は、左区間長に基
づいて算出した。図29の手順は、右区間と左区間の双
方の長さを求め、指定ノードの区間をこの両区間にはさ
まれた区間として特定するものである。
【0217】この手順では、まず指定ノードをカレント
とし、カレントの左の子の部分区間長を左区間長とし、
カレントの右の子の部分区間長を右区間長とする(ステ
ップ291)。そして、カレントがルートとなるまで
(ステップ292)、次の手順を繰り返す。
【0218】すなわち、元のカレントを子ノードとして
カレントを親に進める(ステップ293)。そして、元
の子ノードがカレントの右の子であったときは(ステッ
プ295)、左区間長に、新たなカレントの正味区間長
とカレントの左の子の部分区間長との和を加算し(ステ
ップ296)、元の子ノードがカレントの左の子であっ
たときは(ステップ295)、右区間長に、新たなカレ
ントの正味区間長とカレントの右の子の部分区間長との
和を加算する(ステップ297)。
【0219】カレントの正味区間長とカレントの左
(右)の子の部分区間長の和は、カレントの部分区間長
から右(左)の子の部分区間長を減じることによって算
出できる。
【0220】カレントがルートとなったとき(ステップ
292)、指定ノードの区間は左区間と右区間にはさま
れた区間として特定される(ステップ298)。
【0221】このように、第6実施形態では、カレント
ノードを指定ノードからルートまで移動させながら、移
動方向に応じて前方(後方)ノードの合計区間長を順次
加算する。これによって、指定ノードの区間の位置を、
区間の左又は右のノードの区間長を通じて特定する。第
6実施例では、このような簡潔な手順によって、指定ノ
ードの区間の位置が特定されるので、容易に各種処理を
行うことができる(請求項20、47)。
【0222】なお、図30は、上記のような検索に適し
たハードウェアの構成の一例を示す機能ブロック図であ
る。すなわち、ポインタの格納領域Pと部分区間長の格
納領域Lを単位領域とし、各ノードごとの情報を各単位
領域に格納する。単位領域は固定長として配列で確保す
る。ノード間のリンクは、ポインタの格納領域に双方向
に辿れるポインタを格納することによって実現する。
【0223】検索では、主に制御部Cがポインタにアク
セスすることによって各ノードを辿り、主に演算部Aが
部分区間長にアクセスすることによって区間長の演算を
行なう。この際、カレントノードのポインタ又は格納ア
ドレスはカレントレジスタCRに格納される。ノードに
関する他の情報、例えばカレントノードを移動したとき
の元のノードなどは補助レジスタSRに格納される。部
分区間長の計算の際には、必要に応じて区間長レジスタ
LRが用いられる。
【0224】このようなハードウェアは、以下の他の処
理においても用いることができる。
【0225】[6−2−4.二分木更新処理]区間が変
更された場合は、二分木更新手段34が、変更の内容に
応じて二分木31を更新する。このように、第6実施形
態では、区間の変更の場合に二分木31も変更されるの
で、二分木31の生成をやり直す必要がない。
【0226】すなわち、第6実施形態では、コード列の
区間長が変更された場合は区間長変更手段41が二分木
31における区間長を変更する。また、コード列の区間
が削除された場合は削除手段42が削除された区間に対
応するノードを二分木31において削除する。また、コ
ード列の区間が追加された場合は追加手段43が追加さ
れた区間に対応するノードを二分木31において追加す
る。
【0227】このように、第6実施形態では、区間の長
さ変更・削除・追加という区間の変更の内容に応じて、
それぞれ区間長変更手段・削除手段・追加手段が二分木
31を更新する。このため、これらの手段を組み合わせ
ることによってコード列の置き換えなど複雑な処理を行
うことができる。
【0228】[6−2−4−1.区間長変更処理]この
うち、区間長の変更では、長さを変更する区間のノード
からルートへ至る各ノードの部分区間長が、変更分だけ
順次変更される。
【0229】図31は、区間長の変更の手順を示すフロ
ーチャートである。区間長の変更では、この図に示すよ
うに、まず対象ノードをカレントノードとする(ステッ
プ311)。そして、カレントがルートとなるまで(ス
テップ314)、カレントを順次ルート側に進め(ステ
ップ312)、各カレントノードの部分区間長を変更分
だけ増減する(ステップ313)手順を繰り返す。
【0230】このように、第6実施形態では、区間の長
さが変更された場合でも、変更された区間のノードから
ルートまでのノードを変更すれば足りる。このため、第
6実施形態では、従来のように、変更された区間以降の
区間に対応する全ノードを記憶領域上で移動させる必要
がないので、データ処理が効率化される。
【0231】例えば、図22の例において、長さ4の区
間[6..9]を2短縮して長さ2の区間[6..7]
に変更した場合、これに対応して、ノードB,C,Dの
部分区間長がそれぞれ2減じられて図32の状態とな
る。この後、位置8を含む区間に対応する節を検索する
と(図33,図34)、ノードCではなくノードDが該
当し、このノードDの表す区間は[8−(3−2)+
1..8+(9−1−3)]=[8..13]である。
【0232】次に、区間の追加及び削除の手順を説明す
る。図35は、第6実施形態における区間の追加及び削
除の手順を示すフローチャートである。
【0233】[6−2−4−2.区間の追加処理]区間
の追加の際には、追加手段43が、二分木31につい
て、追加に係る区間に対応するノードを二分木31に追
加し(ステップ351)、ノードの結合順序を調整し
(ステップ352)、各ノードの区間長を調整する(ス
テップ353)。このように、第6実施形態では、追加
手段43が区間長を調整するので、二分木31の整合性
が維持される。
【0234】なお、ノードの追加の手法は従来から複数
のものが公知であり、そのいずれを用いてもよい。例え
ば、図22において、区間[10..15]の前に長さ
3の区間[10..12]を追加し、それまでの区間
[10..15]及び区間[16..16]を、それぞ
れ、区間[13..18]及び区間[19..19]に
移動する場合、新たなノードの追加の態様は、図36,
図37及び図38の3つの態様が考えられる。
【0235】また、前記追加手段43は、前記区間長の
調整において、付加したノードの部分区間長を、その子
のノードの部分区間長(子がない場合は0)の和と、追
加する区間の長さの和とし、付加したノードの親を経由
してルートに至るパス上の各ノードについて、部分区間
長を追加する区間の長さだけ加算する。
【0236】このように、第6実施形態では、区間の追
加の場合も、追加されたノードの親ノードからルートま
での各ノードに区間長を加算するという単純な処理で区
間長を調整することができる。なお、図37のように、
βの位置にノードを付加した二分木31を図39に示
す。
【0237】[6−2−4−3.区間の削除処理]前記
削除手段42は、区間の削除の際には、削除する区間に
対応するノードを二分木31から削除し、ノード間の結
合関係を調整し、必要に応じて(ステップ354)、部
分区間長を調整する(図35/ステップ353)。この
ように、第6実施形態では、削除手段42がノードの結
合順序や区間長を調整するので、残りの区間の順序など
二分木31の整合性が維持される。
【0238】このような削除と調整の手法は、従来から
複数の手法が知られており、いずれの手法を用いてもよ
い。例えば、図39の二分木31において、ノードDを
削除する場合、削除後の構造は図40又は図41のいず
れでもよい。以下の説明は、削除後に親ノードが変更さ
れるノードは、削除されたノードの子のみである場合に
関する。これ以外の場合は、後述の構造調整によってノ
ードの削除の前又は後に二分木31の構造を適切に変形
すれば足りるからである。
【0239】まず、削除されたノードの親であったノー
ドからルートに至るパス上の各ノード(図40ではBの
み)について、部分区間長を、(削除されたノードの部
分区間長)−(削除されたノードの前方ノード(左の
子)の部分区間長)−(削除されたノードの後方ノード
(右の子)の部分区間長)、すなわち削除されたノード
の正味区間長だけ減じる。
【0240】次に、削除されたノードの元の子の親ノー
ドでかつ削除されたノードの親でなかったノード(例え
ばX)から、(親が、削除されたノードの元の親であ
る)もう一方の子(例えばC)に至るパス上の各ノード
(例えばX,C)について、部分区間長を前者の子(例
えばE)の部分区間長だけ加算する。
【0241】図42は、削除後の二分木31を示す。
【0242】[6−2−4−4.構造調整処理]区間の
追加・削除の際には、構造調整手段45が、各ノード間
の結合順序を変更することによって、二分木31の各部
においてノード数の所定のバランスが維持されるように
二分木31の構造を調整する(ステップ355)。
【0243】この構造調整によって、二分木31の一部
が突出することがなくなり、データ処理で参照されるル
ートから各ノードに至るパスの長さが平均化される。こ
のため、データ処理で対象とするノードまでのパスが偶
然に長いためにデータ処理に長時間を要する事態が防止
され、検索や変更などのデータ処理が効率化される。あ
るいは別の構造調整の方法によれば、二分木に対する検
索・追加・削除の操作系列全体の処理時間が平均化され
る。
【0244】構造調整はノードの削除や追加及び参照に
際して行えばよい。構造調整の手法は従来から複数存在
し、これら従来の手法を含むいかなる手法を用いてもよ
いが、ツリーの構造が変更されたときは、用いる構造調
整の手法に対応した手法によって部分区間長の調整を行
なうべきである。なお、構造調整によって、ルートから
各ノードに至るパスの長さは、通常、ノードの総数の対
数に比例する。これによって、検索・区間長調整・構造
調整など、各種処理の所要時間が区間の総数の対数にほ
ぼ比例して平均化される。
【0245】ここで、構造調整の手順の単位としては、
所定の範囲について、二分木31のノードの順序を維持
して構造を変化させる処理であるrotation,double rot
ation (zig-zig),double rotation (zig-zag) などが考
えられる。構造調整の具体的な手順は、これらの単位と
なる手順を組み合わせて構成する。
【0246】例えば、従来の構造調整の手順の単位を、
ルートから任意のノードに至るパスの全部又は一部につ
いて、適用した例を示す。すなわち、図43の二分木3
1にrotationを適用すると図44のように調整される。
また、図45の二分木31にdouble rotation (zig-zi
g) を適用すると図46のように調整される。図47の
二分木31にdouble rotation (zig-zag) を適用すると
図48のように調整される。
【0247】また、各ノードnについて、変化前の部分
区間長をS(n),変化後の部分区間長をSS(n)と
した場合、各単位となる操作の後で各ノードに設定すべ
きSS(n)は、操作前の部分区間長S(n)に基づい
て次のように計算する。但し、X,Y及びZ以外のノー
ドは変更しなくてよい。
【0248】rotationの場合は、
【数15】 SS(X)=S(X)−S(Y)+S(B) SS(Y)=S(X) のように計算される。
【0249】double rotation (zig-zig) の場合は、
【数16】 SS(X)=S(X)−S(Y)+S(B) SS(Y)=S(X)−S(Z)+S(C) SS(Z)=S(X) のように計算される。
【0250】double rotation (zig-zag) の場合は、
【数17】 SS(X)=S(X)−S(Y)+S(B) SS(Y)=S(Y)−S(Z)+S(C) SS(Z)=S(X) のように計算される。
【0251】他に、X,Y,Zの正味の区間長を計算し
てから、変更後の部分区間長を計算してもよい。ノード
nの正味の区間長をT(n)として、rotationの場合
【数18】 T(X)=S(X)−S(Y)−S(A) T(Y)=S(Y)−S(B)−S(C) SS(X)=T(X)+S(A)+S(B) SS(Y)=T(Y)+SS(X)+S(C) zig-zig の場合
【数19】 T(X)=S(X)−S(Y)−S(A) T(Y)=S(Y)−S(Z)−S(B) T(Z)=S(Z)−S(D)−S(C) SS(X)=T(X)+S(A)+S(B) SS(Y)=T(Y)+SS(X)+S(C) SS(Z)=T(Z)+SS(Y)+S(D) zig-zag の場合
【数20】 T(X)=S(X)−S(Y)−S(A) T(Y)=S(Y)−S(Z)−S(D) T(Z)=S(Z)−S(C)−S(B) SS(X)=T(X)+S(A)+S(B) SS(Y)=T(Y)+S(C)+S(D) SS(Z)=T(Z)+SS(X)+SS(Y) のように計算される。
【0252】このように、第6実施形態では、二分木3
1の所定の範囲について構造を変化させる異なった複数
の種類の処理を組み合わせて構造調整が行われるので、
二分木31の状態に応じた内容の構造調整を行うことが
できる。
【0253】構造調整の具体的な方法としては、二分木
の高さを常にある程度以下に保って単一操作の所要時間
を一定以下に抑えるもの(例えばred-black tree)と、
自己調整二分木(splay tree)のように単一操作の最悪
時間は保証しないが、操作系列全体の所要時間(単一操
作の平均所要時間)を短縮するものがあるが、いずれも
構造の変化は上記の処理(操作単位)の組み合わせで事
足りる。
【0254】[6−2−4−5.構造調整の例]ここ
で、構造調整の具体的な方法の一例として、splay tree
(splaying)を挙げ(請求項34)、splayingが二分木の
構造を変更する手順と、この変更において各ノードの部
分区間長がどのように変更されるかを例を挙げて説明す
る。
【0255】splayingは、任意の特定のノード(対象ノ
ード)がルートとなるように二分木を変更することであ
る(参考文献:Data Structures and Network Algorith
ms,Robert Endre Tarjan 著、"4.3 Self-Adjusting bin
ary trees" (pp53-56) )。splaying操作が適用される
対象は、一般に、検索、追加又は削除の各操作の対称と
なったノードであり、具体的には、検索においてキーが
一致し検索結果と決定されたノード(キーが一致するノ
ードが存在しなかった場合は最後に訪れたノード)、ノ
ードの追加においては追加されたノード、ノードの削除
においては削除されたノードの親ノードである。
【0256】splaying操作では、対象ノードを最も根か
ら遠いノードとして、前記のrotation,double rotation
(zig-zig),double rotation(zig-zag)のうちいずれか条
件に合うものを繰り返し適用することによって、最終的
に対象ノードがルートとなる。
【0257】例えば、図49は二分木の一例を示す図で
ある。この図では、円はノードを示し、三角形は円で表
されているノードを根(ルート)とする部分木を示す。
このような二分木を表すデータは、各ノードごとのデー
タをポインタで接続することによってリスト形式で構成
することができる。図50は、各ノードごとのデータの
形式を示す概念図である。この図に示すように、各ノー
ドごとのデータは、右の子へのポインタ、左の子へのポ
インタ、上位ノード(親)へのポインタ及び当該ノード
の部分区間長を含む。
【0258】また、図51は、図49の二分木の一部分
について、各ノードごとのデータがポインタで接続され
ている状態を示す概念図である。
【0259】この図に示すように、以下の説明では、
a、b、c、A、B、Cなどの記号で表される各ノード
の部分区間長をa1、b1、c1、A1、B1、C1の
ように同じ記号に数字の添字を付けて表す。また、例え
ば部分区間長a1が更新されたときはa2やa3のよう
に新たな添字で表す。
【0260】以下、図49におけるノードaに対するsp
layingの実行の例を以下に示す。なお、splayingを実行
する前におけるノードaの正味区間長は、ノードaの部
分区間長a1から、ノードaの右の子であるノードFの
部分区間長F1と、ノードaの左の子であるノードEの
部分区間長E1を減じたものであり、
【数21】a1−F1−E1 である。
【0261】splayingでは、まず、ノードa、b、c及
びE、Dを対象にdouble rotation(zig-zig) を適用
し、ノードaをノードcに代えてノードdの右の子の位
置に移動させる。図52は、図49の状態の二分木に対
してdouble rotation (zig-zig) を適用した後の二分木
の状態を示す図である。
【0262】この操作に伴って、太い円で示すノード
c、b、aの部分区間長が
【数22】c2=c1−b1+D1 b2=c1−a1+E1 a2=c1 のように変更される。
【0263】splayingによる二分木の変形は、ノードの
データ間を接続するポインタをつなぎ替えることによっ
て行なわれる。図53は、図51のノードd以下のデー
タとポインタについて、図52の状態を示す図である。
この図では、ノードdの左の子であるノードBについて
は変更されていないが、ノードdの右の子であるノード
a以下の各ノードが変更されている。
【0264】次に、ノードa、d、e及びF、bを対象
にdouble rotation (zig-zag) を適用し、ノードaをノ
ードeに代えてノードfの右の子の位置に移動させる。
図54は、図52の状態の二分木に対してdouble rotat
ion (zig-zag) を適用した後の二分木の状態を示す図で
ある。
【0265】この操作に伴って、太い円で示すノード
e、d、aの部分区間長が
【数23】e3=e1−d1+F1 d3=d1−a2+b2 a3=e1 のように変更される。
【0266】さらに、ノードa、f、g及びd、eを対
象にdouble rotation (zig-zag) を適用し、ノードaを
ノードgに代えてノードhの左の子の位置に移動させ
る。図55は、図54の状態の二分木に対してdouble r
otation (zig-zag) を適用した後の二分木の状態を示す
図である。
【0267】この操作に伴って、太い円で示すノード
g、f、aの部分区間長が
【数24】g4=g1−f1+e3 f4=f1−a3+d3 a4=g1 のように変更される。
【0268】最後に、ノードa、h及びgを対象にrota
tionを適用し、ノードaをノードhに代えてルートの位
置に移動させる。図56は、図55の状態の二分木に対
してrotationを適用した後の二分木の状態を示す図であ
る。
【0269】この操作に伴って、太い円で示すノード
h、aの部分区間長が
【数25】h5=h1−a4+g4 a5=h1 のように変更される。
【0270】この例では、splayingによって、対象ノー
ドaがルートに移動したとともに、対象ノードaからも
とのルートノードhに至るパス上に位置していた各ノー
ドb、c、d、e、f、gからルートに至るパスの長さ
が大部分短縮されたので、この二分木に対する各種処理
が迅速化される(請求項34)。すなわち、splaying前
(図49)とsplaying後(図56)を比較すれば、上記
各ノードからルートに至る各パスの長さが次のように変
化したことを確認することができる。
【0271】
【表2】 ノード splaying前 splaying後 b 6 3 c 5 4 d 4 2 e 3 3 f 2 1 g 1 2
【0272】このsplayingにおいて、各ノードの部分区
間長は、splaying前の図49の状態における各ノードの
部分区間長に基づいて、次のように計算されたことにな
る。まず、ノードbについては、
【数26】b2=c1−a1+E1 であり、ノードcについては、
【数27】c2=c1−b1+D1 である。
【0273】また、ノードdについては、
【数28】d3=d1−a2+b2 であるが、この式は、
【数29】d1−(c1)+(c1−a1+E1) と展開できるので、項を消去して、
【数30】d1−a1+E1 となる。
【0274】また、ノードeについては、
【数31】e3=e1−d1+F1 である。
【0275】また、ノードfについては、
【数32】f4=f1−a3+d3 であるが、この式は、
【数33】 f4=f1−(e1)+(d1−a1+E1) と展開できるので、変形し、
【数34】f4=f1−e1+d1−a1+E1 となる。
【0276】同様に、ノードgについては、
【数35】g4=g1−f1+e3 から
【数36】g4=g1−f1+e1−d1+F1 となる。
【0277】以上よりノードhについては、
【数37】h5=h1−a4+g4 であるが、この式は、
【数38】h5=h1−(g1)+(g1−f1+e1
−d1+F1) と展開できるので、項を消去し、
【数39】h5=h1−f1+e1−d1+F1 となる。
【0278】このようなsplaying後のノードaが表す区
間の正味区間長は、ノードaの部分区間長a5から、ノ
ードaの右の子であるノードhの部分区間長h5と、ノ
ードaの左の子であるノードfの部分区間長f4を減じ
たものすなわち、
【数40】a5−h5−f4 となるが、この式を展開し、
【数41】h1−(h1−f1+e1−d1+F1) −(f1−e1+d1−a1+E1) とし、項を消去すれば、
【数42】a1−F1−E1 となり、splaying前の前記数式21と比べて等しく維持
されている。
【0279】逆に、splaying前の図49において、ノー
ドaの区間の左にある区間の長さを合計すると、
【数43】E1+(b1−a1)+(c1−b1) +(d1−c1)+(f1−e1) となり、項を消去すれば、
【数44】E1−a1+d1−e1+f1 となり、これはすなわちsplaying後のノードfの部分区
間長f4と等しいので、splayingによってノードaの区
間の相対的位置も影響を受けていないことが確認でき
た。
【0280】[6−2−4−6.splayingの応用]ま
た、上記のようなsplayingを用いれば、すでに述べた各
処理について、次のような手順による実現が可能とな
る。まず、ノードを指定して、そのノードに対応する区
間を特定する場合、二分木に対してsplayingを行なうこ
とによって、与えられたノードをルートに移動する(請
求項21)。
【0281】このようにすれば、ルートとなった指定ノ
ードが表す区間は、二分木全体に係る区間の左端を0と
した場合、始端が指定ノードの左の子の部分区間長の次
(+1)であり、終端が、指定ノードの部分区間長から
指定ノードの右の子の部分区間長を減じた値の位置とな
り、容易に特定される。
【0282】また、区間長を変更する場合、区間長を変
更しようとするノードをsplayingによってルートとし、
ルートとなったノードの部分区間長を必要なだけ増減す
ればよい(請求項25)。この手順によれば、ルート以
外の部分区間長を変更する必要がないので、処理が間略
化される。
【0283】また、ノードの追加とこれに伴う部分区間
長の調整を行なう場合、追加しようとするノードの直前
及び直後のノードに対してsplayingを行なって順次ルー
トとし、追加しようとするノード直前のノードを左の
子、直後のノードを右の子とし、追加するノードの部分
区間長は左右の子の部分区間長に新たな区間の長さを加
えたものとすればよい(請求項28)。
【0284】例えば、図57は、splayingによる区間の
追加前の二分木の一部の状態を示す図である。この図に
示す部分は、より大きな二分木のルートでない任意の場
所に位置しているものとする。この図に示すように、ノ
ードLの対応する区間の直後にノードXの指す区間を挿
入しようとするとき、ノードXは、ノードLの右の子を
ルートとする部分木の最も左寄りの位置に、Rで示され
る部分木の最も左寄りのノードの左の子として、追加さ
れるべきである。これは、概念的には、ノードLとノー
ドRの間にノードXを追加することと同義である。
【0285】この場合、最初のsplayingの実行によっ
て、ノードRをルートとするが、このノードRはノード
Xの直後にくるべきノードである。そして、ノードXの
直前となるべきノードLを根とするようにsplayingを実
行する。図58は、図57の状態に対して二度のsplayi
ngを実行した後の二分木の状態を示す図である。そし
て、ノードLを左の子、直後のノードRを右の子として
ノードXを追加すればよい。図59は、このようにspla
yingによって区間を追加した後の二分木の状態を示す図
である。
【0286】図59におけるノードXの部分区間長は、
splaying後の図58におけるノードL(ルート)の部分
区間長に新たな区間の長さを加えたものである。また、
図59におけるノードLの部分区間長は、図58におけ
るノードLの部分区間長からノードRの部分区間長を減
じたものである。
【0287】また、図57において、最初に、ノードL
でsplayingし、次にノードRについてsplayingを行なう
ことによって、図60の状態とし、ノードXをノードL
の右の子として追加してもよい。図61は、ノードXを
ノードLの右の子として追加した後の二分木の状態を示
す図である。この状態では、ノードXの親からルートに
至るパス上のノードはノードL及びノードRに限定され
るので、部分区間長の変更(増加)はこれら2つのノー
ドについて行なえばよく、手順が間略化される(請求項
28)。
【0288】この処理は、図60の状態において左右対
象に適用することも可能で、この場合は、ノードXはノ
ードLの右の子として追加してもよい。
【0289】さらに、図60の状態において、仮にノー
ドLに右の子がないとき(すなわちノードRをルートと
する右側の部分木が全く存在しない場合)は、直ちにノ
ードLをノードXの左の子として図62の状態としても
よいし、あるいはノードXをノードLの右の子として図
63の状態としてもよい。
【0290】また、ノードの追加とこれに伴う部分区間
長の調整を行なう場合、次のようにしてもよい。すなわ
ち、まず、任意の手法を用いて新たな区間に対応するノ
ードを、当該ノードの正味区間長を0として追加する。
すなわち、追加したノードの部分区間長はその左右の子
の部分区間長の和としておく。次に、追加したノードを
splayingによって二分木のルートに移動し、ルートに移
動したノードの部分区間長を、追加した区間の正味区間
長だけ増加させる(請求項29)。このようにすれば、
所望の追加アルゴリズムを用いながら、ノードの部分区
間長の増加を1度だけ行なえばよいので、処理が迅速化
される。
【0291】また、ノード(区間)の削除についても、
splayingを用いて次のように行なうことができる。すな
わち、まず、削除すべきノードをsplayingによってルー
トに移動する。図64は、削除すべきノードXをsplayi
ngによってルートに移動した後の二分木の状態を示す図
である。この図において、削除すべきノードXは、ノー
ドRの前の区間に対応している。
【0292】次に、削除すべきノードXの直後のノード
Rをsplayingによってルートに移動する。図65は、削
除すべきノードXの直後のノードRをsplayingによって
ルートに移動した後の状態を示す図である。そして、ル
ートとなったノードRの部分区間長を、ノードXの正味
区間長だけ減じ、最後にノードXを削除する(請求項3
1)。図66は、ノードXを削除した後の二分木の状態
を示す図である。このようにすれば、削除の際の部分区
間長の調整の対象がルートのノードに限定されるので、
処理が迅速化される。
【0293】[6−2−4−7.平衡二分木]次に、区
間を表す二分木として、平衡探索木(balanced search t
rees) の一種である平衡二分木(balanced binary tree
s 、参考文献:Data Structures andNetwork Algorithm
s, Robert Endre Tarjan 著、"4.2 Balanced binary tr
ees"(pp48-53) )を用いた場合について、二分木の構造
調整=再平衡化(rebalancing) に関する各ノードの部分
区間長の変更について、具体的に説明する。
【0294】ノードの挿入や削除の後の再平衡化の際に
用いられる単位操作は、 (a)格上げ(promote) 、格下げ(demote) (b)単回転(single rotation) (c)単回転2回を含む双回転(double rotation) で、再平衡化は、これらの操作を組み合わせて順次適用
することによって行なわれる。
【0295】これら各単位操作のうち、(a)格上げ(p
romote) 、格下げ(demote)は二分木の構造を変えないの
で、部分区間長の変更は生じない。(b)単回転(singl
e rotation) は、本発明ではrotationと同じ操作を意味
するので、部分区間長の変更は前記数式15を用いて行
なえばよい。(c)双回転(double rotation) は、本発
明ではdouble rotation (zig-zag) と同じ操作を意味す
るので、部分区間長の変更は前記数式17を用いて行な
えばよい。
【0296】なお、1つの挿入の後の平衡化は最大2回
の単回転が最後にくる一連の格上げを必要とし(前記参
考文献、pp50)、1つの削除の後の平衡化は最大3回の
単回転が最後にくる一連の格下げを必要とする(前記参
考文献、pp51)。
【0297】ここでは、挿入後の再平衡化について具体
例を用いて説明する。平衡二分木の例として図67のツ
リーを用いる。このツリーでは、各ノードが1、2など
図67の各ノードに付記するような整数値のランクを有
し、あるノードxのランクをrank(x)で表し、ノ
ードxの親をp(x)、ノードxの祖父母をp2(x)
で表す場合、 (1)ノードxが親を持つとき、
【数45】条件1: rank(x)≦rank(p(x))≦rank
(x)+1 (2)ノードxが祖父母を持つとき、
【数46】条件2: rank(x)<rank(p2(x)) (3)ノードxが外部ノードであるとき、
【数47】条件3: rank(x)=0 かつノードxに親があるとき rank(p2(x))=1 が成立していなければならない。
【0298】また、各ノードについて、親のランクが1
大きいか又は親のランクが未定義のノードを黒、親のラ
ンクが当該ノードと同じノードを赤と呼ぶ。図67で
は、黒のノードを実線、赤のノードを破線で示す。
【0299】このツリーのノードごとの情報は、ノード
ごとの色を表す1ビットのフィールドを含むものとす
る。図68は、平衡二分木の例におけるノードごとの情
報の形式を示す図である。なお、このツリーにおけるノ
ード間のポインタによる結合は、図53と同様に行なわ
れる。なお、以下の説明では、a、b、cなどの記号で
表される各ノードの部分区間長をa1、b1、c1のよ
うに同じ記号に数字の添字を付けて表す。また、例えば
部分区間長a1が更新されたときはa2やa3のように
新たな添字で表す。
【0300】図67のツリーにおいて、例えば、ノード
fが表す区間の左に新たな区間(を表すノード)xを挿
入した場合、まずツリーは図69の状態となる。
【0301】この場合、部分区間長の変更は、6−2−
4−2.区間の追加処理で説明したように、各ノードの
部分区間長は、
【数48】f2=f1+x1 g2=g1+x1 e2=e1+x1 b2=b1+x1 となる。
【0302】このとき、追加したノードxとその親fは
共に赤ノードなので、
【数49】 rank(x)=rank(f)=rank(g) を意味し、前記条件2(前記数式46)に反するので構
造調整が必要である。
【0303】ここで、図70は、条件2に反する場合の
再平衡化の態様を示す図である。すなわち、図69の状
態は、ノードx、f、g、hについてみると、図70の
(a)の場合に該当するので、rank(g)を1増大
させた状態に相当するように、ノードgの色を赤に、そ
の赤色の子ノードf、hの色を黒に変更する。図71
は、ノードの色を変更した後の二分木の状態を示す図で
ある。
【0304】この状態では、ノードgとその親ノードe
が共に赤ノードとなり、さらに調整が必要である。すな
わち、ノードaが黒ノードであるから、ノードg、e、
b、aは、図70の(b)(の左右対称の場合)に該当
する。したがって、単回転を1回行ない、ノードbの色
を赤に、ノードeの色を黒に変える。図72は、単回転
及びノードの色の変更後の二分木の状態を示す図であ
る。
【0305】この処理は、ノードe、bに関するrotati
onであり、部分区間長は、
【数50】b3=b2−e2+c1 e3=b2 と変更される。図72において前記条件1、2、3に対
する違反は解消し、構造調整(再平衡化)は完了する。
【0306】以上の構造調整において、ノードe、bの
正味区間長は、ノード挿入前の図67においては、
【数51】e: e1−c1−g1 b: b1−a1−e1 であり、ノード挿入及び構造調整後の図72において
も、
【数52】e: e3−b3−g2 =b2−(b2−e2+c1)−(g1+x1) =e2−c1−g1−x1 =(e1+x1)−c1−g1−x1 =e1−c1−g1 b: b3−a1−c1 =(b2−e2+c1)−a1−c1 =(b1+x1)−(e1+x1)−a1 =b1−a1−e1 と、不変に保たれる。
【0307】[6−2−4−8.従来技術との比較]な
お、従来技術として、二分木のノードから当該ノードの
順位を獲得する方法が知られている(合衆国特許538
4568)。この従来技術(以下「従来例」という)
は、順位付けられたノードを処理する点では本発明と共
通する。しかし、従来例は区間ではなくノードの順位の
みを扱うもので、各ノードに付与されているのはそのノ
ードを根とする部分木に含まれるノードの数である。本
発明は区間を処理できる点で、この従来例よりも優れて
いる。
【0308】また、従来例では、ノードからルートの方
向へパスを辿ることによって、指定されたノードのアド
レスからノードの順位を計算する方法は示されている
が、区間内の任意の値を与えてノードを検索する方法は
示されていない。本発明は、区間内の任意の値を与えて
ノードを検索できる点で、この従来例よりも優れてい
る。本発明は、この検索を実現するために、ルートから
該当するノードの方向へパスを辿るという、従来例とは
逆の全く異なる手法を用いている。
【0309】また、従来例では、二分木の更新操作が、
先頭(左端)へのノードの追加、末尾(右端)のノード
の削除、任意のノードの先頭(左端)への移動、に限定
されており、任意のノード(区間)の追加及び削除につ
いては示されていない。本実施形態は、任意のノード
(区間)を追加及び削除できる点でこの従来例よりも優
れている。
【0310】[7.第7実施形態]複数行からなるテキ
ストを保持するデータ処理装置において、テキストを表
す二分木は、次のように構成してもよい。第7実施形態
は請求項35に対応する。すなわち、第1の二分木によ
って各行の順序を表す。この二分木は各行に対応するノ
ードを複数含み、各ノードの区間長は1とする。また、
第2の二分木によって各行ごとのコード列を表す。そし
て、各第2の二分木は、ポインタによって第1の二分木
の各ノードと対応付ける。
【0311】例えば xyz st (空行) (空行) abcdef を表す二分木を図73に示す。
【0312】第7実施形態では、各行の順序を表す第1
の二分木と各行ごとの内容を表す第2の二分木が別個独
立に形成されている。このため、各行の順序又は行の内
容の一方を変更する場合に他方の内容を変更する必要が
なく、コード列の処理を効率的に行うことができる。
【0313】特に、テキストエディタのようにコード列
の編集を行う場合は、少なくとも、コード列の一端(先
頭又は末尾)から数えた行(区間)の番号と、行の一端
から数えたコード数を指定し、これによって決定される
特定のコードにアクセスする必要がある。また、同様
に、特定のコードを変更し、当該文字の前又は後につい
て、1文字又は複数文字の文字列を挿入又は削除する必
要がある。また、行単位でも追加や削除が必要である。
第7実施形態はこのような処理に特に適する。
【0314】なお、同一のコードの連続部分を区間長2
以上の単一のノードで表せばメモリ効率や処理効率がさ
らに向上する。
【0315】[8.第8実施形態]複数行からなるテキ
ストのようなコード列を単一の二分木によって表すこと
も可能である。第8実施形態は請求項36に対応する。
すなわち、1行の最大文字数を十分大きい固定長nと
し、文字のない部分には所定の空白文字が入っているも
のとする。そして、テキスト全体を先頭(末尾)からの
連続したコード列として二分木を形成する。この場合、
例えば、先頭からi行目で行頭からj文字目のコード
は、全体の先頭から
【数53】(i−1)×n+j と表すことができる。
【0316】図74は、n=10として上記のテキスト
を表した二分木の例である。このようにすれば、データ
を単純な構成の単一の二分木で表すことができる。ま
た、連続する複数の同じ文字又は空白は、当該文字をラ
ベルとし連続の個数を区間長とする単一のノードで表せ
るので、処理効率とメモリ効率が向上する。例えば、図
74では、連続する8個の空白と2つの空行は28個の
空白として単一のノードで表すことができる。第8実施
形態は、同一コードの連続が多いデータにおいて特に実
益がある。
【0317】さらに、ファクシミリ画像などのビット列
データを、第8実施形態の二分木で表現することによっ
て圧縮すれば、従来技術と異なり、先頭から任意ビット
数目が1か0かを容易に知ることができる。
【0318】すなわち、ビット列は0と1が交互に複数
個ずつ連続したものである。従来は、0と1の連続個数
を連ねることによってデータを圧縮していた(run−
length−enoding)。しかし、run−l
ength−encodingでは、データの途中の所
定のビットが0か1かを判別したり、データの途中の一
部分を復元するには、それ以前のデータを全て復元し、
又は、各区間の長さを積算する必要があった。これに対
して、第8実施形態の二分木を用いれば、区間と同数の
ノードしか用いず、かつ、データの途中の任意のビット
を復元及び判別し得る。
【0319】[9.他の実施形態]なお、本発明は上記
各実施形態に限定されるものではなく、適宜実施態様を
変更して実施できるものであるから、次のような他の実
施形態を包含するものである。
【0320】例えば、上記実施形態では、コード列の例
としてアルファベット文字を用いて、アルファベット順
に基づいた辞書データやツリーを示したが、コード列と
しては日本語文字やハングル文字などいかなる種類の文
字を用いてもよい。また、本発明におけるコード列は文
字列には限定されず、音声パターンを表すコード、DN
Aの塩基配列を表すコードなど、いかなる種類のコード
でもよい。また、コード列における部分列の決定は、実
際にコード列のデータの一部を他の記憶領域に転送した
りして加工する必要はなく、所定のポインタで境界をマ
ーキングするなど、間接的な処理で足りる。
【0321】また、ツリーや二分木におけるエッジやノ
ードのラベルは1コードずつには限定されない。また、
データ検索装置における辞書データの形式はツリーには
限定されず、後方列と位置の対の対照テーブルを用いて
もよい。すなわち、そのような対照テーブルのデータ
を、後方列の文字コードの辞書順や、位置の数字の昇順
でソートしておき、2分探索などの手法でキー列を探索
してもよい。
【0322】また、第1−第5実施形態における検索
は、部分列の各後方列に基づいて前方一致で行ったが、
本発明における検索は、部分列の各前方列に基づいて後
方一致で行ってもよい。この場合、本明細書の「後方
列」と「前方列」は相互に読み替えるものとする。ま
た、処理の際に、キー列から文字を取り出す順序は後方
からとなる。第6実施形態における前方ノード、後方ノ
ードも同様に相互に読み替えられる。
【0323】
【発明の効果】以上のように、本発明によれば、検索用
データの更新所要時間が短いデータ検索装置を提供する
ことができる。また、本発明によれば、データを効率的
に処理するデータ処理装置を提供することができる。
【図面の簡単な説明】
【図1】本発明の第1実施形態の構成を表す機能ブロッ
ク図
【図2】本発明の第1実施形態における部分列の例
【図3】本発明の第1実施形態におけるサフィックス・
ツリーの例
【図4】本発明の第1実施形態におけるサフィックス・
ツリーの生成の手順を示すフローチャート
【図5】本発明の第1実施形態における最長一致ノード
検出の手順示すフローチャート
【図6】本発明の第1実施形態における検索の手順を示
すフローチャート
【図7】本発明の第1実施形態におけるコード列の変更
の手順を示すフローチャート
【図8】本発明の第1実施形態における部分列の例
【図9】本発明の第1実施形態における部分列の例
【図10】本発明の第1実施形態における部分列の例
【図11】本発明の第1実施形態における部分列の例
【図12】本発明の第1実施形態における部分列の例
【図13】本発明の第1実施形態における部分列の例
【図14】本発明の第1実施形態における部分列の例
【図15】本発明の第1実施形態における部分列の例
【図16】本発明の第2実施形態におけるサフィックス
・ツリーの例
【図17】本発明の第3実施形態におけるサフィックス
・ツリーの例
【図18】本発明の第4実施形態における部分列の例
【図19】本発明の第4実施形態における部分列の例
【図20】本発明の第5実施形態における部分列の例
【図21】本発明の第6実施形態のデータ処理装置の構
成を示す機能ブロック図
【図22】本発明の第6実施形態における二分木の例
【図23】本発明の第6実施形態における二分木の説明
【図24】本発明の第6実施形態における検索の手順を
示すフローチャート
【図25】本発明の第6実施形態における二分木の例
(検索時)
【図26】本発明の第6実施形態における二分木の例
(検索時)
【図27】本発明の第6実施形態における二分木の例
(検索時)
【図28】本発明の第6実施形態において、指定ノード
に対応する区間を特定する手順の一例を示すフローチャ
ート
【図29】本発明の第6実施形態において、指定ノード
に対応する区間を特定する手順の他の一例を示すフロー
チャート
【図30】本発明の第6実施形態において、検索に適し
たハードウェアの構成の一例を示す機能ブロック図
【図31】本発明の第6実施形態において、区間長の変
更の手順を示すフローチャート
【図32】本発明の第6実施形態における二分木の例
(区間長変更時)
【図33】本発明の第6実施形態における二分木の例
(区間長変更時)
【図34】本発明の第6実施形態における二分木の例
(区間長変更時)
【図35】本発明の第6実施形態におけるノードの追加
および削除の手順を示すフローチャート
【図36】本発明の第6実施形態における二分木の例
(区間追加時)
【図37】本発明の第6実施形態における二分木の例
(区間追加時)
【図38】本発明の第6実施形態における二分木の例
(区間追加時)
【図39】本発明の第6実施形態における二分木の例
(区間追加時)
【図40】本発明の第6実施形態における二分木の例
(区間削除時)
【図41】本発明の第6実施形態における二分木の例
(区間削除時)
【図42】本発明の第6実施形態における二分木の例
(区間削除時)
【図43】本発明の第6実施形態における二分木の例
(構造調整時)
【図44】本発明の第6実施形態における二分木の例
(構造調整時)
【図45】本発明の第6実施形態における二分木の例
(構造調整時)
【図46】本発明の第6実施形態における二分木の例
(構造調整時)
【図47】本発明の第6実施形態における二分木の例
(構造調整時)
【図48】本発明の第6実施形態における二分木の例
(構造調整時)
【図49】本発明の第6実施形態において、二分木の一
例を示す図
【図50】本発明の第6実施形態において、各ノードご
とのデータの形式を示す概念図
【図51】本発明の第6実施形態において、図49の二
分木の一部分について、各ノードごとのデータがポイン
タで接続されている状態を示す概念図
【図52】本発明の第6実施形態において、図49の状
態の二分木に対してdouble rotation (zig-zig) を適用
した後の二分木の状態を示す図
【図53】本発明の第6実施形態において、図51のノ
ードd以下のデータとポインタについて、図52の状態
を示す図
【図54】本発明の第6実施形態において、図52の状
態の二分木に対してdouble rotation (zig-zag) を適用
した後の二分木の状態を示す図
【図55】本発明の第6実施形態において、図54の状
態の二分木に対してdouble rotation (zig-zag) を適用
した後の二分木の状態を示す図
【図56】本発明の第6実施形態において、図55の状
態の二分木に対してrotationを適用した後の二分木の状
態を示す図
【図57】本発明の第6実施形態において、splayingに
よる区間の追加前の二分木の一部の状態を示す図
【図58】本発明の第6実施形態において、図57の状
態に対してsplayingを実行した後の二分木の状態を示す
【図59】本発明の第6実施形態において、splayingに
よって区間を追加した後の二分木の状態を示す図
【図60】本発明の第6実施形態において、図58の状
態において、さらに追加位置の直後に相当するノードR
でsplayingした後の二分木の状態を示す図
【図61】本発明の第6実施形態において、ノードXを
ノードLの右の子として追加した後の二分木の状態を示
す図
【図62】本発明の第6実施形態において、図60の状
態において、ノードLに右の子がなく、ノードLをノー
ドXの左の子とした後の二分木の状態を示す図
【図63】本発明の第6実施形態において、図60の状
態において、ノードLに右の子がなく、ノードXをノー
ドLの右の子として後の二分木の状態を示す図
【図64】本発明の第6実施形態において、削除すべき
ノードXをsplayingによってルートに移動した後の二分
木の状態を示す図
【図65】本発明の第6実施形態において、削除すべき
ノードXの直後のノードRをsplayingによってルートに
移動した後の状態を示す図
【図66】本発明の第6実施形態において、ノードXを
削除した後の二分木の状態を示す図
【図67】本発明の第6実施形態において、平衡二分木
の例としてのツリーを示す図
【図68】本発明の第6実施形態において、平衡二分木
の例におけるノードごとの情報の形式を示す図
【図69】本発明の第6実施形態において、図67のツ
リーにおいて、ノードfが表す区間の左に新たな区間
(を表すノード)xを挿入した場合におけるツリーの状
態を示す図
【図70】本発明の第6実施形態において、条件2に反
する場合の再平衡化の態様を示す図
【図71】本発明の第6実施形態において、ノードの色
を変更した後の二分木の状態を示す図
【図72】本発明の第6実施形態において、単回転及び
ノードの色の変更後の二分木の状態を示す図
【図73】本発明の第7実施形態における二分木
【図74】本発明の第8実施形態における二分木
【図75】従来のコード列の検索において、文字列中に
存在するパターンの例
【図76】従来のTrieの例
【図77】従来のコード列の検索におけるコード列につ
いて、位置と同定部分列との対照表の例
【図78】従来のposition tree の例
【図79】従来のsuffix tree の例
【図80】従来のdirected acyclic word graph の例
【図81】従来の第1の手法におけるデータの例
【図82】従来の第1の手法におけるデータの例(挿入
時)
【図83】従来の第2の手法におけるデータの例
【図84】従来の二分木の例
【図85】従来の第3の手法におけるデータの例
【図86】従来の第4の手法におけるデータの例
【符号の説明】
1:コード列 2:第1の部分列 3:第2の部分列 4:区分手段 5:第1の辞書データ 6:第2の辞書データ 7:生成手段 8:検索手段 9:除去手段 10:変更手段 11:更新手段 12:第1の調整手段 13:第2の調整手段 31:二分木 32:二分木生成手段 33:区間検索手段 34:二分木更新手段 41:区間長変更手段 42:追加手段 43:削除手段 45:構造調整手段

Claims (50)

    【特許請求の範囲】
  1. 【請求項1】 キー列による検索対象となるコード列か
    ら、第1の境界によって区分されキー列の最大長である
    キー最大長より長い又は等しい複数の第1の部分列と、
    第2の境界によって区分され前記第1の境界の前後少な
    くともキー最大長又はその直前ずつにわたる第2の部分
    列と、を決定する区分手段と、 前記各部分列について、当該部分列の後方の部分である
    後方列と、その後方列の先頭の前記コード列中における
    位置とを対照する辞書データを生成する生成手段と、 前記辞書データに基づいて、キー列の全体又は一部を前
    方列とする後方列を検索する検索手段と、 前記コード列を変更する変更手段と、 前記変更の内容に基づいて、変更に係る前記部分列の辞
    書データを更新する更新手段と、 前記各境界の間隔を前記キー最大長又はその直前以上維
    持する第1の維持手段と、 を有することを特徴とするデータ検索装置。
  2. 【請求項2】 前記区分手段は、前記コード列につい
    て、前記第1の境界と前記第2の境界を交互に、かつ、
    境界間のコード数がキー最大長又はその直前以上になる
    ように設定することによって、前記決定を行うように構
    成されたことを特徴とする請求項1記載のデータ検索装
    置。
  3. 【請求項3】 前記辞書データはサフィックス・ツリー
    であり、 このツリーは、ルートから末端ノードに至る複数のノー
    ドを有するデータ構造で、 末端ノード以外の各ノードは、経路を表すエッジで1又
    は2以上の末端側のノードに接続され、 各エッジにはラベルが設定され、 部分列の各後方列にそれぞれ特定の終端ノードが対応
    し、 ルートからそれら終端ノードに至るパスのラベルを順次
    接続すると部分列の各後方列となることを特徴とする請
    求項1記載のデータ検索装置。
  4. 【請求項4】 前記各ラベルは、前記コード列の1単位
    ずつであることを特徴とする請求項3記載のデータ検索
    装置。
  5. 【請求項5】 前記検索手段は、前記キー列の各コード
    に基づいて前記ツリーのパスを辿ることによって、キー
    列に最も長くパスが一致するノードを検出し、このノー
    ドの末端側に位置する各終端ノードに対応する後方列に
    ついて、位置を特定することによって検索を行うように
    構成されたことを特徴とする請求項3記載のデータ検索
    装置。
  6. 【請求項6】 前記ツリーは、部分列の終端を指すポイ
    ンタを、部分列である後方列の終端ノードにのみ設定
    し、部分列である後方列及び他の各後方列については、
    当該後方列よりも1コード短い後方列の終端ノードへの
    第2のエッジを設定したことを特徴とする請求項3記載
    のデータ検索装置。
  7. 【請求項7】 前記第2のエッジには、当該エッジが結
    ぶ両終端ノードの両後方列の相違となるコードをラベル
    として設定したことを特徴とする請求項6記載のデータ
    検索装置。
  8. 【請求項8】 前記検索手段は、検索結果である後方列
    について、キー列と一致したコード数を出力するように
    構成されたことを特徴とする請求項1又は3記載のデー
    タ検索装置。
  9. 【請求項9】 前記検索手段は、検索結果である後方列
    がキー列の全体を含むときは、その旨を出力するように
    構成されたことを特徴とする請求項1又は3記載のデー
    タ検索装置。
  10. 【請求項10】 前記後方列の重複検出を除去する除去
    手段を有することを特徴とする請求項1又は3記載のデ
    ータ検索装置。
  11. 【請求項11】 前記更新手段は、変更の結果追加すべ
    き後方列を前記辞書データに追加登録した後、変更の結
    果削除すべき後方列を前記辞書データから削除するよう
    に構成されたことを特徴とする請求項1又は3記載のデ
    ータ検索装置。
  12. 【請求項12】 前記更新手段は、更新の際、登録しよ
    うとする後方列が辞書データに登録済か否かを検出し、
    未登録の後方列のみを登録するように構成されたことを
    特徴とする請求項1又は3記載のデータ検索装置。
  13. 【請求項13】 前記第1の維持手段は、前記境界の間
    隔がキー最大長未満になった場合、当該間隔に係るいず
    れかの境界のうち、消去の結果一体化する部分列が短い
    方の境界を消去するように構成されたことを特徴とする
    請求項1又は3記載のデータ検索装置。
  14. 【請求項14】 前記各部分列の長さを所定の長さ以下
    に維持する第2の維持手段を有することを特徴とする請
    求項1又は3記載のデータ検索装置。
  15. 【請求項15】 前記辞書データに基づいて部分列を復
    元する復元手段を有することを特徴とする請求項1又は
    3記載のデータ検索装置。
  16. 【請求項16】 複数の部分列の各辞書データを、単一
    のツリーとして生成することを特徴とする請求項1又は
    3記載のデータ検索装置。
  17. 【請求項17】 前記キー列を複数の部分キー列に区分
    するキー区分手段を有し、 前記検索手段は、前記部分キー列の全体又は一部を前方
    列とする後方列を検索するように構成されたことを特徴
    とする請求項1又は3記載のデータ検索装置。
  18. 【請求項18】 1又は2以上の区間を含むコード列の
    各区間に基づいて各区間の範囲を表す二分木を生成する
    二分木生成手段を有し、 前記二分木は各区間に対応するノードを有し、 各ノードはルートから末端側に向けて樹状に接続され、 各ノードの末端側には、当該ノードに対応する区間以前
    の区間に対応するノードである前方ノード及び当該ノー
    ドに対応する区間以降の区間に対応するノードである後
    方ノードのうち該当するものが接続され、 各ノードには、当該ノード及び当該ノードより末端側に
    存在する各ノードに対応する区間の区間長の合計である
    部分区間長が設定されたことを特徴とするデータ処理装
    置。
  19. 【請求項19】 前記コード列中の任意の位置である指
    定位置が属する区間を特定するための区間検索手段を有
    し、 この区間検索手段は、 所定のポインタが指すノードであるカレントノードを前
    記ルートから前記末端側へ順次移動し、 各カレントノードにおいて、カレントノード及び、カレ
    ントノードの末端側に直接接続されている前記前方ノー
    ド乃至前記後方ノードのうち少なくとも一方、の区間長
    に基づいてカレントノードの範囲を算出し、 算出した範囲と前記指定位置を比較し、 算出した範囲よりも指定位置が前方の場合は、カレント
    ノードの前方ノードにカレントノードを進め、 算出した範囲よりも指定位置が後方の場合は、カレント
    ノードの後方ノードにカレントノードを進め、 算出した範囲に指定位置が含まれる場合は、指定位置が
    カレントノードに含まれる、と特定するように構成され
    たことを特徴とする請求項18記載のデータ処理装置。
  20. 【請求項20】 前記二分木中の任意のノードである指
    定ノードに対応する区間を特定するための特定手段を有
    し、 この特定手段は、 所定のポインタが指すノードであるカレントノードを、
    前記指定ノードから前記カレントノードの上位ノードで
    ある親ノードの方向へ前記ルートまで順次移動し、 前記各移動について、当該移動前の前記カレントノード
    である子ノードが、当該移動後の前記親ノードに対して
    前記前方ノードであるか前記後方ノードであるかに応じ
    て、ノードの区間長及び前記前方ノード又は前記後方ノ
    ードの部分区間長を順次加算し、 L−C−R順において前記指定ノード以前の総区間長で
    ある左区間長又はL−C−R順において前記指定ノード
    以降の総区間長である右区間長のうち少なくとも一方を
    算出することによって前記指定ノードに対応する区間を
    特定するように構成されたことを特徴とする請求項18
    記載のデータ処理装置。
  21. 【請求項21】 前記二分木中の任意のノードである指
    定ノードに対応する区間を特定するための特定手段を有
    し、 この特定手段は、前記指定ノードをsplayingによって前
    記ルートへ移動するように構成されたことを特徴とする
    請求項18記載のデータ処理装置。
  22. 【請求項22】 前記区間が変更された場合に変更の内
    容に応じて前記二分木を更新する二分木更新手段を有す
    ることを特徴とする請求項18、19又は20記載のデ
    ータ処理装置。
  23. 【請求項23】 前記二分木更新手段は、 前記区間長を変更する区間長変更手段と、 前記区間が削除された場合に削除された区間に対応する
    前記ノードを前記二分木から削除する削除手段と、 区間が追加された場合に追加された区間に対応するノー
    ドを前記二分木に追加する追加手段と、 を有することを特徴とする請求項22記載のデータ処理
    装置。
  24. 【請求項24】 前記区間長変更手段は、 長さを変更する前記区間の前記ノードから前記ルートへ
    至る各ノードの前記部分区間長を、変更分だけ順次変更
    するように構成されたことを特徴とする請求項23記載
    のデータ処理装置。
  25. 【請求項25】 前記区間長変更手段は、 長さを変更しようとする前記区間の前記ノードをsplayi
    ngによって前記ルートへ移動し、 前記ルートとなった当該ノードの前記部分区間長を変更
    分だけ増減するように構成されたことを特徴とする請求
    項23記載のデータ処理装置。
  26. 【請求項26】 前記追加手段は、 追加される前記区間に対応する前記ノードを前記二分木
    に追加し、 各ノードの結合順序を調整し、 各ノードについて前記区間長の調整を行うように構成さ
    れたことを特徴とする請求項23記載のデータ処理装
    置。
  27. 【請求項27】 前記追加手段は、 前記区間長の調整において、追加した前記ノードの前記
    部分区間長を、当該ノードの部分区間長及び当該ノード
    の前記下位ノードの部分区間長の和とし、 追加したノードが下位ノードとして直接接続されている
    ノードである親ノードから前記ルートに至る経路上の各
    ノードについて、追加したノードの区間長だけ部分区間
    長を加算するように構成されたことを特徴とする請求項
    26記載のデータ処理装置。
  28. 【請求項28】 前記追加手段は、 追加しようとするノードの直前及び直後のノードをspla
    yingによって前記ルートに順次移動し、 前記直前のノードの直後に相当する位置又は前記直後の
    ノードの直前に相当する位置に、前記追加される区間に
    対応する前記ノードを追加し、 前記直前若しくは直後のノード又は前記追加したノード
    のうち必要なノードについて、追加したノードの区間長
    だけ部分区間長を加算するように構成されたことを特徴
    とする請求項23記載のデータ処理装置。
  29. 【請求項29】 前記追加手段は、 追加される前記区間に対応する前記ノードを、当該ノー
    ドの区間長を0として前記二分木に追加し、 追加した当該ノードをsplayingによって前記二分木のル
    ートに移動し、 ルートに移動した当該ノードの部分区間長を、追加した
    区間の区間長だけ増加させるように構成されたことを特
    徴とする請求項23記載のデータ処理装置。
  30. 【請求項30】 前記削除手段は、 削除する前記区間に対応する前記ノードを前記二分木か
    ら削除し、 各ノード間の結合関係を調整し、 各ノードについて前記区間長の調整を行うように構成さ
    れたことを特徴とする請求項23記載のデータ処理装
    置。
  31. 【請求項31】 前記削除手段は、 削除する前記区間に対応する前記ノードをsplayingによ
    ってルートに移動し、 削除すべきノードの直前又は直後のノードをsplayingに
    よってルートに移動し、 ルートとなった前記直前又は直後のノードの部分区間長
    を、前記削除すべきノードの区間長だけ減じ、 前記削除すべきノードを削除するように構成されたこと
    を特徴とする請求項23記載のデータ処理装置。
  32. 【請求項32】 前記各ノード間の結合順序を変更する
    ことによって、前記二分木の構造を調整する構造調整手
    段を有することを特徴とする請求項22記載のデータ処
    理装置。
  33. 【請求項33】 前記構造調整手段は、 構造調整の手順の単位として、前記二分木の前記ノード
    の順序を維持して構造を変化させる処理であるrotatio
    n、double rotation (zig-zig) 及びdouble rotation
    (zig-zag) を用いることを特徴とする請求項32記載の
    データ処理装置。
  34. 【請求項34】 前記構造調整手段は、 任意の前記ノードである対象ノードを前記ルートへ移動
    するsplayingを用いて前記二分木の構造を調整するよう
    に構成されたことを特徴とする請求項32記載のデータ
    処理装置。
  35. 【請求項35】 請求項19記載のデータ処理装置にお
    いて、 前記コード列として複数行を含むテキストを用い、 前記区間として、テキストに含まれる各行を用い、 前記二分木生成手段は、 テキストの1又は2以上の行に対応する各ノードによっ
    て各行の順序を表す第1の二分木と、 各行ごとの1又は2以上の文字に対応する各ノードによ
    って各行のコード順を表す第2の二分木と、 を生成するように構成されたことを特徴とするデータ処
    理装置。
  36. 【請求項36】 請求項19記載のデータ処理装置にお
    いて、 前記コード列として、長さが一定の行を複数含むテキス
    トを用い、 前記二分木生成手段は、 前記行のうち文字の存在しない部分には所定の空白文字
    を配置し、 連続する同じ文字又は空白文字を、当該文字をラベルと
    し連続の個数を区間長とする単一の前記ノードで、テキ
    ストの各部分列を表すことによって、テキストを表す前
    記二分木を生成するように構成されたことを特徴とする
    データ処理装置。
  37. 【請求項37】 キー列による検索対象となるコード列
    から、第1の境界によって区分されキー列の最大長であ
    るキー最大長より長い又は等しい複数の第1の部分列
    と、第2の境界によって区分され前記第1の境界の前後
    少なくともキー最大長又はその直前ずつにわたる第2の
    部分列と、を決定する区分処理と、 前記各部分列について、当該部分列の後方の部分である
    後方列と、その後方列の先頭の前記コード列中における
    位置とを対照する辞書データを生成する生成処理と、 前記辞書データに基づいて、キー列の全体又は一部を前
    方列とする後方列を検索する検索処理と、 前記コード列を変更する変更処理と、 前記変更の内容に基づいて、変更に係る前記部分列の辞
    書データを更新する更新処理と、 前記各境界の間隔を前記キー最大長又はその直前以上維
    持する第1の維持処理と、 を含むことを特徴とするデータ検索方法。
  38. 【請求項38】 前記区分処理は、前記コード列につい
    て、前記第1の境界と前記第2の境界を交互に、かつ、
    境界間のコード数がキー最大長又はその直前以上になる
    ように設定することによって、前記決定を行うことを特
    徴とする請求項37記載のデータ検索方法。
  39. 【請求項39】 前記辞書データはサフィックス・ツリ
    ーであり、 このツリーは、ルートから末端ノードに至る複数のノー
    ドを含むデータ構造で、 末端ノード以外の各ノードは、経路を表すエッジで1又
    は2以上の末端側のノードに接続され、 各エッジにはラベルが設定され、 部分列の各後方列にそれぞれ特定の終端ノードが対応
    し、 ルートからそれら終端ノードに至るパスのラベルを順次
    接続すると部分列の各後方列となることを特徴とする請
    求項37記載のデータ検索方法。
  40. 【請求項40】 前記検索処理は、前記キー列の各コー
    ドに基づいて前記ツリーのパスを辿ることによって、キ
    ー列に最も長くパスが一致するノードを検出し、このノ
    ードの末端側に位置する各終端ノードに対応する後方列
    について、位置を特定することによって検索を行うこと
    を特徴とする請求項39記載のデータ検索方法。
  41. 【請求項41】 前記ツリーは、部分列の終端を指すポ
    インタを、部分列である後方列の終端ノードにのみ設定
    し、部分列である後方列及び他の各後方列については、
    当該後方列よりも1コード短い後方列の終端ノードへの
    第2のエッジを設定したことを特徴とする請求項39記
    載のデータ検索方法。
  42. 【請求項42】 前記後方列の重複検出を除去する除去
    処理を含むことを特徴とする請求項37又は39記載の
    データ検索方法。
  43. 【請求項43】 前記第1の維持処理は、前記境界の間
    隔がキー最大長未満になった場合、当該間隔に係るいず
    れかの境界のうち、消去の結果一体化する部分列が短い
    方の境界を消去することを特徴とする請求項37又は3
    9記載のデータ検索方法。
  44. 【請求項44】 複数の部分列の各辞書データを、単一
    のツリーとして生成することを特徴とする請求項37又
    は39記載のデータ検索方法。
  45. 【請求項45】 1又は2以上の区間を含むコード列の
    各区間に基づいて各区間の範囲を表す二分木を生成する
    二分木生成処理を含み、 前記二分木は各区間に対応するノードを有し、 各ノードはルートから末端側に向けて樹状に接続され、 各ノードの末端側には、当該ノードに対応する区間以前
    の区間に対応するノードである前方ノード及び当該ノー
    ドに対応する区間以降の区間に対応するノードである後
    方ノードのうち該当するものが接続され、 各ノードには、当該ノード及び当該ノードより末端側に
    存在する各ノードに対応する区間の区間長の合計である
    部分区間長が設定されたことを特徴とするデータ処理方
    法。
  46. 【請求項46】 前記コード列中の任意の位置である指
    定位置が属する区間を特定するための区間検索処理を含
    み、 この区間検索処理は、 所定のポインタが指すノードであるカレントノードを前
    記ルートから前記末端側へ順次移動し、 各カレントノードにおいて、カレントノード及び、カレ
    ントノードの末端側に直接接続されている前記前方ノー
    ド乃至前記後方ノードのうち少なくとも一方、の区間長
    に基づいてカレントノードの範囲を算出し、 算出した範囲と前記指定位置を比較し、 算出した範囲よりも指定位置が前方の場合は、カレント
    ノードの前方ノードにカレントノードを進め、 算出した範囲よりも指定位置が後方の場合は、カレント
    ノードの後方ノードにカレントノードを進め、 算出した範囲に指定位置が含まれる場合は、指定位置が
    カレントノードに含まれる、と特定することを特徴とす
    る請求項45記載のデータ処理方法。
  47. 【請求項47】 前記二分木中の任意のノードである指
    定ノードに対応する区間を特定するための特定処理を含
    み、 この特定処理は、 所定のポインタが指すノードであるカレントノードを、
    前記指定ノードから前記カレントノードの上位ノードで
    ある親ノードの方向へ前記ルートまで順次移動し、 前記各移動について、当該移動前の前記カレントノード
    である子ノードが、当該移動後の前記親ノードに対して
    前記前方ノードであるか前記後方ノードであるかに応じ
    て、ノードの区間長及び前記前方ノード又は前記後方ノ
    ードの部分区間長を順次加算し、 L−C−R順において前記指定ノード以前の総区間長で
    ある左区間長又はL−C−R順において前記指定ノード
    以降の総区間長である右区間長のうち少なくとも一方を
    算出することによって前記指定ノードに対応する区間を
    特定することを特徴とする請求項45記載のデータ処理
    方法。
  48. 【請求項48】 前記区間が変更された場合に変更の内
    容に応じて前記二分木を更新する二分木更新処理を含む
    ことを特徴とする請求項45、46又は47記載のデー
    タ処理方法。
  49. 【請求項49】 前記二分木更新処理は、 前記区間長を変更する区間長変更処理と、 前記区間が削除された場合に削除された区間に対応する
    前記ノードを前記二分木から削除する削除処理と、 区間が追加された場合に追加された区間に対応するノー
    ドを前記二分木に追加する追加処理と、 を含むことを特徴とする請求項48記載のデータ処理方
    法。
  50. 【請求項50】 前記各ノード間の結合順序を変更する
    ことによって、前記二分木の構造を調整する構造調整処
    理を含むことを特徴とする請求項48記載のデータ処理
    方法。
JP7233927A 1994-09-13 1995-09-12 データ検索装置、データ処理装置、データ検索方法及びデータ処理方法 Expired - Fee Related JP2768921B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7233927A JP2768921B2 (ja) 1994-09-13 1995-09-12 データ検索装置、データ処理装置、データ検索方法及びデータ処理方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP21914594 1994-09-13
JP6-219145 1994-09-13
JP7233927A JP2768921B2 (ja) 1994-09-13 1995-09-12 データ検索装置、データ処理装置、データ検索方法及びデータ処理方法

Publications (2)

Publication Number Publication Date
JPH08137914A true JPH08137914A (ja) 1996-05-31
JP2768921B2 JP2768921B2 (ja) 1998-06-25

Family

ID=26522950

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7233927A Expired - Fee Related JP2768921B2 (ja) 1994-09-13 1995-09-12 データ検索装置、データ処理装置、データ検索方法及びデータ処理方法

Country Status (1)

Country Link
JP (1) JP2768921B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10105574A (ja) * 1996-09-27 1998-04-24 Hitachi Software Eng Co Ltd 配列データ類似度演算装置
WO2001042924A1 (fr) * 1999-12-13 2001-06-14 Kabushiki Kaisha Toshiba Systeme, procede et dispositif de gestion de structures de donnees et support d'enregistrement sur lequel un programme de gestion de structures de donnees est stocke
JP2006302254A (ja) * 2005-01-31 2006-11-02 Internatl Business Mach Corp <Ibm> 複数ノード・ツリー構造を変更するための方法、システム、およびコンピュータ・プログラム(ツリー構造を自動的に変更するための方法)
JP2009211263A (ja) * 2008-03-03 2009-09-17 Internatl Business Mach Corp <Ibm> 情報検索システム、方法及びプログラム
KR101500714B1 (ko) * 2013-05-15 2015-03-10 주식회사 코스콤 시스템의 지연 방지 방법 및 그 시스템

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10105574A (ja) * 1996-09-27 1998-04-24 Hitachi Software Eng Co Ltd 配列データ類似度演算装置
WO2001042924A1 (fr) * 1999-12-13 2001-06-14 Kabushiki Kaisha Toshiba Systeme, procede et dispositif de gestion de structures de donnees et support d'enregistrement sur lequel un programme de gestion de structures de donnees est stocke
US7222125B2 (en) 1999-12-13 2007-05-22 Kabushiki Kaisha Toshiba Data structure managing device, data structure managing system, data structure managing method, and recorded medium where data structure managing program is stored
JP2006302254A (ja) * 2005-01-31 2006-11-02 Internatl Business Mach Corp <Ibm> 複数ノード・ツリー構造を変更するための方法、システム、およびコンピュータ・プログラム(ツリー構造を自動的に変更するための方法)
US8234309B2 (en) 2005-01-31 2012-07-31 International Business Machines Corporation Method for automatically modifying a tree structure
US9836553B2 (en) 2005-01-31 2017-12-05 International Business Machines Corporation Automatically modifying a tree structure
JP2009211263A (ja) * 2008-03-03 2009-09-17 Internatl Business Mach Corp <Ibm> 情報検索システム、方法及びプログラム
KR101500714B1 (ko) * 2013-05-15 2015-03-10 주식회사 코스콤 시스템의 지연 방지 방법 및 그 시스템

Also Published As

Publication number Publication date
JP2768921B2 (ja) 1998-06-25

Similar Documents

Publication Publication Date Title
EP0702310B1 (en) Data retrieval system, data processing system, data retrieval method, and data processing method
US5799299A (en) Data processing system, data retrieval system, data processing method and data retrieval method
JP3672242B2 (ja) パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体
US8065304B2 (en) Using asymmetric memory
CN113196260B (zh) 能够选择性使用键部分的键值存储树
US6671856B1 (en) Method, system, and program for determining boundaries in a string using a dictionary
EP0293161B1 (en) Character processing system with spelling check function
US10521441B2 (en) System and method for approximate searching very large data
US5835635A (en) Method for the recognition and completion of characters in handwriting, and computer system
Bauer et al. Lightweight BWT construction for very large string collections
US9378190B2 (en) Word processor data organization
Didier et al. Character sets of strings
JP2768921B2 (ja) データ検索装置、データ処理装置、データ検索方法及びデータ処理方法
Cordova et al. Simple and efficient fully-functional succinct trees
GB2154035A (en) Document creating and editing apparatus
JPH07230451A (ja) 文字入力装置
JP5159277B2 (ja) N文字索引生成装置、文書検索装置、n文字索引生成方法、文書検索方法、n文字索引生成プログラムおよび文書検索プログラム
CN113609433A (zh) 一种算式布局确定方法、装置、电子设备及存储介质
GB2567390A (en) Method for building character sequence dictionary, method for searching character sequence dictionary, and system for processing character sequence dictionary
JPH08272827A (ja) データ処理装置、データ検索装置、データ処理方法及びデータ検索方法
JP7422367B2 (ja) 近似文字列照合方法及び該方法を実現するためのコンピュータプログラム
US20080243798A1 (en) Search device and recording medium
CN114896381A (zh) 一种汽车车辆信息的可容错式匹配方法及装置
CN114118020A (zh) 一种将pdf文件转换为html文本的方法
JP2722684B2 (ja) ファイルシステムの検索装置

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080410

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20090410

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20100410

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20100410

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20110410

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20130410

Year of fee payment: 15

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

Free format text: PAYMENT UNTIL: 20140410

Year of fee payment: 16

LAPS Cancellation because of no payment of annual fees