JP3607107B2 - データ管理装置 - Google Patents
データ管理装置 Download PDFInfo
- Publication number
- JP3607107B2 JP3607107B2 JP02901699A JP2901699A JP3607107B2 JP 3607107 B2 JP3607107 B2 JP 3607107B2 JP 02901699 A JP02901699 A JP 02901699A JP 2901699 A JP2901699 A JP 2901699A JP 3607107 B2 JP3607107 B2 JP 3607107B2
- Authority
- JP
- Japan
- Prior art keywords
- coordinate
- area
- index
- coordinates
- region
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99937—Sorting
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99943—Generating database or data structure, e.g. via user interface
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
- Y10S707/99945—Object-oriented database structure processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (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)
Description
【発明の属する技術分野】
本発明は、2次元またはそれ以上の多次元空間中での位置を表す座標データ等のデータの管理に適したデータ管理装置、データ管理方法及びデータ管理プログラムを記録した媒体に関するものである。より具体的には、平面あるいは空間内における座標データについて、登録、削除、変更、探索(例えば、範囲探索、最近座標探索)などの処理を、単独で、あるいは適宜組み合わせて実施することのできるデータ管理装置に関する。
【0002】
【従来の技術】
従来から、複数の属性を有するデータをコンピュータを用いて管理する手法が数多く提案されている。例えば、画像処理、コンピュータビジョン、図面管理などの分野においては、ベクトル、点、記号などの大量の図形要素により表される膨大な図面をコンピュータにより管理し、データの登録、削除を行ったり、所望の図面を探索し、変更する作業が必要とされている。
【0003】
このようなデータ管理方法として、従来から知られているものにquad−tree法がある。
このquad−tree法では、領域を2次元平面の各軸に平行な面で4等分割する。分割された1つの空間に含まれるデータ数がP以下になるまで再帰的に分割を繰り返し、この過程を4分木として記憶する。このquad−tree法は、例えば、ACM Computing Surveys, Vol,20,No.4 December 1988に記載されている。
【0004】
この分割法では、葉の分割時にそれに対応する子ノードを新設するだけであるため、木構造の管理は容易となる。また、領域を等分割するため、分割位置は簡単に特定でき、個々の分割軸を記憶しておく必要はないといった利点がある。 一方、quad−tree法では、データの分布を無視した等面積分割が行われるため、データの分布が一様でない場合に、木のバランス性およびメモリの利用効率が極端に低下するという欠点がある。
【0005】
ここで、quad−tree法を用いた場合のデータの格納方法について説明する。
すなわち、図13(A)に示した各領域は、図13(B)に示した木構造において、それぞれ同一の番号を付したノードに対応づけられている。従って、図13(A)の斜線で示した領域は、図13(B)の黒いノードに対応している。なお、この図13は、前記の文献第274頁のFigure 3を転記したものである。
【0006】
しかしながら、このようなデータ構造において、図13(A)の斜線で示した領域(あるいは、その領域に含まれるデータ)を列挙するには、部分木全体をtraverseする必要がある。
【0007】
【発明が解決しようとする課題】
上述したように、quad−tree法のような従来のデータ管理方法において、データを格納するインデクスとして木構造を用いた場合、ある部分範囲に含まれる点データを、あるノードを根とする部分木の内部ノード(internal node)や/または(and/or)外部ノード(external node)に登録された点データとして決定することはできるが、それらを列挙するには、部分木全体をtraverseする必要がある。
【0008】
また、このような木構造のインデクスでは、含まれている点データが多い部分範囲は大きな部分木に対応するという傾向は不可避であるから、1つの点データを列挙するのに要するtravarseの時間的overheadは、点データの数が多い場合でも軽減されない。そればかりか、かえって大きな部分木を効率的にtraverseしようとすれば、スタックやフラグ領域(各ノードに設けて、そのノードをtraverseした状況を表す)のような余分な記憶領域が必要になる。
【0009】
このように、従来のデータ構造は記憶領域が余分に必要になるだけでなく、その量がデータの性質によって左右される。しかも、ある範囲に含まれていることが明らかになったデータを列挙するのに、そのデータ構造を逐一たどってデータに到達しなければならないため、効率が良くないという欠点があった。
【0010】
また、多くの場合、変更に容易に対応し得る反面、変更が生じない、あるいは変更の頻度が低いデータに対しては、効率的なデータ構造とはいえない。
さらに、従来のデータ構造は、狭い範囲のあまりばらつきの大きくないデータを扱うのには向いているが、制限のゆるい、ダイナミックレンジ(精度のばらつき)が大きいデータを扱うのには、効率的ではない。例えば、x軸とy軸で値の精度が違う場合、正規化しなければならないが、その基準がないという問題があった。
【0011】
また、従来のデータ管理方法においては、範囲探索に関して、ある範囲に含まれていることが明らかになったデータに対する効率的なアクセスの手段が開示されておらず、最近座標探索手段に関しても、効率的なものが具体的に開示されていなかった。
【0012】
本発明は、上記のような従来技術の問題点を解決するために提案されたもので、その目的は、データ領域を効率的に使用でき、探索効率を大幅に向上させることができるデータ管理装置を提供することにある。
【0013】
【課題を解決するための手段】
前記の目的を達成するため、請求項1に記載のデータ管理装置は、n次元部分空間内の領域を示す座標データを、所定の領域コードに基づいてソートした状態で複数領域分格納したインデクスと、このインデクス中から所定の領域を示す座標データを探索する探索手段と、前記インデクスを生成するインデクス生成手段を備え、前記インデクス中における各領域を示す各座標データは、有限で離散的なn次元部分空間内の点または領域を表す座標データを、各次元の座標をそれぞれ2進表示した固定長ビット列によって表示し、各次元の座標の上位桁である前方列から成る数字列によって、それと同一の上位桁を有するn次元座標データを全て含み、かつ、上位桁が異なる座標データは全く含まないn次元部分空間内の領域である部分集合に対応づけて構成され、前記インデクス生成手段は、前記インデクスに含まれる各領域を示す座標データについて、各座標データを構成する固定長ビット列の上位桁から各次元ごとに予め定めておいた所定桁数ずつ順次取り出して成る複数の部分列を、予め定めておいた各次元の順に連接することにより新たな2進表示の固定長ビット列の数値からなる領域コードを生成し、この領域コードを所定の辞書順にソートすることにより、前記インデクスを生成することを特徴とする。
【0016】
上記のような構成を有する請求項1に記載の発明によれば、インデクスの各座標データが、各次元の座標を前方から特定の長さ取り、これを一定の次元順に連接して成る領域コードの辞書順にソートされているので、この領域コードに基づいて、座標データを探索することができるので、探索処理の効率が大幅に向上する。
【0017】
本発明の実施の態様の一つは、前記インデクスに含まれる各次元の座標データを構成するそれぞれの固定長ビット列について、その上位桁からある前方列が一致しているものを相続くように並べた上で、それらの前方列がさらにどこまで一致するかを決定し、(新たに一致した長さ+1)の値に基づいて領域コードを生成することを特徴とする。
【0020】
このような構成によれば、インデクス生成手段によって、n次元の座標データのそれぞれについて、所定のルールに基づいて領域コードを生成し、前記座標データをこの領域コードの辞書順にソートすることにより、インデクスを生成することができる。
【0021】
本発明の実施の態様の一つは、前記インデクスへの座標の追加及び削除を行うインデクス変更手段を備え、前記インデクス変更手段は、前記領域コードに基づいてインデクスを二分探索し、領域コードによるソート順に矛盾しない位置に新たな座標を挿入することにより、前記インデクスに座標を追加することを特徴とするものである。
【0024】
このような構成によれば、インデクス変更手段により、インデクスへの座標の追加・削除が可能となる。また、この場合、座標の追加・削除に伴って必要となるインデクスの修正もなされるので、探索の精度は保持される。なお、空のインデクスに対して、探索対象となる座標をインデクス変更手段を用いて逐次追加すれば、インデクスを生成できるから、インデクス変更手段はインデクス生成機能も兼ね備えているということができる。
【0025】
本発明の実施の態様の一つは、前記探索手段が、指定された範囲に含まれる座標を探索する範囲探索手段であることを特徴とするものである。
【0028】
このような構成によれば、データ管理装置に範囲探索手段を備えることにより、左下及び右上の座標を示すことによって指定された所望の矩形範囲内に含まれる座標データを、インデクス中より探索することができる。
【0029】
本発明の実施の態様の一つは、指定された座標に最も近い座標を探索する最近座標探索手段であることを特徴とするものである。
【0032】
このような構成によれば、データ管理装置に最近座標探索手段を備えることにより、所望の指定座標に最も近い座標データを、インデクス中より探索することができる。
【0033】
本発明の実施の態様の一つは、前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらのうちの少なくとも一つを決定する機能を備えていることを特徴とするものである。
【0035】
このような構成によれば、インデクスが上記機能を備えることにより、領域コードをキーとして、それを前方列とする領域コードを持つ領域群を、少なくとも一つ決定することができるので、特に最近座標探索手段による探索に資する。
【0036】
本発明の実施の態様の一つは、前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらをすべて列挙する機能を備えていることを特徴とするものである。
【0038】
このような構成によれば、インデクスが上記機能を備えることにより、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらをすべて列挙することができるので、特に範囲探索に資する。
【0039】
本発明の実施の態様の一つは、前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらの数を計数する機能を備えていることを特徴とするものである。
【0041】
このような構成によれば、インデクスが上記機能を備えることにより、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合に、それらの数を数えることができるので、特に範囲探索に資する。
【0042】
本発明の実施の態様の一つは、前記インデクスに座標を格納する際、座標または領域コードと、座標から領域コードを生成しあるいは領域コードから座標を復元するための元分割とを格納することを特徴とするものである。
【0044】
このような構成によれば、インデクスに座標を格納する際に、座標と元分割、または領域コードと元分割を格納すれば良いので、データ領域が大幅に縮小される。
【0045】
本発明の実施の態様の一つは、前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定範囲に含まれている場合に、インデクス中でそれを前方列とする座標は、一括して指定範囲に含まれていると判定することを特徴とするものである。
【0047】
このような構成によれば、上記の判断基準に基づいて範囲探索を行う結果、インデクス中の各座標に対して、逐一探索を行う必要がなくなるので、探索効率が大幅に向上する。
【0048】
本発明の実施の態様の一つは、前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定範囲に含まれるものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について指定範囲に含まれているか否かの判定を実行することを特徴とするものである。
【0050】
このような構成によれば、指定範囲内に含まれている可能性の高い座標の数が所定の数以下の場合には、それらのすべてについて判定を行うことにより、それらを含む領域をそれ以上分割せず、最終的な判定操作を行なうことで、分割に伴うオーバーヘッドを回避することができる。
【0051】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定座標から最近座標候補との距離以内にある場合に、インデクス中でそれを前方列とする座標のいずれか一つを新たな最近座標候補とすることを特徴とするものである。
【0053】
このような構成によれば、インデクス中のある座標の前方列を前方列とする座標が、すべて指定座標から最近座標候補との距離以内にある場合に、そのうちの一つを選択して新たな最近座標候補とすることにより、探索の効率を向上することができる。
【0054】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定座標から最近座標候補との距離以内のものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について新たな最近座標候補になり得るか否かを判定し、判定の結果、より指定座標に近い座標があれば、最も近いものを新たな最近座標候補とすることを特徴とするものである。
【0056】
このような構成によれば、インデクス中のある座標の前方列を前方列とする座標で、指定座標から最近座標候補との距離以内のものが複数あり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらのすべてについて判定を行うことにより、それらを含む領域をそれ以上分割せず、最終的な判定操作を行なうことで、分割に伴うオーバーヘッドを回避することができる。
【0057】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとしてスタックに格納しておき、スタックから取り出した前方列に関して、それを前方列とする座標で、指定座標から最近座標候補との距離より近いものがあり得ない場合には、それらを探索の対象としないことを特徴とするものである。
【0059】
このような構成によれば、要調査とされた領域をスタックに保持するとともに、処理の当初から最近座標候補を設定し、新たな最近座標候補が見い出された場合、直ちに最近座標候補を更新するので、新たに最近座標候補となる座標に関して、それが最近座標候補となり得るか否かを判定する手続を要しない。また、インデクスの特徴的な作用によって、新たな最近座標候補にし得る座標データは、すでに少なくとも一つは得られており、改めてそれを選択・探索する手続を要しない。従って、極めて迅速に“r”を減少させることができるので、スタックから取り出される領域に関して、処理不要と判定する割合が向上し、無駄な探索を減少させて、効率よく最近座標を決定することができる。
【0060】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとして、それを前方列とする座標で指定座標から最も近い座標との距離と共に格納しておき、その距離が最小の前方列を最近座標候補を探索すべき対象として選択し、その距離が指定座標と最近座標候補との距離以上の場合には探索を終了することを特徴とするものである。
【0062】
このような構成によれば、指定座標との距離が最小であることが保証されている座標を探索対象とし、この距離が指定座標と最近座標候補との距離以上の場合には、直ちに探索処理を終了するので、さらに効率的に最近座標を決定することができる。
【0063】
【発明の実施の形態】
以下、本発明の実施形態について、図面を参照して具体的に説明する。
【0064】
[1.用語の説明]
各実施形態について説明する前に、本明細書中で用いられる種々の用語について説明する。
【0065】
(a)座標データの管理
「座標データの管理」とは、座標データの登録、削除、変更、探索(例えば、範囲探索、最近座標探索)などの、座標データを処理する1つあるいは複数の手続きをいう。
【0066】
(b)座標データ
以下の実施形態においては、有限で離散的な2次元部分空間内(部分平面上)の点または領域を表す座標データとして、そのx座標、y座標をそれぞれ固定小数点2進表示した固定長ビット列を扱う。
【0067】
(c)座標データの固定小数点表示の前方列(上位桁)による領域の表現
座標の固定小数点表示の桁数が定まっている場合に、各次元の座標の固定小数点表示の上位桁(前方列)から成る数字列によって、それと同一の上位桁を有する多次元座標データを全て含み、かつ、上位桁が異なる座標データは全く含まない多次元部分空間内の部分集合に対応づける。
このような部分集合及びその表現を「領域」と呼ぶ。また、各次元の桁数字列を「領域座標」と呼ぶ。また、以下で「各(領域)座標」と言えば「各次元の(領域)座標」のことである。
【0068】
扱うデータが2次元の座標データで、そのx座標、y座標が共に12ビットの固定小数点表示である場合、図14に示したように、領域(T−1)は、(T−2)の座標データの集合を表す。
なお、この座標によって表される領域は、10進法で示すと、x座標が256以上511以下、y座標が64以上127以下の領域である。
【0069】
また、各領域座標がより長いビット列から成る領域(T−3)は、(T−4)の座標データの集合を表す。
なお、この座標によって表される領域は、10進法で示すと、x座標が288以上319以下、y座標が64以上79以下の領域である。
【0070】
このように、後者の座標データが全て前者に含まれていることは、前者の各領域座標のビット列“0001”,“000001”が、それぞれ後者の各領域座標のビット列“0001001”,“00000100”の前方列(上位桁)になっていることに対応している。
【0071】
なお、定められた長さのビット列から成る座標データ自体も、その座標データのみを含む領域とみなすことができ、その上位桁(前方列)から成る領域座標となんら本質的な差異はない。それゆえ、以下では、特に断らない限り、座標データの座標も含めた領域座標を「座標」という。
座標データ(座標)が点を表すか領域を表すかは、本発明を応用する際の解釈に依存し、本発明の主旨には影響しない。
【0072】
(d)全領域
定まった座標データの表現形式(方法)に関して、座標データとして表現され得るすべての座標(データ)の集合を「全領域」と呼ぶ。これは、座標データとして表現され得るすべての点または領域を含む部分空間(部分平面)に対応する。
「全領域」は、各座標が一定長以下のビット列で表される場合、それらがすべて空(長さ0)のビット列である座標によって表される。2次元の場合は、(
, )である。
【0073】
(e)分割と領域コード
各領域座標またはその部分列を、一定の次元の順に交互に連接した桁数字列を「領域コード」と呼ぶ。与えられた座標に対して、各次元について座標から取るべき部分列の長さ(0以上の整数値)を上位桁(前方)に関するものから順に並べた数列の組を指定すれば、「領域コード」は一意に生成される。この数列の組を「分割」と呼ぶ。各次元の個々の数列に言及する際にも、「分割」という言葉をそのまま用いる。また、x座標、y座標と言うのと同様に、x分割、y分割という呼び方も用いる。
【0074】
なお、各分割はその和が各座標の長さ(桁数)以下である。但し、数列の項数は各分割で共通とする。数列の項は0でもよいので、この条件は任意の分割を表すのを妨げない。
【0075】
上述したように、「領域コード」は、各分割の初項から順次その長さの部分列を各座標の前方からとっては、一定の順序(例えば、x、yの順)で交互に連接して生成される。
2次元の場合にこの手続を一般的な形で述べれば次のようになる。すなわち、座標(x,y) x=x1 …x1x,y=y1 …y1yと、分割(i,j) i=i1 …im ,j=j1 …jm ,i1 +…+im =li ,j1 +…+jm =lj から、次の手続によって、領域コードc=c1 c2 …c1i+1j を生成する。(但し、m=0の場合も含む)。
【0076】
(1)p=0,q=0,k=1,cを空(長さ0)の桁数字列とする。
(2)k>mなら終了。
(3)k≦mなら、
(3−1) xp+1 …xp+ikをcp+q+1 …cp+q+ikとし、p=p+ik とする。
(3−2) yq+1 …yq+jkをcp+q+1 …cp+q+jkとし、q=q+jk とする。
(4)k=k+1とし(2)へ戻る。
【0077】
この手続は、分割(i,j)が与えられれば、座標(x,y)から一意に領域コードcを生成できることを示している。
ここで、上記(0001001 , 00000100 )について、(x分割,y分割)が(43,62)である場合に、領域コードを生成する手順を具体的に示す。すなわち、まず、x分割の“4”により、x座標の前方から4ビット(0001)をとり、続いて、y分割の“6”により、y座標の前方から6ビット(000001)をとって、先の4ビットに連接する。この段階で、領域コードは(0001000001)となっている。
続いて、x分割の“3”により、x座標の次の3ビット(001) をとって、先の10ビットに連接し、続いて、y分割の“2”により、y座標の次の2ビット(00)をとって、先の13ビットに連接する。その結果、図15に示したように、領域コードは(T−5)となる。
【0078】
また、図15の(T−6)は、上記(0001 ,000001 ) 及び(0001001 ,00000100 )について、(x分割,y分割)と生成される領域コードの例を示したものである。
【0079】
なお、部分列を連接する「一定の順序」とは、上記のように常にx,yの順に限られるものではなく、例えば、分割の第1項によって取られた部分列はx,yの順、第2項によって取られた部分列はy,xの順…というものでも良い。
さらには、分割の第1項によって取られた部分列はx,yの順で連接し、第1項によって取られた部分列がそれぞれ“0000”,“000001”の場合は、第2項によって取られた部分列をy,xの順で連接し、また、第1項によって取られた部分列がそれぞれ“0001”,“000001”の場合は、第2項によって取られた部分列をx,yの順で連接するというように、曖昧になることなく順序が決定できれば、いかなる順序を用いても良い。
【0080】
また、2組の分割と領域コードについて、一方の各分割が他方の各分割の前方列になっている場合、前者の領域コードが後者の領域コードの前方列になっていれば、またその場合に限り、後者を生成した領域は前者を生成した領域に含まれていると判定できる。
すなわち、領域コードを用いれば、各座標毎に前者が後者の前方列になっているか否かを調べる代わりに、領域コードのみを比較するだけで、各座標毎に、後者を生成した領域が前者を生成した領域に含まれるか否かを判定することができる。
【0081】
上記の例で、図15の(T−7)及び図16の(T−8)にみるように、前者の各座標は後者の各座標の前方列になるからである。なお、前者が後者の前方列となっている部分にアンダーラインを付して示した。
同様に、図16の(T−9)は(T−10)を含み、さらに、全領域( , )( , )は全ての領域を含んでいる。
【0082】
このように、領域コードは座標と分割から一意に計算できるが、以下では、わかりやすさのために座標と分割で表現された領域には、領域コードを付けて表示する。
【0083】
(f)座標と分割による一連の領域(領域群)の表現
「領域コード」は、座標の前方から「分割」に従って部分列をとって生成されるから、各座標が各分割の和より長くても、領域コードの生成には支障がない。また、表すべき領域の各座標の長さは各分割の和として入手できるから、各座標が、表すべき領域の各座標を前方列としてそれより長くても、座標と分割の組がどの領域を表すかは一意に定まる。
例えば、図17の(T−11)と同じ座標を用いて、その領域を含む領域(T−12)を(T−13)と表現することができる。さらには、全領域を(T−14)で表してもよい。
【0084】
このように、同一の座標に対して、一方の各分割が他方の各分割の前方列である複数の分割を組み合わせて、後者が前者を含む関係にある複数の領域を表すことができる。これらの分割は、最も長い分割(元分割)とその前方列の長さ(項数)を組み合わせれば表現できる。
例えば、図17の(T−15)で表す。また、これを座標と組み合わせて、図18の(T−16)の4つの領域が表される。
【0085】
このように、座標と、各分割の和が各座標の長さ以下のn項から成る元分割と項数によって表された分割を組み合わせ、この項数を変化させることによって、全領域も含めてn+1個の領域を表すことができる。
それゆえ、このような座標と元分割の組を「領域群」と呼ぶ。この領域群に対して0以上n以下の項数mを指定することによって、n+1個の領域のうちの一つを表すことができる。これを、その領域群の「項数mの領域」と呼ぶ。
また、項数が小さいもので表される領域は、項数が大きいもので表される領域を含んでいる。さらに、元分割の和よりも座標が長い場合は、その座標自体が表す領域は、上記n+1個の領域のいずれにも含まれている、さらに小さいもうひとつの領域である。
【0086】
また、前記「項数mの領域」の各座標を、分割の第m項が0でない次元について、1桁だけ短い前方列で置き換えた座標によって表される領域を、「項数mの共有領域」と呼ぶ。各座標が2進表現のk次元データで、分割の第m項がいずれも0でない場合、「項数mの領域」は「項数mの共有領域」の各座標に1ビットづつ追加した座標で表される2のk乗個の領域の1つである。
なお、以下においては、分割とは項数も含めた表現を用いる。
【0087】
(g)座標データの所属領域群の表現
上述したように、座標データにn項からなる元分割を組合せて、その座標データを含むn+1個の領域を表すことができる。また、上述したように、より小さい項数で表現された領域は、より大きな項数で表現された領域を必ず含んでいる。
例えば、図18の(T−17)は、座標データと項数2の元分割の組が表す、全領域を含む3つの領域を、項数を指定して列挙したものである。
なお、後述するように、本発明のインデクスは、座標データを元分割と組み合わせて、その所属領域群として格納する。
【0088】
(h)領域群の格納番地と項数による領域の表現
以下で説明する探索手段においては、探索操作の途上で種々の領域を扱う必要があるが、それらの領域は、インデクス中の領域群の「項数mの領域」及び「共有領域」として表し得る。そこで、これらの領域を記憶したり、参照したりするのに、その領域群が格納されている番地及び項数の組を用いる。
すなわち、[番地,項数]でもって、指定番地に格納された領域群の指定項数の領域及び共有領域を表す。例えば、「領域[番地,項数]」と言えばその領域を、「共有領域[番地,項数]」と言えばその共有領域を指す。
【0089】
また、各探索手段においては、その処理ステップの対象となる複数の領域を一時的に記憶しておくために、領域を要素とするキューまたはスタックを使用する。これらのキューまたはスタックの要素の具体的な表現としては、上記の[番地,項数]の対を用いる。
【0090】
なお、各探索手段による探索結果は、インデクス中の座標データであるから、これもその格納番地によって表すこととする。また、インデクスは0番地から格納されており、各番地には少なくとも1つの領域群を含んでいるものとする。 また、以下の実施形態においては、簡明のために、これまで用いてきた2次元部分空間内(部分平面上)の座標を2進表現した座標データを扱う場合に即して説明する。
【0091】
[2.各実施形態とコンピュータ]
本発明の各実施形態はコンピュータ上に実現され、実施形態の各機能は、所定の手順(プログラム)がこのコンピュータを制御することで実現される。
本明細書における各「手段」は、実施形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに1対1には対応しない。同一のハードウェア要素が、場合によって異なった手段を構成する。例えば、コンピュータは、ある命令を実行するときにある手段となり、別の命令を実行するときは別の手段となりうる。また、一つの手段が、わずか1命令によって実現される場合もあれば、多数の命令によって実現される場合もある。したがって、本明細書では、以下、実施形態の各機能を有する仮想的回路ブロック(手段)を想定して実施形態を説明する。また、本実施形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、また、実行ごとに異なった順序で実行してもよい。このような順序の変更は、例えば、ユーザが実行可能な処理を選択するなどメニュー形式のインターフェース手法によって実現することができる。
【0092】
[3.第1実施形態]
[3−1.第1実施形態の全体構成]
図1は、第1実施形態の構成を示す機能ブロック図である。
すなわち、本実施形態のデータ管理装置は、座標データ1を格納するインデクス2、座標データからインデクスを生成するインデクス生成手段3、2次元空間内(平面上)の所定の範囲、すなわち全領域内に存在する1つ以上の座標データのうちで、指定した矩形範囲に含まれる座標データをすべて列挙する範囲探索手段4、及び、指定した座標データに最も近い座標データを決定する最近座標探索手段5を備えている。
なお、前記インデクス、インデクス生成手段、範囲探索手段及び最近座標探索手段のそれぞれの構成については、以下に詳述する。また、前記インデクスは、上記の2つの探索手段を構成するのに共通に用いられる。
【0093】
[3−1−1.インデクスの構成]
本実施形態におけるインデクスとしては、探索対象である各座標データに元分割を付与したものを、この座標と元分割から生成される領域コードの辞書順(昇順)に並べ、これを記憶装置の連続する番地に格納したものを用いる。図2は、本実施形態のインデクスにおける領域群の格納形式の一例を示したものである。
なお、前記[1.用語の説明]で述べたように、座標と元分割の組を「領域群」と呼ぶ。また、この領域群は、さらに項数との組み合わせにより、その座標を含む複数の「領域」を表す。
【0094】
(元分割)
ここで、元分割について説明する。
各座標データに付与する元分割は、次の条件を満たすように設定されている。すなわち、「項数mの領域が一致する領域群が複数存在するとき、それらの項数m+1の共有領域は一致し、かつ、それらの項数m+1の領域には少なくとも2つ以上の異なる領域がある。」という条件である。
【0095】
但し、これらの領域群に関しては、元分割のm+1項までは一致している。また、すべての領域群について、項数m=0の領域は「全領域」で一致するから、各元分割のm+1=1項目は同一である。さらに、すべての領域群について、「項数1の共有領域」は同一である。
【0096】
図19に示した(T−18)は、x座標,y座標が共に12ビットの固定小数点表示から成る10個の座標データ及び元分割を格納したインデクスの例である。右に座標と元分割から生成される「領域コード」を示してあるが、これは各領域群から計算によって求めることができるものである。
【0097】
上述したように、このインデクス中においては、各領域群は座標と元分割から生成される領域コードの辞書順(昇順)にソートされている。
また、上記[1.用語の説明]の(f)で述べたように、各領域群の「項数1の共有領域」は、「項数1の領域」の各座標より1桁だけ短い前方列で置き換えた座標によって表されるから、そのx分割は(4−1=)3、y分割は(6−1=)5となる。
【0098】
従って、各領域群の「項数1の共有領域」は、図19の(T−19)ですべて一致しており、かつ、項数1の領域は、0番地から5番地までが図19の(T−20)、6番地が図20の(T−21)、7番地から9番地までが(T−22)と、3つの異なる領域に分かれている。
【0099】
さらに、例えば「項数1の領域」が一致する7番地から9番地の3つの領域群について、「項数2の共有領域」は、そのx分割が(43−1=)42、y分割が(62−1=)61となり、図20の(T−23)と互いに一致するが、「項数2の領域」は、図20の(T−24)とそれぞれ異なっている。
【0100】
これを図示すると、図3に示すようになる。
すなわち、上記[1.用語の説明]の(c)で述べたように、座標データの固定小数点表示の前方列(上位桁)によってある領域が表される。例えば、上記「項数2の共有領域」が、図21の(T−25)である場合、このx座標及びy座標によって表される領域は、図21の(T−26)の座標データの集合を表す。
なお、この座標によって表される領域は、10進法で示すと、x座標が256以上319以下、y座標が64以上95以下の領域である。
【0101】
一方、7番地の座標によって表される領域は、図21の(T−27)の座標データの集合を表す。
なお、この7番地の座標によって表される領域は、10進法で示すと、x座標が256以上287以下、y座標が64以上79以下の領域である。
【0102】
同様に、8番地の座標によって表される領域は、図21の(T−28)の座標データの集合を表す。
なお、この8番地の座標によって表される領域は、10進法で示すと、x座標が288以上319以下、y座標が64以上79以下の領域である。
【0103】
同様に、9番地の座標によって表される領域は、図21の(T−29)の座標データの集合を表す。
なお、この9番地の座標によって表される領域は、10進法で示すと、x座標が288以上319以下、y座標が80以上95以下の領域である。
従って、これを図示すると、図3に示すようになる。
【0104】
すなわち、本例の場合、「項数1の領域が一致する領域群が複数存在するとき(7番地〜9番地の3つ)、それらの項数2の共有領域は一致し、かつ、それらの項数2の領域には、少なくとも2つ以上の異なる領域がある。」ので、上記「項数mの領域が一致する領域群が複数存在するとき、それらの項数m+1の共有領域は一致し、かつ、それらの項数m+1の領域には、少なくとも2つ以上の異なる領域がある。」という条件が満たされている。
【0105】
[3−1−2.インデクス生成手段の構成]
本実施形態におけるインデクス生成手段は、主記憶上のA番地からB番地までに格納された座標データに対して元分割を設定するとともに、それらの領域群を領域コードの昇順(辞書順)に並べ替えてインデクスとする手続きから成っている。
なお、上述したように、1つの番地には座標だけでなく(元)分割も同時に格納できるものとする。また、初期状態においては、これらの分割は( , )に設定されている。また、B>A(領域群は少なくとも2個以上)とする。
【0106】
以下の手続きでは、番地の対{a,b}を可変個数記憶できるキューを使用する。
(1)キューを初期化し、{A,B}を追加する。
(2)キューが空なら終了、空でなければ、その先頭を{a,b}として取り出し、キューから削除する。
(3)番地a以上b以下に格納された座標について、各座標の最大値、最小値を求め、両者が一致している上位桁の数(一致前方列長)を次元毎に決定する。
(4)全ての次元において、一致前方列長=座標長(座標の桁数)ならば、(2)に戻る。
(5)番地a以上b以下に格納された同一の元分割の各次元について、(各一致前方列長+1)と(各分割の和)との差を新たな項として、各分割の末尾に追加する。但し、一致前方列長が座標長に等しい次元については、分割の末尾には0を追加する。
(6)番地a以上b以下に格納された領域群を、上記(5)で更新された元分割に従って生成される領域コードの順に並べ替える。
(7)(7−1)p=aとする。
(7−2)番地pの領域コードと同一の領域コードを持つ連続する番地の最大のものを求めて“q”とする。
(7−3)p<qならば{p,q}をキューに追加する。
(7−4)p=q+1とする。
(7−5)p<bならば(7−2)に戻る。
p>=bならば(2)に戻る。
【0107】
ステップ(3)で求めた各一致前方列長は、番地a以上b以下に格納された全ての各座標の一致前方列長になっている。各座標の最大値及び最小値からこれを決定するのは、その具体的な方法の一つにすぎない。
また、(7−2)においては、同一の領域コードを有する領域群を格納した連続する番地の最大のものを求める方法について具体的に述べていないが、この方法としては、領域コードが一致しなくなるまで逐次番地を増加させても良いし、二分探索によって求める等、種々の方法をとりうる。
このようにして生成したインデクスの例を、図22の(T−30)に示す。
【0108】
[3−1−3.範囲探索手段の構成]
本実施形態における範囲探索手段は、次のようなステップから成っている。 (1)結果リストを初期化する。
(2)領域キューを初期化する。
(3)インデクスの任意のデータ、例えば0番地を選び、項数0と組み合わせて[0,0]を処理対象とする。
(3−1)共有領域[0,1]が計算できない場合(元分割の項が0個)、0番地の座標が指定範囲に含まれていれば、結果リストに加える。
(3−2)共有領域[0,1]が指定範囲に含まれている場合、インデクス中の全データ(番地)を結果リストに加える。
(3−3)共有領域[0,1]が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、[0,1]を領域キューに追加する。
(4)領域キューが空なら終了。空でなければ先頭要素を処理対象[a,m]として取り出し、領域キューから削除する。
(5)共有領域[a,m]の各座標の末尾に、桁数字0、1をそれぞれ追加して生成される2の2乗=4つの領域のそれぞれについて、次の(6)を行う。
(6)その領域を項数mの領域とする領域群がインデクス中に存在する場合に限り、その1つの番地を“b”として次の条件付きステップのいずれかを行なう。
(6−1)共有領域[b,m+1]が計算できない場合(元分割の項がm個)、b番地の座標が指定範囲に含まれていれば、結果リストに加える。
(6−2)共有領域[b,m+1]が指定範囲に含まれている場合、b番地と同じく、領域[b,m]を項数mの領域とする領域群を格納した番地を全て結果リストに加える。
(6−3)共有領域[b,m+1]が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、[b,m+1]を領域キューに追加する。
(6−4)共有領域[b,m+1]が指定範囲と共通部分を有しない場合は、その領域に関して行うべき処理はない。
(7)(4)へ戻る。
【0109】
[3−1−4.最近座標探索手段の構成]
本実施形態における最近座標探索手段は、次のようなステップから成っている。
(1)インデクス中の任意のデータ、例えば、0番地を最近座標候補pとし、その座標データと指定点との距離をrとする。
(2)領域スタックを初期化する。
(3)0番地を項数0と組み合わせて[0,0]を処理対象とする。共有領域[0,1]が計算できる場合(元分割の項が1個以上)、[0,1]を領域スタックに追加する。
(4)領域スタックが空なら終了。空でなければ先頭要素を処理対象[a,m]として取り出し、領域スタックから削除する。
(5)共有領域[a,m]と指定座標との距離がr以上の場合、(4)に戻る。一方、r未満の場合には、共有領域[a,m]の各座標の末尾に、桁数字0、1をそれぞれ追加して生成される2の2乗=4つの領域のそれぞれについて、次の(6)を行う。
(6)その領域を項数mの領域とする領域群がインデクス中に存在する場合に限り、その1つの番地を“b”として、次の条件付きステップのいずれかを行なう。
(6−1)共有領域[b,m+1]が計算できない場合(元分割の項がm個)、b番地の座標データと指定座標との距離がr未満であれば、“b”を新たな最近座標候補pとし、その距離を新たなrとする。このとき、さらにr=0なら処理を終了する。
(6−2)共有領域[b,m+1]が指定座標から距離r未満(以内)の範囲に含まれている場合、“b”を新たな最近座標候補pとし、b番地の座標データと指定座標との距離を新たなrとする。さらに、共有領域[b,m+1]を領域スタックに追加する。
(6−3)共有領域[b,m+1]が指定座標から距離r未満(以内)の範囲に含まれてはいないが、指定座標との距離はr未満である場合、[b,m+1]を領域スタックに追加する。
(6−4)共有領域[b,m+1]と指定座標との距離がr以上である場合は、その領域に関して行うべき処理はない。
(7)(4)へ戻る。
【0110】
[3−2.第1実施形態の作用・効果]
[3−2−1.インデクス生成手段の作用・効果]
インデクス生成手段が、図23に示した(T−31)のように0番地から9番地までに格納された2次元座標及び空列に初期設定された2次元分割に作用してインデクスを生成する過程を、図4及び図5に示したフローチャートに従って説明する。
なお、分かりやすくするために、当初、0〜9番地に格納された座標にa〜jの符号を付し、これらの座標がどのように並べ替えられるかを追跡できるようにした。
【0111】
まず、ステップ401において初期化したキューに{0,9}を追加する。これは直ちにステップ403で{a,b}として取り出され、キューから削除される。
続いて、ステップ404において、0番地以上9番地以下に格納された座標について、x座標及びy座標の最大値・最小値を求めると、x座標の最大値・最小値は 000 111010000・000 000010001 で一致前方列長は“3”、y座標の最大値・最小値は 00000 1100110・00000 0000111 で一致前方列長は“5”と決定される(ステップ405)。これらはいずれも座標長“12”より短いから、ステップ407に進む。このとき、各分割は空列で、その和は0だから、各分割の第1項として、「上記各一致前方列長+1」が設定される。すなわち、本例では、x分割は“4”、y分割は“6”と設定される。
【0112】
ステップ408において、この元分割(4,6)に従って領域コードを生成すると、図24の(T−32)のようになる。
続いて、ステップ409において、これらの領域群を領域コードの順に並べ替えると、図25の(T−33)のようになる。
【0113】
ステップ410に進み、まず、p=a=0番地とする。続いて、ステップ411において、番地0の領域コード0000000001と同一の領域コードを有する領域群を調べると、番地5まで続いているからq=5とする。また、ステップ412において、p<qか否かが調べられ、p<qだから、{0,5}をキューに追加する(ステップ413)。次に、p=5+1=6とし(ステップ414)、p<9なのでステップ411に戻る(ステップ415)。
【0114】
続いて、ステップ411において、番地6の領域コードを調べると、これと等しい領域コードは他にないから、q=p=6となり、ステップ413を通過してステップ414でp=6+1=7とし、p<9なので再びステップ411に戻る(ステップ415)。
【0115】
次に、番地7の領域コード0001000001と同一の領域コードを有する領域群を調べると、9番地まで続いているからq=9とする(ステップ411)。また、p<qなので{7,9}をキューに追加する(ステップ412,ステップ413)。ステップ414において、p=9+1=10>9なので、ステップ402に戻る(ステップ415)。この結果、キューの内容(左が先頭)は、図25の(T−34)のようになっている。
【0116】
続いて、ステップ403で、この先頭要素{0,5}を{a,b}として取り出し、キューから削除する。続くステップ404において、0番地から5番地までの座標について、x座標及びy座標の最大値・最小値を求めると、x座標の最大値・最小値は 000000101110・ 000000010001で一致前方列長は“6”、y座標の最大値・最小値は 000001100100・ 000001000000で一致前方列長は“6”と決定される(ステップ405)。これらは座標長“12”より短いからステップ407に進み、x分割の第2項として(6+1)−4=3を、また、y分割の第2項として(6+1)−6=1を、0番地から5番地までの各分割に追加する。
【0117】
ステップ408において、この元分割(43,61)に従って領域コードを生成すると、図26の(T−35)のようになる。
続いて、ステップ409において、0番地から5番地までの領域群を領域コードの順に並べ替えると、図27の(T−36)のようになる。
【0118】
ステップ410〜ステップ413において、0番地の領域コード00000000010001は2番地まで、3番地の領域コード00000000010010は5番地まで同一であると判定され、{0,2}及び{3,5}がキューに追加される。この結果、再びステップ402に戻ったとき、キューの内容は、図27の(T−37)のようになっている。
【0119】
続いて、ステップ403で、この先頭要素{7,9}を{a,b}として取り出し、キューから削除する。続くステップ404では、同様にして、7番地から9番地までの各座標の一致前方列長は、x次元が“6”、y次元が“7”と決定される(ステップ405)。これらは座標長“12”より短いからステップ407に進み、x分割の第2項として(6+1)−4=3を、また、y分割の第2項として(7+1)−6=2を7番地から9番地までの各分割に追加する。
【0120】
ステップ408において、7番地から9番地までに格納された座標について、この元分割(43,62)に従って領域コードを生成すると、図28の(T−38)のようになる。
続いて、ステップ409において、7番地から9番地までの領域群を領域コードの順に並べ替えると、図29の(T−39)のようになる。
7、8、9番地の領域群はいずれも領域コードが異なるから、番地の対をキューに追加することなくステップ402に戻る。このとき、キューの内容は図29の(T−40)のようになっている。
【0121】
続いて、ステップ403で、この先頭要素{0,2}を{a,b}として取り出し、キューから削除する。続くステップ404では、同様にして、0番地から2番地までの各座標の一致前方列長は、x次元が“8”、y次元が“9”と決定される(ステップ405)。これらは座標長“12”より短いからステップ407に進み、x分割の第3項として(8+1)−(4+3)=2を、y分割の第3項として(9+1)−(6+1)=3を0番地から2番地までの各分割に追加する。
【0122】
ステップ408において、0番地から2番地までに格納された座標について、この元分割(432,613)に従って領域コードを生成すると、図30の(T−41)のようになる。
続いて、ステップ409において、0番地から2番地までの領域群を領域コードの順に並べ替えると、図31の(T−42)のようになる。
0、1、2番地の領域群はいずれも領域コードが異なるから、番地の対をキューに追加することなく、ステップ402に戻る。このとき、キューの内容は図31の(T−43)のようになっている。
【0123】
続いて、ステップ403で、この先頭要素{3,5}を{a,b}として取り出し、キューから削除する。続くステップ404では、3番地から5番地までの各座標の一致前方列長は、x次元が“10”、y次元が“8”と決定される(ステップ405)。これらは座標長“12”より短いからステップ407に進み、x分割の第3項として(10+1)−(4+3)=4を、y分割の第3項として(8+1)−(6+1)=2を3番地から5番地までの各分割に追加する。
【0124】
ステップ408において、3番地から5番地までに格納された座標について、この元分割(434,612)に従って領域コードを生成すると、図32の(T−44)のようになる。
続いて、ステップ409において、3番地から5番地までの領域群を領域コードの順に並べ替えると、図33の(T−45)のようになる。
3、4、5番地の領域群はいずれも領域コードが異なるから、番地の対をキューに追加することなく、ステップ402に戻る。このとき、キューは既に空になっているので、それを検出して処理を終了する。
このようにして、インデクスが生成される。
【0125】
[3−2−2.探索手段に対するインデクスの作用]
探索手段は次の3通りの方法でインデクスを使用する。すなわち、
(1)番地aを指定してそこに格納された領域群のデータ(点の座標and/or分割)を得る。
(2)ある番地aの領域群のある項数mの共有領域の各座標の末尾に、任意の桁数字を追加した領域を、同じ項数mの領域とする領域群を探し、もし存在すればその1つの番地を得る。
(3)ある番地aの領域群のある項数mの領域を、同じ項数mの領域とする領域群を探し、それらすべての番地(aを含む)を得る。
【0126】
これらのうち、(1)は通常の記憶装置の作用を用いて実現される。
また、(2)は、まず指定番地に格納されている元分割と指定項数を組合せて定まる各分割の和の長さだけ、格納されている点の各座標の前方列をとり、その各座標の末尾1桁を追加すべき桁数字に変更した座標と前記分割とを用いて領域コードを作成する。この領域コードと前方列が一致する領域コードを持つ領域群が格納された番地を、インデクスを二分探索することによって決定する。
【0127】
さらに、インデクスの各領域群は、元分割の項数以下の任意のmについて、項数m−1の領域が一致するすべての領域、すなわち各座標の、元分割のm−1項までの和を長さとする前方列が一致するものは、項数mの共有領域、すなわち各座標の元分割のm項までの和−1を長さとする前方列が一致し、かつ、項数mの領域、すなわち各座標の元分割のm項までの和の位置の桁数字の組に相異なるものがあって、それらが一定の次元の順(例えば、x座標、y座標の順)で比較して、昇順に並ぶように構成されている。
【0128】
この配列順序は、それぞれの領域コードを1つの桁数字(ビット)列として先頭から比較した辞書順(昇順)に一致する。
したがって、インデクス中の領域群の元分割の項数mの分割と任意の座標とによって表される領域を、同じ項数mの領域とする領域群の有無を決定する手続、および、このような領域群が存在する場合、その1つを決定する手続は、前記分割と座標から生成される領域コードをキーとして、それを前方列とする領域コードを持つ領域群を二分探索することによって実現できる。
【0129】
例えば、上記のインデクス例において、共有領域[4,2]の各座標の末尾に“0”または“1”を追加した座標と、4番地の元分割(434,612)の項数2の分割(43,61)によって表される4つの領域、すなわち、図33の(T−46)の4つの領域のうち、(T−47)を項数2の領域とする領域群をインデクス中で探す場合について説明する。
【0130】
二分探索の手続により、まずインデクスのほぼ中央、すなわち(0+9)÷2=4番地の領域群、すなわち、図34の(T−48)の領域コードと、上記探索対象領域#1の領域コードをキーとして比較する。なお、この領域コードを「キーとなる領域コード」という。
【0131】
この比較においては、2つの数字列を先頭から逐次比較して、最初に異なるビットが現れたとき、“0”の方を“1”の方より小さいとする比較結果が得られれば、実際にどのような比較手続をとってもよい。また、一方が尽きるまで両者の領域コードが一致していれば、一方が他方の前方列になっていると判定する。
【0132】
本例の場合、キーとなる領域コード(00000000010000)を4番地の領域コード(00000000010010011001)と比較すると、キーとなる領域コードの13ビット目が“0”で、4番地の領域コードの13ビット目の“1”と異なるから、探索はさらに、3番地以前のインデクスのほぼ中央(0+3)÷2=1番地の領域群(T−49)の領域コードと、キーとなる領域コード(00000000010000)を比較する。
【0133】
この場合もキーとなる領域コードの方が小さいので、さらに0番地以下のインデクスの唯一の領域群(T−50)の領域コードと、キーとなる領域コード(00000000010000)を比較する。
この場合もキーとなる領域コードの方が小さいので、二分探索は終了して、キーとなる領域コードを前方列とする領域コードを持つ領域群、すなわち、前記領域を項数2の領域とする領域群はインデクス中には存在しないと判定される。
【0134】
一方、もう1つの領域#2、すなわち、図34の(T−51)の領域コードをキーとして、インデクスを二分探索すると、(T−52)との比較においては、最初の領域の場合と同様に、キーとなる領域コード(00000000010001)の方が小さいと判定される。しかし、(T−53)との比較においては、キーとなる領域コード(00000000010001)が1番地の領域群の領域コードの前方列になっている。すなわち、上記領域を項数2の領域とする領域群がインデクス中に存在し、その1つが番地1に格納されていると判定される。
【0135】
本実施形態におけるインデクスの構成上の特徴的な利点は、以下の通りである。すなわち、上記のような二分探索の過程で用いられる領域コードの比較において、比較対象となる領域コード同士の大小比較の判定に必要な長さの前方列の比較が行なえれば十分であり、必ずしも分割あるいは元分割を参照しなくてもよい点である。
【0136】
すなわち、例えば、事前にインデクスの各領域群に領域コードも含めて格納してあれば、キーとなる領域コードと各番地に格納された領域コードのみを、分割及び元分割を参照することなく、単なるビット列として比較すればよい。このように、ある程度の長さのビット列をまとめて比較する機能は、通常の計算機によって提供されるから、これを利用して効率的な比較を実現することができる。 一方、事前にインデクスに領域コードを格納しない場合でも、一括して比較可能なビット長(以内)毎に領域コードを計算し、これらをまとめて比較することで、効率を向上しうる。
【0137】
(3)については、a番地の領域群の「項数mの領域」を、同じく「項数mの領域」とする領域群がその他にも存在するとすれば、それらは必ずa番地の前後の相続く番地に格納されているはずである。
したがって、a番地より前の番地を逐次調べ、インデクスに格納された領域群がキーとなる領域コードを前方列とする領域コードを持つ限り列挙する手続、及び、a番地より後の番地を逐次調べ、インデクスに格納された領域群がキーとなる領域コードを前方列とする領域コードを持つ限り列挙する手続の結果得られた番地と“a”を合わせれば、(3)の結果を得ることができる。
【0138】
例えば、領域[1,2]を項数2の領域とする領域群の格納番地は、1番地の前後の相続く番地に格納されているはずであり、本例のインデクスにおいては、0番地及び2番地に格納されている。
すなわち、1番地より小さい0番地をまず調べて、図35の(T−54)に示した領域[1,2]の領域コードが、(T−55)の領域コードの前方列になっていると確認できる。なお、一致前方列にアンダーラインを付した。それより前の番地は、このインデクス中にはないから、1番地より前の番地の列挙はここで終了する。
【0139】
一方、1番地より後の2番地についても、図35の(T−56)に示したように、その領域コードが、領域[1,2]の領域コードを前方列としていることが確認されるが、次の3番地については、図35の(T−57)に示したように、その領域コードが、領域[1,2]の領域コードを前方列としていないことが判明する。したがって1番地より後の番地の列挙は2番地までで終了する。
以上の列挙の結果にもとの2番地を加えて、領域[1,2]を項数2の領域とする領域群を格納した番地は、0,1,2番地であるという結果を得る。
【0140】
以上説明したように、本実施形態におけるインデクスは、その構成上の特徴に基づいて、探索手段が使用する(1),(2),(3)の作用を効率的に提供することができる。
すなわち、(1)に関しては、領域コードを格納した場合には、(2),(3)における領域コードの比較が高速に行なえるという利点があり、領域コードを格納せずに座標と元分割のみを格納する場合には、長大な桁数字(ビット)列を格納する記憶領域を節約できるという利点がある。
【0141】
さらには、座標と元分割から領域コードを生成するのと逆の手順によって、領域コードから元分割を使用して各座標の前方列を復元できるので、各座標の残余の後方列を一定の次元順に領域コードの末尾に追加したもの(拡張領域コード)と元分割を使用すれば、座標を復元することができる。この場合、もちろん、各座標の長さ(桁数)は所与である。
【0142】
したがって、座標の方を必要な都度計算して復元することにして、インデクスとしては拡張領域コードと元分割のみを格納するという構成も可能である。これに要する記憶容量は座標と元分割を格納する場合と同等で済む。
【0143】
[3−2−3.範囲探索手段の作用・効果]
次に、上述のインデクスの例を用いて、指定範囲の左下、右上の座標がそれぞれ図36の(T−58)と与えられた場合の範囲探索手段の動作を、図6及び図7に示したフローチャートに従って説明する。
【0144】
まず、ステップ603,604において、共有領域[0,1]は(T−59)と計算される。続いて、ステップ605において、この共有領域が上記指定範囲に含まれているか否かが判断され、指定範囲に含まれてはいないが共通部分を有するので(ステップ609)、共有領域[0,1]はステップ602で初期化された空の領域キューに追加される(ステップ610)。
【0145】
続いて、領域キューが空か否かが判断され(ステップ611)、ステップ610で追加された共有領域[0,1]が、直ちに先頭要素[a,m]=[0,1]として領域キューから取り出される(ステップ612)。
【0146】
ステップ613において、共有領域[0,1]の各座標の末尾に“0”または“1”を追加することにより、図36の(T−60)の4つの領域が生成される。
ステップ615において、これら4つの領域のうち、第1の領域である#1(T−61)が取り出され、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ616)。この領域を項数1の領域とする領域群はインデクス中に存在しないから、この領域は本範囲探索の対象にならず、ステップ614に戻る。
【0147】
次に、ステップ615において、第2の領域である#2(T−62)が取り出され、同様に、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ616)。この領域を項数1の領域とする領域群は、番地0,1,2,3,4,5に存在するので、ステップ617に進む。そこで、b=4として共有領域[4,2]は、図37の(T−63)と計算され、ステップ618において、この共有領域が上記指定範囲に含まれているか否かが判断され、指定範囲に含まれてはいないが共通部分を有するので(ステップ622)、共有領域[4,2]を領域キューに追加し(ステップ623)、ステップ614に戻る。
【0148】
次に、ステップ615において、第3の領域である#3(T−64)が取り出され、同様に、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ616)。この領域を項数1の領域とする領域群は、番地6に存在する。そこで、b=6として共有領域[6,2]は計算できないから、ステップ620に進み、6番地の座標が指定範囲に含まれているか否かを調べると、含まれていないと判定され、ステップ614に戻る。
【0149】
続いて、ステップ615において、第4の領域である#4(T−65)が取り出され、同様に、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ616)。この領域を項数1の領域とする領域群は、番地7,8,9に存在する。そこで、b=7として共有領域[7,2]は(T−66)と計算され、ステップ618において、この共有領域が上記指定範囲に含まれているか否かが判断され、指定範囲に含まれてはいないが共通部分を有するので(ステップ622)、共有領域[7,2]を領域キューに追加し(ステップ623)、ステップ614に戻る。ステップ614において、4つの探索対象領域はすべて処理済みなので、ステップ611に戻る。
以上の結果、領域キューの内容は、(T−67)となっている。
【0150】
次に、ステップ612において、この先頭要素[4,2]が[a,m]として取り出される。
ステップ613において、共有領域[4,2]の各座標の末尾に“0”または“1”を追加して生成されるのは、図38の(T−68)の4つの領域である。
ステップ615以下の処理によって、これら4つの領域のうち、第1の領域である#5と第4の領域である#8(T−69)を項数2の領域とする領域群はインデクス中に存在しないから、これらの領域は本範囲探索の対象にならず、ステップ614に戻る。
【0151】
次に、第2の領域である#6(T−70)を項数2の領域とする領域群は、番地0,1,2に存在する(ステップ616)。そこで、b=1として共有領域[1,3]は、(T−71)と計算され、これは指定範囲に含まれているので(ステップ618)、ステップ619に進み、領域[1,2]を項数2の領域とする領域群を格納している番地0,1,2を、全て結果リストに加える。
【0152】
続いて、第3の領域である#7(T−72)を項数2の領域とする領域群は、番地3,4,5に存在する(ステップ616)。そこで、b=4として共有領域[4,3]は、図39の(T−73)と計算され、これは指定範囲に含まれてはいないが共通部分を有する(ステップ622)。したがって、共有領域[4,3]を領域キューに追加し(ステップ623)、ステップ614に戻る。ステップ614において、4つの探索対象領域はすべて処理済みなので、ステップ611に戻る。
以上の結果、領域キューの内容及び結果リストの内容は、左を先頭として(T−74)となっている。
【0153】
続いて、ステップ612において、この先頭要素[7,2]が[a,m]として取り出される。
ステップ613において、共有領域[7,2]の各座標の末尾に“0”または“1”を追加して生成されるのは、図39の(T−75)の4つの領域である。
ステップ615以下の処理によって、これら4つの領域のうち、第2の領域である#10(T−76)を項数2の領域とする領域群はインデクス中に存在しないから、この領域は本範囲探索の対象にならず、ステップ614に戻る。
【0154】
次に、第1の領域である#9、第3の領域である#11、第4の領域である#12(T−77)を項数2の領域とする領域群は、それぞれ番地7、番地8、番地9に存在する(ステップ616)。しかし、共有領域[7,3]、共有領域[8,3]、共有領域[9,3]はいずれも計算できないので、これらの番地の座標が指定範囲に含まれているか否かが調べられる(ステップ620)。
【0155】
その結果、7番地の座標は指定範囲に含まれているが、8番地及び9番地の座標は指定範囲に含まれていないと判定されるから、7番地を結果リストに加え(ステップ621)、ステップ614に戻る。ステップ614において、4つの探索対象領域はすべて処理済みなので、ステップ611に戻る。
以上の結果、領域キューの内容及び結果リストの内容は、左を先頭として、図40の(T−78)となっている。
【0156】
続いて、ステップ612において、この先頭要素[4,3]が[a,m]として取り出される。
ステップ613において、共有領域[4,3]の各座標の末尾に“0”または“1”を追加して生成されるのは、図40の(T−79)の4つの領域である。
ステップ615以下の処理によって、これら4つの領域のうち、第4の領域である#16(T−80)を項数3の領域とする領域群はインデクス中に存在しないから、この領域は本範囲探索の対象にならず、ステップ614に戻る。
【0157】
次に、第1の領域である#13、第2の領域である#14、第3の領域である#15(T−81)を項数3の領域とする領域群は、それぞれ番地3、番地4、番地5に存在する(ステップ616)。しかし、共有領域[3,4]、共有領域[4,4]、共有領域[5,4]はいずれも計算できないので、これらの番地の座標が指定範囲に含まれているか否かが調べられる(ステップ620)。
【0158】
その結果、3番地及び4番地の座標は指定範囲に含まれているが、5番地の座標は指定範囲に含まれていないと判定されるから、3番地及び4番地を結果リストに加え(ステップ621)、ステップ614に戻る。ステップ614において、4つの探索対象領域はすべて処理済みなので、ステップ611に戻る。
ステップ611に戻り、領域キューが空であるか否かを判断し、領域キューが空であることを検出して、本範囲探索処理を終了する。
以上の結果、結果リストの内容は(T−82)となっており、インデクス中に格納された0〜9番地の座標のうち、指定範囲に含まれる座標は、0番地,1番地,2番地,3番地,4番地及び7番地の座標であると決定される。
【0159】
このように、本実施形態の範囲探索手段は、上記の手続によって、指定範囲に含まれる点をもれなく列挙することができる。また、本実施形態のインデクスを使用すれば、座標データが領域コードに従ってソートされた順に主記憶上に連続して配置されていることによって、各種提案されている木構造等とは異なって、余分なポインタ領域を使うことなく、かつ迅速に、その指定範囲に含まれている座標データをもれなく列挙することができる。
【0160】
なお、上述の説明においては、左下及び右上の座標で指定される矩形範囲に含まれる座標の探索について、その作用を述べたが、範囲と座標及び領域の包含関係、共通部分の有無が判定できれば、指定範囲は矩形に限られるものではない。
【0161】
[3−2−4.最近座標探索手段の作用]
次に、上述のインデクスの例を用いて、指定座標が図41の(T−83)と与えられた場合の最近座標探索手段の動作を、図8及び図9に示したフローチャートに従って説明する。
【0162】
まず、ステップ801において、最近座標候補pを0番地の座標とする。pには座標データそのものの代りに番地0を設定しておく。座標p=(17,96)と指定座標(100,50)との距離は、r=sqrt((100−17)2 +(50−96)2 )=sqrt(9005)に設定される(ステップ802)。
【0163】
ステップ805において、共有領域[0,1]は、図41の(T−84)と計算できるので、[0,1]はステップ803で初期化された空の領域スタックに追加される(ステップ806)。
【0164】
続いて、領域スタックが空か否かが判断され(ステップ807)、ステップ806で追加された共有領域[0,1]が、直ちに先頭要素[a,m]=[0,1]として領域スタックから取り出される(ステップ808)。
【0165】
ステップ809において、共有領域[0,1]と指定座標との距離が“r”以上であるか否かが判断されるが、本例の場合、指定座標は共有領域[0,1]に含まれているので、それらの間の距離は“0”で、上記“r”より小さい。
従って、ステップ810に進み、共有領域[0,1]の各座標の末尾に“0”または“1”を追加することにより、図41の(T−85)の4つの領域が生成される。
ステップ812において、これら4つの領域のうち、第1の領域である#1(T−86)が取り出され、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ813)。この領域を項数1の領域とする領域群はインデクス中に存在しないから、この領域は本探索の対象にならず、ステップ811に戻る。
【0166】
次に、ステップ812において、第2の領域である#2(T−87)が取り出され、同様に、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ813)。この領域を項数1の領域とする領域群は、0番地から5番地まで存在するので、ステップ814に進む。そこで、b=4として共有領域[4,2]は、図42の(T−88)と計算される(ステップ815)。
【0167】
続いて、ステップ816において、この共有領域が上記指定座標から“r”未満(以内)の範囲に含まれているか否かが判断される。
すなわち、この共有領域[4,2]と指定座標との距離のうち、その共有領域中で指定座標から最も近い右下の座標(63,64)と指定座標との距離は、sqrt((63−100)2 +(64−50)2 )=sqrt(1565)で上記“r”より小さく、また、領域中で指定座標から最も遠い左上の座標(0,127)と指定座標との距離は、sqrt((0−100)2 +(127−50)2 )=sqrt(15929)で上記“r”より大きいから、この領域は指定座標から距離r未満(以内)の部分を有するが含まれてはいないと判断される(ステップ816、ステップ821)。
そして、ステップ822に進み、共有領域[4,2]を領域スタックに追加し、ステップ811に戻る。
【0168】
次に、ステップ812において、第3の領域である#3(T−89)が取り出され、同様に、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ813)。この領域を項数1の領域とする領域群は、6番地に存在するので、ステップ814に進む。
【0169】
そこで、b=6として共有領域[6,2]は計算できないから、ステップ819に進み、6番地の座標(464,7)と指定座標との距離を計算する。これはsqrt((464−100)2 +(7−50)2 )=sqrt(134345)で“r”より大きいから、最近座標候補pの更新は行われず、ステップ811に戻る。
【0170】
続いて、ステップ812において、第4の領域である#4(T−90)が取り出され、同様に、この領域を項数1の領域とする領域群がインデクス中に存在するか否かが判断される(ステップ813)。この領域を項数1の領域とする領域群は、7番地から9番地まで存在するので、ステップ814に進む。
そこで、b=7として共有領域[7,2]は、(T−91)と計算される(ステップ815)。
【0171】
続いて、ステップ816において、この共有領域が上記指定座標から“r”未満(以内)の範囲に含まれているか否かが判断される。
すなわち、指定座標との距離は、領域中で指定座標から最も近い左下の座標(256,64)と指定座標との距離sqrt((256−100)2 +(64−50)2 )=sqrt(24532)で“r”より大きいから、この領域に対しては何も処理を行わず、ステップ821を経てステップ811に戻る。ステップ811において、4つの探索対象領域はすべて処理済みなので、ステップ807に戻る。
以上の結果、領域スタックの内容(右を先頭として)、及びp、rの値は、図42の(T−92)のようになっている。
【0172】
次に、ステップ808において、この先頭要素[4,2]が[a,m]として取り出される。続いて、ステップ809において、共有領域[4,2]と指定座標との距離が“r”以上であるか否かが判断される。
本例の場合、共有領域[4,2]と指定座標との距離はsqrt(1565)で“r”より小さいから、ステップ810に進み、共有領域[4,2]の各座標の末尾に“0”または“1”を追加して、図43の(T−93)の4つの領域が生成される。
【0173】
ステップ812以下の処理によって、これら4つの領域のうち、第1の領域である#5と第4の領域である#8(T−94)を項数2の領域とする領域群はインデクス中に存在しないから、これらの領域は本探索の対象にならず、ステップ811に戻る。
【0174】
次に、第2の領域である#6(T−95)を項数2の領域とする領域群は、番地0,1,2に存在する(ステップ813)。そこで、b=1として共有領域[1,3]は、(T−96)と計算される(ステップ815)。
【0175】
続いて、ステップ816において、この共有領域が上記指定座標から“r”未満(以内)の範囲に含まれているか否かが判断される。
すなわち、指定座標との距離は、領域中で指定座標から最も近い右下の座標(31,96)と指定座標との距離がsqrt((31−100)2 +(96−50)2 )=sqrt(6877)で“r”より小さく、また領域中で指定座標から最も遠い左上の座標(0,127)と指定座標との距離がsqrt((0−100)2 +(127−50)2 )=sqrt(15929)で“r”より大きいから、この領域は指定座標から距離r未満(以内)の部分を有するが含まれてはいないと判断される(ステップ816、ステップ821)。
そして、ステップ822に進み、共有領域[1,3]を領域スタックに追加し、ステップ811に戻る。
【0176】
次に、第3の領域である#7、すなわち、図44の(T−97)を項数2の領域とする領域群は番地3,4,5に存在する。そこで、b=4として共有領域[4,3]は、(T−98)と計算される(ステップ815)。
【0177】
続いて、ステップ816において、この共有領域が上記指定座標から“r”未満(以内)の範囲に含まれているか否かが判断される。
すなわち、領域中で指定座標から最も遠い左上の座標(32,95)と指定座標との距離がsqrt((32−100)2 +(95−50)2 )=sqrt(6649)で“r”より小さいから、この領域は指定座標から距離r未満(以内)の範囲に含まれている。
【0178】
従って、ステップ817に進み、b=4番地を新たな“p”とし、4番地の座標(44,76)と指定座標との距離sqrt((44−100)2 +(76−50)2 )=sqrt(3812)を新たな“r”とする。さらに[4,3]を領域スタックに追加し(ステップ818)、ステップ811に戻る。ステップ811において、4つの探索対象領域はすべて処理済みなので、ステップ807に戻る。
以上の結果、領域スタックの内容(右を先頭として)、及びp、rの値は、図44の(T−99)のようになっている。
【0179】
次に、ステップ808において、この先頭要素[4,3]が[a,m]として取り出される。続いて、ステップ809において、共有領域[4,3]と指定座標との距離が“r”以上であるか否かが判断される。
すなわち、共有領域[4,3]と指定座標との距離はsqrt(1565)で、新たな“r”より小さいから、ステップ810に進み、共有領域[4,3]の各座標の末尾に“0”または“1”を追加して、図44の(T−100)の4つの領域が生成される。
ステップ812以下の処理によって、これら4つの領域のうち、第4の領域である#12、すなわち、図45の(T−101)を項数3の領域とする領域群はインデクス中に存在しないから、この領域は本探索の対象にならず、ステップ811に戻る。
【0180】
一方、図45の(T−102)を項数3の領域とする領域群は、それぞれ番地3、番地4、番地5に存在する(ステップ813)。しかし、共有領域[3,4]、共有領域[4,4]、共有領域[5,4]はいずれも計算できないので(ステップ815)、ステップ819に進み、これらの各番地の座標と指定座標との距離が“r”未満か否かが判断される。
【0181】
まず、番地3の座標(44,64)と指定座標との距離は、sqrt((44−100)2 +(64−50)2 )=sqrt(3332)で“r”より小さいから、ステップ820に進み、最近座標候補をこれに更新し、p=3、r=sqrt(3332)とする。
【0182】
次に、番地4の座標(44,76)と指定座標との距離は、sqrt((44−100)2 +(76−50)2 )=sqrt(3812)で“r”より大きいから、最近座標候補の更新は行われない。
【0183】
さらに、番地5の座標(46,68)と指定座標との距離は、sqrt((46−100)2 +(68−50)2 )=sqrt(3240)で“r”より小さいから、最近座標候補をこれに更新し、p=5、r=sqrt(3240)としてステップ811に戻る。ステップ811において、4つの探索対象領域はすべて処理済みなので、ステップ807に戻る。
以上の結果、領域スタックの内容(右を先頭として)及びp、rの値は、図45の(T−103)のようになっている。
【0184】
次に、ステップ808において、この先頭要素[1,3]が[a,m]として取り出される。続いて、ステップ809において、共有領域[1,3]と指定座標との距離が“r”以上であるか否かが判断される。
すなわち、共有領域[1,3]と指定座標との距離はsqrt(6877)で“r”より大きいから、その領域には処理を加えず、ステップ807に戻る。 ステップ807において、領域スタックが空であることを検出して、本最近座標探索処理を終了する。
【0185】
以上の結果、最近座標候補p及びその指定座標との距離rの値は、図45の(T−104)となっており、インデクス中に格納された0〜9番地の座標のうち、指定座標に最も近い座標は5番地の座標(46,68)であり、その距離r=sqrt(3240)であると決定される。
【0186】
上述したように、本実施形態の最近座標探索手段は、所定の座標データによって表される領域を再帰的に分割しながら、最近座標候補および指定座標との距離を更新していくので、上記の手続を実行するだけで、確実に指定座標に最も近い座標データを決定することができる。
【0187】
これに対して、従来は、まず最近座標の候補として妥当なものを1つ決定し、しかる後に、上述の範囲探索と類似の方法で、指定座標から距離r未満の範囲にある座標データを列挙し、もしそのような点が存在すればそれらのうちで指定座標に最も近いものを結果とし、なければ候補として決定したものを結果とするという2段階の方法を用いていた。
【0188】
しかし、本実施形態の最近座標探索手段の特徴は、要調査とされた領域をスタックに保持するとともに、処理の当初から最近座標候補を設定し、新たな最近座標候補が見い出された場合、直ちに最近座標候補を更新することである。この際、新たに最近座標候補となる座標に関して、それが最近座標候補となり得るか否かを判定する手続を要しない。
また、インデクスの特徴的な作用によって、新たな最近座標候補にし得る座標データは、すでに少なくとも一つは得られており、改めてそれを選択・探索する手続を要しない。
このようにして、極めて迅速に“r”を減少させることができるので、スタックから取り出される領域に関して、処理不要と判定する割合が向上し、無駄な探索を減少させて、効率よく最近座標を決定することができる。
【0189】
[3−3.第1実施形態の変形例]
[3−3−1.座標の浮動小数点表示]
第1実施形態においては、固定小数点表示された座標を扱ったが、浮動小数点表示の座標も、固定小数点表示に変換する手段を付加することによって、同様に扱うことができる。
例えば、上記インデクスの具体例で扱った10個の座標は、いずれも仮数部5ビット、指数部3ビットの非正規浮動小数点表現で格納することができる。すなわち、上記各座標を上位3ビットの指数部、下位5ビットの仮数部から成る8ビットで表したインデクスは、図46に示した(T−105)のように構成できる。
また、上記インデクス生成手段、範囲探索手段及び最近座標探索手段は、各座標に関して、固定小数点表示された場合の
(1)上位k桁(長さkの前方列)
(2)上位p+1桁目からp+k桁目までのk桁(先頭からp+1文字目から始まる長さkの部分列)
を得る操作を使用する。なお、(1)は、(2)においてp=0とした場合に当たるから、(2)の機能が実現できれば、浮動小数点表示された座標に対しても上記各手段を適用できる。
【0190】
上述したように、浮動小数点表示された座標から、固定小数点表示した場合の上位p+1桁目からp+k桁目までのk桁(c1 c2 …ck とする)は、次のように決定できる(但し、k>0)。
(1)h={7(指数部の最大値)−指数部}がp+k以下ならば、c1 ,c2 ,…,ck はすべて0とする。
(2)t={12(固定小数点表示の桁数)−指数部}がp以下ならば、c1 ,c2 ,…,ck はすべて0とする。
(3)(1)、(2)以外の場合、
p<hならば、c1 ,c2 ,…,ch−p はすべて0とする。
さらに、t<p+kならば、ch−p+1 ,…,ch−p+5 は仮数部のビット列とし、ch−p+6 ,ch−p+7 ,…,ck はすべて0とする。
p+k≦tならば、ch−p+1 ,…,ck は仮数部の先頭k−(h−p)ビットとする。
p≧hで、さらにt<p+kならば、c1 ,…,ct−p は仮数部の末尾t−pビットとし、ct−p+1 ,…,ck はすべて0とする。
p+k≦tならば、c1 ,…,ck は仮数部の末尾kビットとする。
【0191】
このようにして、浮動小数点表示された座標に対しても、上記第1実施形態と同様の装置を構成することができる。
【0192】
[3−3−2.分割の格納方法]
分割は桁数の列であるから、1項の最大値は座標の桁数であり、また、項数の最大値もやはり座標の桁数になる。この表現に必要な記憶領域をインデクス中の各座標に固定的に割り当てると、多量の記憶領域を要する。例えば、上述したように各座標が12ビット固定小数点表示の場合、各次元の分割は4ビット×12項=48ビットを要する。
【0193】
しかしながら、これらの前方列の多くは一致しているから、多数の分割で一致している前方列の組を表す記号と、それらを除いた後方列の部分との組合せとして格納することにより、記憶領域を節約できる。
これには、桁数列を格納する表を用意して、インデクスには、分割となる桁数列が格納されている表中の位置(桁数列へのポインタ)を格納するとともに、表として前方列が一致する多数の桁数列を効率よく格納するものを採用する。
【0194】
桁数列を格納する表としては、例えば、次のように構成されたものを用いる。
(1)2項以下の桁数列はそのまま格納する。
(2)3項以上の桁数列は、それより1項少ない前方列が同じ表中で格納されている位置(前方列へのポインタ)と末尾の1項との組合せとして格納する。
表中の(先頭からの)位置を記号[]を付けて図示すると、本例のインデクスは桁数列表とともに、図47に示した(T−106)のような形で格納できる。
【0195】
また、桁数列表の別の構成として、図48に示した(T−107)のようなものでもよい。
(1)2項以下の桁数列はそのまま格納する。また(2)に必要な2項以下の後方列も格納する。
(2)2k +1項以上、2k+1 項以下の桁数列は、前方2k 項の数列を格納した位置と、前方2k 項を除いた後方列を格納した位置との組として格納する。
【0196】
要するに、桁数列表としては、前方列が一致する多数の数列を効率よく格納するものならばどのようなものでも良く、表中の位置を桁数列の代りに格納することによって、インデクスに要する記憶容量が節約できる。
【0197】
[3−3−3.領域コードの短縮]
さらに、上記[3−2−2.探索手段に対するインデクスの作用]において説明したように、インデクスの探索の際にキーとして用いられる領域コードは、[a,m]の領域コード、あるいは[a,m]の領域の各座標の末尾の桁のみを変えた座標から、その項数mの分割によって生成される領域コードに限られるから、分割に従って各座標から取られる部分列の最後の桁のみを部分列の代りに連接したものを領域コードとして使用しても、インデクス中の領域群の並び順、及び二分探索の結果として全く同じ作用を得ることができる。
【0198】
すなわち、上述した本例のインデクスに関する領域コードとして、図49に示した(T−108)のような短いコードで同様の効果を得ることができる。
この変形によって、インデクス中に、領域コードを領域群とともに格納する場合の記憶容量が節約されるとともに、二分探索等において領域コードを比較する際の効率が向上する。
【0199】
以上説明したように、第1実施形態は座標、分割、領域コードそれぞれの表現に関して種々変形して実施することができる。
【0200】
[4.第2実施形態]
[4−1.第2実施形態の全体構成]
図10は、第2実施形態の構成を示す機能ブロック図である。
すなわち、第2実施形態は、第1実施形態と同様に、座標データ1を格納するインデクス2及び範囲探索手段4、最近座標探索手段5を備えている。さらに、第1実施形態におけるインデクス生成手段の代りに、インデクスへの座標の追加・削除を行うインデクス変更手段10を備えている。但し、空のインデクスに対して、探索対象となる座標をインデクス変更手段を用いて逐次追加すれば、インデクスを生成できるから、第2実施形態はインデクス生成機能も兼ね備えているといえる。
【0201】
また、第2実施形態においては、インデクスの各座標に付与される元分割の各項はすべて“1”とする。したがって、領域コードは、単に各次元の座標を上位桁から1桁づつ取り、一定の次元順に連接したものになる。
このように、元分割の各項はすべて“1”と決められているから、座標と対になる元分割を表すには、その項数をもってすれば足りる。
【0202】
一方、元分割にこのような制約を設けたことによって、第1実施形態のインデクスにおける各領域群が満たしていた次の条件、すなわち、「項数mの領域が一致する領域群が複数存在するとき、それらの項数m+1の共有領域は一致し、かつ、それらの項数m+1の領域には少なくとも2つ以上の異なる領域がある。」は必ずしも満たされない。
【0203】
但し、第2実施形態では、「項数m+1の共有領域」は常に「項数mの領域」になることから、これら2つの条件のうち第1の条件は満たされており、第2の条件、すなわち、「項数m+1の領域には少なくとも2つ以上の異なる領域がある」ことが保証されないだけである。
【0204】
しかし、前記第1の条件は満たされているので、第2実施形態のインデクスに対して第1実施形態の範囲探索手段、最近座標探索手段をそのまま使用しても、常に正しい探索結果を得ることができる。その理由は、前記第1の条件は、探索手続の正当性の必要条件であり、第2の条件は、探索の効率を左右する条件であるからである。
【0205】
このような理由で、第2実施形態においても、第1実施形態と同じ範囲探索手段及び最近座標探索手段を使用する。従って、以下では、第2実施形態に特徴的なインデクス及びインデクス変更手段に関してのみ説明する。
【0206】
[4−1−1.インデクスの構成]
本実施形態におけるインデクスを用いて、上記第1実施形態の説明で用いた10個の座標を格納すると、例えば、図50に示した(T−109)のような構成になる。
【0207】
第2実施形態のインデクスにおいては、インデクス変更手段が追加・削除を効率的に行なえるように、座標及び元分割の項数すなわち領域群を記憶装置の連続する番地に格納するのではなく、各領域群に加えて二分探索木を構成するためのポインタを格納した二分探索木として実現する。これには、1組の領域群を格納するためのノード領域として、例えば、図11に示したような構成を採用する。
【0208】
なお、二分探索木の実現方法としては、領域群を領域コードの辞書順にソートしたものとして、「領域コード」あるいは「領域コードの前方列」で探索でき、かつ領域群の追加・削除が容易な構成であれば、これに限らず、どのような構成を用いてもよい。
また、探索や変更の効率を向上させるために、hight−balanced binary search tree やself−adjusting binary search tree のような構成を採用してもよい。
【0209】
図12は、本例のインデクスを二分探索木として構成した一例を示したものである。
このように、二分探索木で実現された、領域コード順にソートされた領域群から成るインデクスは、第1実施形態においてそれらの領域群を記憶領域上の連続する番地に格納したインデクスと同じ機能・作用が提供できるだけでなく、インデクスへの領域群の追加・削除が、二分探索木へのノードの追加・削除として効率的に実行できるという特徴がある。
【0210】
[座標の削除]
本実施形態におけるインデクス変更手段は、上記の特徴を利用するとともに、領域群の元分割の項数に対して適切な設定・修正を行なう。例えば、上記インデクス例において、末尾から3番目の領域群(座標)h、すなわち、図50の(T−110)を削除する場合、これを格納しているノードを二分探索木から削除して、図51に示した(T−111)のようなインデクスを表す二分探索木に変更する。
なお、この際、変更前のインデクスにおいて削除した領域群の直前及び直後に位置した領域群A,Bに関して、次の条件をチェックして元分割の項数の修正を行なう。
【0211】
ここで、AとBの領域コードが、先頭から長さ2単位で一致する長さを2nABとする。また、Aとその直前の領域群Cの領域コードが、同様に一致する長さを2nACとする。さらに、Bとその直後の領域群Dの領域コードが、同様に一致する長さを2nBDとする。
但し、Aがないとき nAB=nAC=0、
Bがないとき nAB=nBD=0、
Cがないとき nAC=0、
Dがないとき nBD=0
nAB<nACならば、Aの元分割の項数をnAC+1とする。
nAB≧nACならば、Aの元分割の項数をnAB+1とする。
nAB≧nBDならば、Bの元分割の項数をnAB+1とする。
nAB<nBDならば、Bの元分割の項数をnBD+1とする。
上記の場合、nAB=6、nAC=3、nBD=4だから、A及びBの元分割の項数はともに7に設定される。すなわち、Aに関しては変化しなかったことになる。
【0212】
[座標の追加]
インデクスに座標(領域群)を追加する場合には、まず、追加する座標を、分割の項数が最大の領域群とした場合の領域コードでインデクスを二分探索し、追加位置を決定する。
例えば、上で削除した座標を再び追加する場合、まず、領域群(T−112)としてインデクスに追加する。この状態で二分探索を行なうと、この領域群を追加すべき位置は、上記A、Bの間であると決定される。
なお、図52に示した(T−113)は、この領域群を追加した後のインデクスを示したものであり、追加された領域群をXとする。
【0213】
追加する際に次のチェックを行なって、X、A、Bの元分割の項数の修正を行なう。
すなわち、XとAの領域コードが先頭から長さ2単位で一致する長さを2nXAとする。また、Aの元分割の項数をmA とする。
XとBの領域コードが先頭から長さ2単位で一致する長さを2nXBとする。また、Bの元分割の項数をmB とする。
但し、AがないときnXA=0、BがないときnXB=0。
nXA>nXBのとき、
nXA=mA ならば、(AとXのx座標同士、y座標同士の一致前方列長のうち小さい方)+1を、A,Xの元分割の項数とする。
nXA<mA ならば、nXA+1をXの元分割の項数とする。
nXA=nXBのとき、(必ずmA 、mB より小さい)Xの元分割の項数をnXA+1=nXB+1とする。
nXA<nXBのとき、
nXB=mB ならば、(BとXのx座標同士、y座標同士の一致前方列長のうち小さい方)+1を、B,Xの元分割の項数とする。
nXB<mB ならば、nXB+1をXの元分割の項数とする。
【0214】
この場合、nXA=6、nXB=7、mA =7、mB =7で、BとXのx座標同士の一致前方列長は12、y座標同士の一致前方列長は7だから、B、Xの元分割の項数は7+1=8に設定される。その結果、インデクスは、図53に示した(T−114)のようになる。
【0215】
[元分割の項数の省略]
第2実施形態においては、元分割の各項はすべて“1”とし、その項数のみを格納したが、範囲探索手段及び最近座標探索手段においてこの項数が使用されるのは、それぞれ[3−1−3.範囲探索手段の構成]及び[3−1−4.最近座標探索手段の構成]に示したステップ(6−1)においてのみである。
このステップ(6−1)において、「元分割の項数がmか否か」で判定している条件(意味)は、領域[b,m]を含む領域群がb番地(のノード)に格納されたもの1つだけか否かということである。
【0216】
しかし、この判定は、各領域群に元分割の項数を予め格納しておかなくても、インデクス上でその領域群(座標)と直前及び直後の領域群(座標)との各次元の一致前方列長を調べれば判定できる。
すなわち、直前の座標との各次元の一致前方列長のうち最小のもの、及び直後の座標との各次元の一致前方列長のうち最小のもののうち大きい方(=n)がmより小さいか否かで判定できる。なお、上述のインデクス更新手段の手続からもわかるように、n+1がその領域群(座標)の元分割の項数に一致する。
【0217】
[4−2.第2実施形態の効果]
このように、第2実施形態においては、領域コードが必要となるたびに、各次元の座標を先頭から1桁または一定の桁数づつ取り、定められた順序で連接して領域コードを生成(計算)することによって、インデクスの各ノードには座標のみを格納するという効率的な構成をとることが可能である。
【0218】
また、この構成においては、上記インデクス変更手段における元分割の項数の修正は省略でき、インデクスは単なる領域コードをキーとしてソートされた座標から成る二分探索木として追加・削除・探索を行なえばよい。
なお、領域コードの比較は、先頭から順次必要な長さだけ計算(生成)して行なうことができるので、元分割の項数を省略しても何ら効率の劣化を招くことはない。
【0219】
また、対象となる座標が固定的な場合、第2実施形態のインデクスを所定の座標に対して生成した後、二分探索木から第1実施形態で用いた記憶領域上の連続番地に移して格納し、探索時のインデクスのサイズをコンパクトにすることもできる。もちろん、最初から第1実施形態のように連続番地上でソーティングを行なってインデクスを生成してもよい。
【0220】
[5.第3実施形態]
[5−1.第3実施形態の構成]
[5−1−1.インデクスの構成]
第3実施形態のインデクスは、第1実施形態と同様の構成を有している。それゆえ同一のインデクス生成手段を備えているが、インデクスが探索手段に提供する作用として新たに次の作用を備えている。すなわち、
(4)ある番地aの領域群のある項数mの領域を、同じく項数mの領域とする領域群の数を得る。
これは、第1実施形態におけるインデクスの作用(3)を実行しながら、数をカウントすれば得られるが、そのような実現方法では探索手段の効率化に寄与する可能性は小さい。
【0221】
そこで、本実施形態においては、次のようなより効率的な実現方法によってその作用を提供する。
すなわち、番地aより前の番地で、その番地以前には領域[a,m]を項数mの領域とする領域群は存在しないことが保証されている番地を“p”、番地aより後の番地で、その番地以後には領域[a,m]を項数mの領域とする領域群は存在しないことが保証されている番地を“q”とする。
【0222】
そして、番地a以前で領域[a,m]を項数mの領域とする領域群が格納されている最小の番地“s”を、次のようにして二分探索によって決定する。
(1)r←p、s←aとする。
(2)番地t←(r+u)/2(小数点以下切捨)とする。
(3)t=sなら終了。
t<sで、領域[t,m]=領域[a,m]ならば、s←t
領域[t,m]≠領域[a,m]ならば、r←t
(4)(2)へ戻る。
【0223】
同様に、番地a以後で領域[a,m]を項数mの領域とする領域群が格納されている最大の番地“u”を、次のようにして決定する。
(1)u←a、r←qとする。
(2)番地t←(u+r)/2(小数点以下切捨)とする。
(3)u=tなら終了。
u<tで、領域[t,m]=領域[a,m]ならば、u←t
領域[t,m]≠領域[a,m]ならば、r←t
(4)(2)へ戻る。
【0224】
このようにして決定された“s”以後かつ“u”以前の番地に格納された領域群は、すべて領域[a,m]を項数mの領域としている。したがって、それらの個数は、u−s+1個と計算される。
【0225】
以上の手続によれば、第1実施形態に述べたインデクスの作用(3)の実現方法のように、該当する番地を逐一列挙することなく、二分探索によって効率的に最小、最大の番地を決定することができる。
さらに、この決定にもとづいて、最小の番地“s”から最大の番地“u”までの領域群(座標)を単に列挙すれば、上記インデクスの作用(3)が、第1実施形態に述べた実現方法よりもずっと効率的に実現できる。
【0226】
このように、インデクスが、領域群[a,m]を項数mの領域とする領域群の数およびその最小、最大の番地を得る機能を備えていることを前提にして、第3実施形態の範囲探索手段及び最近座標探索手段は次のような手続によって構成される。
【0227】
[5−1−2.範囲探索手段の構成]
本実施形態における範囲探索手段は、次のようなステップから成っている。 (1)結果リストを初期化する。
(2)領域キューを初期化する。
(3)インデクスの任意のデータ(例えば、0番地)を選び、項数0と組み合わせて[0,0]を処理対象とする。
(3−1)共有領域[0,1]が計算できない場合(元分割の項が0個)、0番地の座標が指定範囲に含まれていれば、結果リストに加える。
(3−2)共有領域[0,1]が指定範囲に含まれている場合、インデクス中の全データ(番地)を結果リストに加える。
(3−3)共有領域[0,1]が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、[0,1]を領域キューに追加する。
(4)領域キューが空なら終了。空でなければ先頭要素を処理対象[a,m]として取り出し、領域キューから削除する。
(5)共有領域[a,m]の各座標の末尾に、桁数字0、1をそれぞれ追加して生成される2の2乗=4つの領域のそれぞれについて、次の(6)を行なう。
(6)その領域を項数mの領域とする領域群がインデクス中に存在する場合に限り、その1つの番地を“b”として、次の条件付きステップのいずれかを行なう。
なお、インデクスを二分探索して“b”を得る過程で、bより小さい番地のうち最後に領域コードの比較を行なった番地を“p”、bより大きい番地のうち最後に領域コードの比較を行なった番地を“q”とする。
また、二分探索を開始する前の“p”、“q”の初期値は、それぞれインデクスの(最小番地−1)及び(最大の番地+1)に設定しておく。
さらに、(p+q)/2番地の領域コードが、ステップ(5)で作成された領域の領域コードを前方列としていれば探索を終了し、その番地を“b”とする。それ以外で前者が後者より小さければ、(p+q)/2を新たな“p”とし、前者が後者より大きければ、(p+q)/2を新たな“q”とする。
(6−1)共有領域[b,m+1]が計算できない場合(元分割の項がm個)、b番地の座標が指定範囲に含まれていれば、結果リストに加える。
(6−4)共有領域[b,m+1]が指定範囲と共通部分を有しない場合は、その領域に関して行なうべき処理はない。
(6−1)、(6−4)に該当しない場合、p,qを用いて、上述のような手続で領域[b,m]を項数mの領域とする領域群が格納されている最小の番地“s”と最大の番地“u”を決定してから、次の条件をチェックする。
(6−2)共有領域[b,m+1]が指定範囲に含まれている場合、b番地と同じく領域[b,m]を項数mの領域とする領域群を格納した番地を全て結果リストに加える。これには、s以上u以下の番地を全て加えればよい。
(6−3)共有領域[b,m+1]が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、
u−s<kすなわち、領域[b,m]を項数mの領域とする領域群がk個以下ならば、それらの座標を全てチェックして、指定範囲に含まれているものを結果リストに加える。
一方、u−s≧kすなわち、領域[b,m]を項数mの領域とする領域群がk個より多いならば、[b,m+1]を領域キューに追加する。
(7)(4)へ戻る。
【0228】
[5−1−3.最近座標探索手段の構成]
本実施形態における最近座標探索手段は、次のようなステップから成っている。
(1)インデクス中の任意のデータ(例えば、0番地)を最近座標候補“p”とし、指定座標との距離を“r”とする。
(2)領域スタックを初期化する。
(3)0番地を項数0と組み合わせて[0,0]を処理対象とする。共有領域[0,1]が計算できる場合(元分割の項が1個以上)には、[0,1]を領域スタックに追加する。
(4)領域スタックが空なら終了。空でなければ先頭要素を処理対象[a,m]として取り出し、領域スタックから削除する。
(5)共有領域[a,m]と指定座標との距離がr以上の場合、(4)に戻る。一方、r未満の場合には、共有領域[a,m]の各座標の末尾に、桁数字0、1をそれぞれ追加して生成される2の2乗=4つの領域のそれぞれについて、次の(6)を行なう。
(6)その領域を項数mの領域とする領域群がインデクス中に存在する場合に限り、その1つの番地を“b”として、次の条件付きステップのいずれかを行なう。
なお、インデクスを二分探索してbを得る過程で、bより小さい番地のうち最後に領域コードの比較を行なった番地を“p”、bより大きい番地のうち最後に領域コードの比較を行なった番地を“q”とする。
また、二分探索を開始する前の“p”、“q”の初期値は、それぞれインデクスの(最小番地−1)及び(最大の番地+1)に設定しておく。
さらに、(p+q)/2番地の領域コードが、ステップ(5)で作成された領域の領域コードを前方列としていれば探索を終了し、その番地を“b”とする。それ以外で前者が後者より小さければ、(p+q)/2を新たな“p”とし、前者が後者より大きければ、(p+q)/2を新たな“q”とする。
(6−1)共有領域[b,m+1]が計算できない場合(元分割の項がm個)、b番地の点と指定座標との距離がr未満であれば、bを新たな最近座標候補“p”とし、その距離を新たな“r”とする。このとき、さらにr=0なら処理を終了する。
(6−4)共有領域[b,m+1]と指定座標との距離がr以上である場合は、その領域に関して行なうべき処理はない。
(6−1)、(6−4)に該当しない場合、p、qを用いて、上述のような手段で、領域[b,m]を項数mの領域とする領域群が格納されている最小の番地“s”と最大の番地“u”を決定する。
(6−5)u−s<kすなわち領域[b,m]を項数mの領域とする領域群がk個以下ならば、それらの座標をすべてチェックして、指定座標pとの距離が最小のものを選び、その距離がrより小さければその座標を新たな最近座標候補“p”とし、その距離を新たな“r”とする。
(6−5)に該当しない場合、次の条件をチェックする。なお、この場合、(6−2)、(6−3)のいずれかには必ず該当する。
(6−2)共有領域[b,m+1]が指定座標から距離r以内(未満)の範囲に含まれている場合、bを新たな最近座標候補“p”とし、b番地の点と指定座標との距離を新たな“r”とする。さらに、[b,m+1]を領域スタックに追加する。
(6−3)共有領域[b,m+1]が指定座標から距離r以内(未満)の範囲に含まれてはいないが、指定座標との距離はr未満である場合、[b,m+1]を領域スタックに追加する。
(7)(4)へ戻る。
【0229】
[5−2.インデクスの新たな作用を利用した探索手段の効果]
上記各探索手段において、第3実施形態のインデクスが新たに提供する作用(4)は、ステップ(6)において、領域[b,m]を項数mの領域とする領域群の数が所定数k以下であるか否かを判定し、k以下である場合には、それらの座標が探索結果あるいはその新たな候補となるか否かをチェックするという手続に使用されている。
【0230】
この場合、領域[b,m]を項数mの領域とする領域群、すなわち共有領域[b,m+1]が同一である領域群の座標は、探索結果あるいはその新たな候補となる可能性があるので、第1実施形態では、範囲探索手段のステップ(6−3)、最近座標探索手段のステップ(6−2)、(6−3)において[b,m+1]を領域キューまたは領域スタックに追加し、後にそれを取り出して再びステップ(5)において複数のより細分化された領域を生成するようになっていた。
【0231】
これに対して、本実施形態においては、所定数kを適切に設定すれば、領域[b,m]に含まれる探索結果あるいはその新たな候補となる可能性のある座標が少数の場合には、それらの座標についてその判定をその場で行ない、領域[b,m]を更に複数の領域に分割することを避けることができる。
【0232】
また、上記の各探索手段においては、領域あるいは共有領域に関しても、探索の過程で座標と同様の操作(包含の判定、距離の計算等)が実行されるから、対象となる座標の数がある程度少なくなったら、それらを含む領域をそれ以上分割せず、最終的な判定操作を行なうことで、分割に伴うオーバーヘッドを回避することができる。
【0233】
[5−3.第2実施形態への適用]
本実施形態は、上記第2実施形態のようにインデクスが二分探索木で構成されている場合でも、上記(4)の作用を次のようにして提供することができる。 すなわち、二分探索木の各ノードに部分区間長のフィールドを設け、各ノードに対応する区間の長さをすべて“1”として、「区間管理方法」によって部分区間長フィールドを設定・管理する。
【0234】
このとき、各ノードに対応づけられた区間の両端(同一)は、そのノードに格納された領域群に対応する領域コードを辞書順にソートしたインデクス中でのそのノード(領域コード)の順位を表している。従って、この順位を上述の手続における番地の代りに用いれば、第2実施形態と同様のインデクスに対して、本実施形態の範囲探索手段及び最近座標探索手段を適用することができる。
【0235】
なお、前記「区間管理方法」については、本出願人が別途特許出願した明細書に詳述されているので、説明は省略する。
【0236】
[6.第4実施形態]
[6−1.第4実施形態の構成]
[6−1−1.インデクスの構成]
第4実施形態のインデクスは、以下に述べるように構成されている。すなわち、インデクスの各領域群の元分割のうち、先頭n項は、上記第1実施形態におけるインデクスの元分割の条件、「項数mの領域が一致する領域群が複数存在するとき、それらの項数m+1の共有領域は一致し、かつ、それらの項数m+1の領域には少なくとも2つ以上の異なる領域がある」を満たしており、n+1項以降は、上記第2実施形態におけるインデクスと同様に、すべて“1”である。但し、nは領域群毎に異なってもよい。
【0237】
第2実施形態で述べたように、各項が“1”の部分については元分割にそれを表現する必要はなく、領域コードは、n+1項以降はn項までの和だけの長さ(桁数)を先頭から取り去った各次元の座標から一定の次元順に1桁づつ採って、n項までの分割に基づいて生成された領域コードに追加すればよい。なお、全ての桁を取り尽くした次元からは、それ以降追加しない。
【0238】
本実施形態におけるインデクスを用いて、上記第1実施形態の説明で用いた10個の座標を格納すると、例えば、図54に示した(T−115)のような構成になる。
【0239】
また、本実施形態は、第2実施形態と同様にインデクス変更手段を備えており、インデクスは効率良く変更できるように二分探索木で実現される。第3実施形態で述べたように、各ノードに部分区間長フィールドを設けて区間管理方法を適用することにより各領域群に順位を付与し、これを用いて、項数mの領域が同一の領域群の数を、それに対応する領域コードを前方列とする領域コードを持つ領域群の数として計算できる構成を採っている。
【0240】
したがって、範囲探索手段及び最近座標探索手段に関しては、第1実施形態及び第3実施形態に示した手続をそのまま用いることができる。また、インデクス変更手段は、インデクスへの座標の追加及びインデクスからの領域群(座標)の削除を扱う。
以下、それぞれの場合の手続について、説明する。
【0241】
[インデクスへの座標の追加]
(1)新たな座標を挿入すべき位置を決定するため、インデクスを二分探索する。二分探索の際の領域コードの比較は、新たな座標から比較すべきインデクス中の領域群の元分割を使用して領域コードの前方列を順次生成し、領域群の座標から生成される領域コードの前方列と比較する。そして、インデクス中の領域群で元分割に表示された項数nまでの領域コードが一致するものがみつかったら探索を中止する。
【0242】
(2)(1)の結果、元分割に表示された項数nまでの領域コードが一致する領域群(座標)がみつかった場合、その元分割のn+1項以降をすべて“1”とした分割に基づいて新たな座標から生成した領域コードをキーとして二分探索を継続し、その結果決定された位置に、新たな座標と上記の項数nの元分割から成る領域群を挿入する。但し、各次元において分割の和が座標の桁数を超える場合は、元分割のn+1項以降をすべて“0”とする。
【0243】
(3)(2)で挿入した領域群と項数nの領域を同じくする領域群の数を調べ、所定数“c”より大きければ、それらの領域群の元分割にn+1項目を加えて、元分割を分割として生成される領域コードを同じくする領域群の数がcより多くならないようにする。
また、n項の元分割を分割として生成される領域コードを同じくする領域群の元分割にn+1項目を追加して(n+2項目以降はすべて1として)、それに対応する領域コードによってそれらの領域群を並べ替える手順は、第1実施形態のインデクス生成手段におけるステップ(3)〜(6)と同様である。
【0244】
(4)(1)の結果、元分割に表示された項数nよりも小さい“k”について、項数kまでの領域コードは一致するが、項数k+1の領域コードは一致しない領域群のうち、最大の“k”を持つものが決定された場合((2)以外の場合は、すべてkが決定できる)、二分探索によって決定された位置に、新たな座標と上記領域群の元分割のk項までを元分割として組合せた領域群を追加する。
【0245】
さらに、その領域群を含む、項数kまでの領域コードが一致する領域群の元分割を一旦項数kまで短縮したうえで、それらの領域群に関して、第1実施形態のインデクス生成手段と同様の手順でk+1項以降の元分割を追加する。
【0246】
その際、伸長した元分割を分割とする領域コードが一致する領域群の数が、所定数c以下になったら元分割の追加を停止する。すなわち、第1実施形態のインデクス生成手段のステップ(7−3)における条件、p<qをq−p+1≦c(q−p<c)に変更した手順を用いる。
【0247】
[インデクスからの座標の削除]
(1)指定した座標の削除は、対応する領域群を表すノードをインデクスの二分探索木から削除すればよい。
(2)削除後のインデクスにおいて、その領域群の元分割を分割としてその座標から生成した領域コードを、同じく元分割を分割とする領域コードとする領域群の数が、一定数dより小さければ、それらの元分割の末尾の1項を削除して、以降の項がすべて“1”だとした場合の領域コードに基づいて、それらの領域群を並べ替える。
【0248】
このように、追加のステップ(2)に該当する場合、及び削除のステップ(2)に該当しない場合は、二分探索木への単なる追加、削除以外の手間は発生しないので、インデクスの変更はきわめて効率的である。
一方、インデクスは元分割の項数より少ない項数mに関しては、「項数mの領域が一致する領域群が複数存在するとき、それらの項数m+1の共有領域は一致し、かつ、それらの項数m+1の領域には少なくとも2つ以上の異なる領域がある」という条件が満たされるので、探索が効率的に実行できる。
【0249】
[7.第5実施形態]
第5実施形態は、第1実施形態と同じインデクスを用いて、より効率的な最近座標探索手段を提供するものである。
すなわち、第1実施形態の最近座標探索手段においては、領域を記憶するのに単なるスタックを使用していた。これに対して、本実施形態では、このスタックに代えて、各領域に指定座標との距離を付与し、この距離が最小のものが根となるように構成されたヒープ(整列二分木)を用いる。
なお、ヒープ(整列二分木)については、Aho, Hopcroft, Ullman ” The Design and Analysis of Computer Algorithms ” (Addison Wesley, 1974) pp87−92.に詳述されている。
【0250】
すなわち、指定座標との距離をキーとする「領域ヒープ」を使用した最近座標探索手段は、次のようなステップから成っている。
(1)インデクスの任意のデータ(例えば、0番地)を最近座標候補“p”とし、指定座標との距離を“r”とする。
(2)領域ヒープを初期化する。
(3)0番地を項数0と組み合わせて[0,0]を処理対象とする。
共有領域[0,1]が計算できる場合(元分割の項が1個以上)、共有領域[0,1]を指定座標との距離Rをキーとして領域ヒープに追加する。
(4)領域ヒープが空なら終了。空でなければ先頭要素及びその指定座標との距離を、処理対象[a,m]及びRとして取り出し、領域ヒープから削除する。
(5)共有領域[a,m]と指定座標との距離Rがr以上の場合は終了する。 一方、r未満の場合、共有領域[a,m]の各座標の末尾に、桁数字0、1をそれぞれ追加して生成される2の2乗=4つの領域のそれぞれについて、次の(6)を行う。
(6)その領域を項数mの領域とする領域群がインデクス中に存在する場合に限り、その1つの番地をbとして、次の条件付きステップのいずれかを行なう。 (6−1)共有領域[b,m+1]が計算できない場合(元分割の項がm個)、b番地の座標と指定座標との距離がr未満であれば、bを新たな“p”とし、その距離を新たな“r”とする。このとき、さらにr=0なら処理を終了する。
(6−2)共有領域[b,m+1]が指定座標から距離r以内(未満)の範囲に含まれている場合、bを新たな“p”とし、b番地の座標と指定座標との距離を新たな“r”とする。さらに、共有領域[b,m+1]を指定座標との距離Rをキーとして領域ヒープに追加する。
(6−3)共有領域[b,m+1]が指定座標から距離r以内(未満)の範囲に含まれてはいないが、指定座標との距離はr未満である場合、共有領域[b,m+1]を指定座標との距離Rをキーとして領域ヒープに追加する。
(6−4)共有領域[b,m+1]と指定座標との距離がr以上である場合は、その領域に関して行うべき処理はない。
(7)(4)へ戻る。
【0251】
本実施形態における最近座標探索手段と第1実施形態における最近座標探索手段との主な違いは、上記ステップ(5)に特徴的に現われている。
すなわち、第1実施形態の最近座標探索手段で用いられた領域スタックにおいては、第1実施形態のステップ(4)(5)において取り出したスタックの先頭の領域が指定座標からr以遠にあったとしても、スタックの残りの領域がすべてr以遠であるとは必ずしもいえない。したがって、スタックの残りの領域をすべて取り出してチェックする必要があった。
【0252】
これに対して、本実施形態の最近座標探索手段においては、ヒープの根となった領域は、指定座標との距離がヒープ中の領域のうちで最小であることが保証されているから、この距離がr以上であれば、これらすべての領域に含まれる座標を調べてもrより近いものは見い出されない。したがって、ステップ(5)の判定によって、「共有領域[a,m]と指定座標との距離Rがr以上である」と判定された場合には、その時点で探索処理を終了してよい。
【0253】
このように、本実施形態の最近座標探索手段によれば、第1実施形態の最近座標探索手段と比較しても、さらに効率的に最近座標を決定することができる。
【0254】
なお、本実施形態で用いたヒープの代りに、領域を指定座標との距離をキーとして格納し、指定座標との距離が最小の領域を決定・削除できるデータ構造であれば何を用いてもよい。
そのような機能を提供するデータ構造は、priority queueを実現するデータ構造として多数知られている。このpriority queueについてはJones, D.W. An Empirical Comparison of Priority−Queue and Event−Set Implementations. Commun. ACM 29, 4 (April 1986), 300−311. に詳述されている。
【0255】
なお、第3実施形態の最近座標探索手段においても、同様に、領域スタックの代わりに指定座標との距離をキーとする領域ヒープを用いて、共有領域を追加する際に指定座標との距離をキーとして追加し、ステップ(4)において、ヒープ中で指定座標との距離が最小の領域を処理対象として取り出し、ステップ(5)において、その距離がr以上と判定された場合には、即座に探索を終了してよい。
【0256】
このように、まだ処理を要するかもしれない領域を、指定座標との距離をキーとしてpriority queueに格納することによって、処理が不要な多数の領域に対して、「処理が不要である」という判断を一括して行うことができるので、それらに対する処理を効率的に省略でき、探索時間を大幅に短縮することができる。
【0257】
[8.第6実施形態]
第6実施形態は、本発明を浮動小数点表示の座標に適用したものである。
【0258】
[8−1.インデクスの構成]
本実施形態におけるインデクスとしては、探索対象である各座標データを、指数部3ビット、仮数部5ビットの浮動小数点(指数部“000”の場合のみ、非正規表現を許す)で表した座標データを、後述する指数部領域コード及び仮数部領域コードの辞書順(昇順)に並べたものを用いる。
【0259】
すなわち、本実施形態においては、図55の(T−116)に示したように、指数部3ビット、仮数部5ビットの浮動小数点で表された各座標データについて、まず、指数部の桁数字(ビット)列に関する元分割及び指数部領域コードを計算し、次に、仮数部に関する元分割及び仮数部領域コードを計算する。
そして、指数部領域コードを第1キーとし、仮数部領域コードを第2キーとして、第1キー及び第2キーをこの順に比較し、第1キーが等しい場合のみ、第2キーを比較することによって座標データの大小を決定し、各座標データをその順にソートしたものをインデクスとする。
【0260】
なお、図55の(T−116)に示した座標データは、第2実施形態で用いた図50の(T−109)に示した座標データa〜jを、上位3ビットの指数部、下位5ビットの仮数部からなる8ビットで表したものである。
また、本実施形態においては、指数部及び仮数部の元分割及び領域コードとして、元分割の各項をすべて“1”とし、元分割の項数も省略したものを使用する。但し、(T−116)に示したインデクスにおいては、参考のために、元分割の項数を()で示した。また、指数部の座標は同一のものが複数存在するが、その場合の指数部領域コードは座標桁数字をすべて使用し、元分割の項数は各座標の桁数とする。
【0261】
続いて、図55の(T−116)に示したインデクスについて、より詳細に説明する。
すなわち、図50の(T−109)に示した座標データaは、x座標が“000000010001”、y座標が“000001100000”であり、これを上位3ビットの指数部、下位5ビットの仮数部からなる8ビットで表すと、x座標の指数部が “000 ”、仮数部が“10001 ”、y座標の指数部が“010 ”、仮数部が“11000 ”となる。 また、本実施形態においては、元分割の各項はすべて“1”とされているので、指数部領域コードは、x座標の指数部及びy座標の指数部から1桁ずつとって連接することによって得られ、本例においては“000100”となる。一方、仮数部領域コードは、x座標の仮数部及びy座標の仮数部から1桁ずつとって連接することによって得られ、本例においては“1101000010”となる。
同様にして、図50の(T−109)に示した座標データb〜jについて、指数部領域コード及び仮数部領域コードを求めると、図55の(T−116)のようになる。
【0262】
この場合、座標データa〜cについては、第1キーである指数部領域コードはいずれも“000100”で、互いに等しいので、第2キーである仮数部領域コードを比較し、a→b→cの順に並ぶと決定される。
また、座標データd〜fについても、第1キーである指数部領域コードはいずれも“000110”で、互いに等しいので、第2キーである仮数部領域コードを比較し、d→e→fの順に並ぶと決定される。
【0263】
次に、座標データg〜iについてみると、第1キーである指数部領域コードはいずれも“100100”で、互いに等しいので、第2キーである仮数部領域コードを比較し、g→h→iの順に並ぶと決定される。
ところが、座標データjの指数部領域コードは“100000”となり、座標データg〜iの指数部領域コード“100100”より小さいので、座標データjは、座標データg〜iより前に並ぶことになる。
【0264】
なお、図55の(T−116)において、参考のために示した元分割の項数は、本実施形態において、浮動小数点表示された座標データを辞書順に並べるために参照する元分割の項数を示したものである。
例えば、座標データa〜cについては、指数部領域コードは互いに等しいので、その元分割の項数は各座標の桁数である“3”となる。また、第2キーである仮数部領域コードを比較すると、座標データaと座標データbとは7桁目で異なっているので、元分割の項数は“4”となる。したがって、座標データa及び座標データbについては、参照する元分割の項数の和はそれぞれ“7”となる。
【0265】
これに対して、座標データcについては、指数部領域コードは座標データa、bと等しいので、その元分割の項数は“3”となるが、仮数部領域コードを比較すると、座標データbと座標データcとは3桁目で異なっているので、元分割の項数は“2”となる。したがって、座標データcについては、参照する元分割の項数の和は“5”となる。
【0266】
さらに、座標データjについてみると、その指数部領域コードは他の座標データの指数部領域コードと異なっており、座標データg〜iと比較すると、4桁目で異なっているので、その元分割の項数は“2”となる。また、座標データjの場合、仮数部領域コードを比較する必要はないので、参照する元分割の項数の和は“2”となる。
【0267】
このように、本実施形態のインデクスを用いた場合、元分割の項数は、図50の(T−109)に示した元分割の項数より小さくなるので、領域コード(指数部領域コード+仮数部領域コード)の桁数を低減することができ、インデクスの生成や探索の効率が大幅に向上する。
【0268】
なお、図55の(T−116)に示したインデクスに用いられている領域コードは、座標コードの表現方法の違いを反映して、図50の(T−109)に示したインデクスに用いられている領域コードとは異なる。それゆえ、同じ座標データa〜jの並び順に一部異なるところがあるが、この違いはインデクスの生成や探索の手続の構成にはなんら影響しない。この点について、さらに詳しく説明する。
【0269】
[8−2.浮動小数点表示された座標データとその座標データが示す範囲]
浮動小数点表示された座標データは、その指数部nのコードが、
n=000の場合、0以上25 未満
n≠000の場合、2n ×25 以上2n+1 ×25 未満
の区間(範囲)に対応づけることができる。すなわち、仮数部のコードがどのようなものであっても、その座標値は上記nに対応づけられた区間に含まれているる。
【0270】
それゆえ、元分割の項数が“3”の指数部領域コードは、図56又は図57に示した格子(マス目)の1つに対応づけられる。例えば、図55の(T−116)に示したインデクス中の座標データgの指数部領域コード“100100”は、x座標が“100”、y座標が“010”であるので、図56又は図57の“100100”の格子に対応づけられる。また、指数部領域コード“1000”は、x座標が“10”、y座標が“00”であるので、これに対応する領域は、図56又は図57の斜線部で示した4つの格子からなる。
【0271】
このように、指数部のみを座標(の上位桁)とみたてた場合、単に座標軸のスケールが対数になったのと同じである。但し、非正規表現を許すn=000の扱いが例外的になる。したがって、上記第1実施形態〜第5実施形態における座標データの取扱いを、すべて座標データの指数部に適用することができる。
【0272】
また、上述したように、指数部領域コード“1000”に対応する領域は、図56又は図57の斜線部で示した4つの格子からなるが、これは、各座標軸のスケールが異なるだけで、座標コードの順序及び領域の配置は、同じ座標コードを3桁(ビット)固定小数点表示の2進整数と解釈した場合、図58となんら変わらない。
【0273】
さらに、仮数部は、上記指数部が表す区間を、25 =32等分した区間の始点(左端)を表すから、各座標の指数部を上位桁とし、仮数部を下位桁とする8桁(ビット)の座標コードとし、指数部領域コードの末尾に、もしあれば、仮数部領域コードを連接して領域コードとした場合、座標コードの順序及び領域コードに対応する領域の配置は、同じ座標コードを8桁(ビット)の固定小数点表示の整数と解釈した場合となんら変わらない。
【0274】
したがって、本発明を浮動小数点表示の座標に適用した本実施形態においても、上記第2実施形態と同様に、インデクス生成手段、範囲探索手段、最近座標探索手段を構成することができる。第2実施形態との相違は、最近座標探索手段において、座標コードから距離を計算する手続であるが、これは、最近座標探索手段の構成(第1実施形態[3−1−4]のステップ(1)〜(7))には、なんら影響しない。もちろん、最近座標探索手段として、上記第5実施形態のステップ(1)〜(7)を用いても良い。
【0275】
[8−3.浮動小数点表示を座標コードとして使用する効果]
一般に浮動小数点表示を使用することの利点は、少ない桁数で広い範囲の値を表し得ることであるが、本実施形態においても、上記の各実施形態で各座標を12ビットの固定小数点表示していたのに対して、座標データを表すのに必要な桁数は8ビットに減少している。
【0276】
また、本実施形態に固有の効果は、単に浮動小数点表示したことによって座標データの桁数が減少しただけではなく、領域コード(指数部領域コード+仮数部領域コード)の桁数が減少し、インデクスの生成や探索の効率が向上することにある。説明に用いた座標データについて見ると、a〜jのすべてのデータにおいて、領域コードの長さ(元分割の項数)が減少している。
【0277】
[9.他の実施形態]
本発明は、浮動小数点表示のみならず、次の条件を満たす座標コードであれば、いかなる座標コードにも適用することができる。すなわち、座標コードの辞書順と、その座標コードが表す値のソート順(座標軸上での並び順)が一致していることが必要である。なお、上記第1実施形態〜第5実施形態に示した固定小数点表示や、第6実施形態に示した浮動小数点表示は、この条件を満たす座標コードの例である。
【0278】
したがって、第6実施形態に示した浮動小数点表示の座標において、指数部がさらに浮動小数点表示されているものや、仮数部の先頭の1を除く部分がさらに浮動小数点表示されているものも同様に扱うことができる。但し、この場合も、第6実施形態で述べたように、座標(領域)コードから距離を計算する手続は、適宜変更する必要がある。
【0279】
また、負数の扱いに関しては、座標コードの辞書順の定義及び比較手続を負数の表現方法に合わせて修正するか、正数に変換した後の座標コードによってインデクスを生成する等によって、本発明を適用することができる。
さらに、上記条件が満たされていれば、扱う座標コードが表す値の組が直交座標系でなくてもかまわない。例えば、極座標系に対しても、(1)指定範囲と領域の包含関係及び共通部分の有無を判定する手続、(2)座標コード及び領域コードから距離を計算する手続、を変更すれば、上記各実施形態のインデクス構成、インデクス生成手段、インデクス変更手段、範囲探索手段、最近座標探索手段を適用することができる。
【0280】
【発明の効果】
以上述べた様に、本発明によれば、データ領域の削減が可能で、しかも矩形探索及び最近傍図形探索の高速化を可能としたデータ管理装置及びデータ管理方法を提供することができる。
【図面の簡単な説明】
【図1】本発明の第1実施形態の構成を表す機能ブロック図
【図2】本発明のインデクスにおける領域群の格納形式を示す図
【図3】第1実施形態における「項数2の共有領域」と「項数2の領域」を示す図
【図4】第1実施形態のインデクス生成手段における処理の流れの前半部を示すフローチャート
【図5】第1実施形態のインデクス生成手段における処理の流れの後半部を示すフローチャート
【図6】第1実施形態の範囲探索手段における処理の流れの前半部を示すフローチャート
【図7】第1実施形態の範囲探索手段における処理の流れの後半部を示すフローチャート
【図8】第1実施形態の最近座標探索手段における処理の流れの前半部を示すフローチャート
【図9】第1実施形態の最近座標探索手段における処理の流れの後半部を示すフローチャート
【図10】本発明の第2実施形態の構成を表す機能ブロック図
【図11】第2実施形態において、1組の領域群を格納するためのノード領域の構成を示す図
【図12】第2実施形態におけるインデクスを二分探索木として構成した一例を示す図
【図13】quad−tree法によるデータ管理方法の一例を示す図であって、(A)は、全範囲中の分割された各範囲を示す図、(B)は、(A)に示した各範囲を木構造のノードに対応付けた図
【図14】(T−1)〜(T−4)を示す図
【図15】(T−5)〜(T−7)を示す図
【図16】(T−8)〜(T−10)を示す図
【図17】(T−11)〜(T−15)を示す図
【図18】(T−16)〜(T−17)を示す図
【図19】(T−18)〜(T−20)を示す図
【図20】(T−21)〜(T−24)を示す図
【図21】(T−25)〜(T−29)を示す図
【図22】(T−30)を示す図
【図23】(T−31)を示す図
【図24】(T−32)を示す図
【図25】(T−33)〜(T−34)を示す図
【図26】(T−35)を示す図
【図27】(T−36)〜(T−37)を示す図
【図28】(T−38)を示す図
【図29】(T−39)〜(T−40)を示す図
【図30】(T−41)を示す図
【図31】(T−42)〜(T−43)を示す図
【図32】(T−44)を示す図
【図33】(T−45)〜(T−47)を示す図
【図34】(T−48)〜(T−53)を示す図
【図35】(T−54)〜(T−57)を示す図
【図36】(T−58)〜(T−62)を示す図
【図37】(T−63)〜(T−67)を示す図
【図38】(T−68)〜(T−72)を示す図
【図39】(T−73)〜(T−77)を示す図
【図40】(T−78)〜(T−82)を示す図
【図41】(T−83)〜(T−87)を示す図
【図42】(T−88)〜(T−92)を示す図
【図43】(T−93)〜(T−96)を示す図
【図44】(T−97)〜(T−100)を示す図
【図45】(T−101)〜(T−104)を示す図
【図46】(T−105)を示す図
【図47】(T−106)を示す図
【図48】(T−107)を示す図
【図49】(T−108)を示す図
【図50】(T−109)〜(T−110)を示す図
【図51】(T−111)〜(T−112)を示す図
【図52】(T−113)を示す図
【図53】(T−114)を示す図
【図54】(T−115)を示す図
【図55】(T−116)を示す図
【図56】第6実施形態のインデクス中のある指数部領域コードに対応する範囲を示す図
【図57】第6実施形態のインデクス中のある指数部領域コードに対応する範囲を示す図
【図58】図56又は図57に示した範囲を、3桁の固定小数点表示の2進整数と解釈した場合を示す図
【符号の説明】
1…座標データ
2…インデクス
3…インデクス生成手段
4…範囲探索手段
5…最近座標探索手段
10…インデクス変更手段
Claims (15)
- n次元部分空間内の領域を示す座標データを、所定の領域コードに基づいてソートした状態で複数領域分格納したインデクスと、このインデクス中から所定の領域を示す座標データを探索する探索手段と、前記インデクスを生成するインデクス生成手段を備え、
前記インデクス中における各領域を示す各座標データは、有限で離散的なn次元部分空間内の点または領域を表す座標データを、各次元の座標をそれぞれ2進表示した固定長ビット列によって表示し、各次元の座標の上位桁である前方列から成る数字列によって、それと同一の上位桁を有するn次元座標データを全て含み、かつ、上位桁が異なる座標データは全く含まないn次元部分空間内の領域である部分集合に対応づけて構成され、
前記インデクス生成手段は、前記インデクスに含まれる各領域を示す座標データについて、各座標データを構成する固定長ビット列の上位桁から各次元ごとに予め定めておいた所定桁数ずつ順次取り出して成る複数の部分列を、予め定めておいた各次元の順に連接することにより新たな2進表示の固定長ビット列の数値からなる領域コードを生成し、この領域コードを所定の辞書順にソートすることにより、前記インデクスを生成することを特徴とするデータ管理装置。 - 前記インデクス生成手段は、前記インデクスに含まれる各次元の座標データを構成するそれぞれの固定長ビット列について、その上位桁からある前方列が一致しているものを相続くように並べた上で、それらの前方列がさらにどこまで一致するかを決定し、(新たに一致した長さ+1)の値に基づいて領域コードを生成することを特徴とする請求項1に記載のデータ管理装置。
- 前記インデクスへの座標の追加及び削除を行うインデクス変更手段を備え、前記インデクス変更手段は、前記領域コードに基づいてインデクスを二分探索し、領域コードによるソート順に矛盾しない位置に新たな座標を挿入することにより、前記インデクスに座標を追加することを特徴とする請求項1に記載のデータ管理装置。
- 前記探索手段が、指定された範囲に含まれる座標を探索する範囲探索手段である請求項1乃至請求項3のいずれか一に記載のデータ管理装置。
- 前記探索手段が、指定された座標に最も近い座標を探索する最近座標探索手段である請求項1乃至請求項3のいずれか一に記載のデータ管理装置。
- 前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらのうちの少なくとも一つを決定する機能を備えていることを特徴とする請求項1乃至請求項5のいずれか一に記載のデータ管理装置。
- 前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらをすべて列挙する機能を備えていることを特徴とする請求項1乃至請求項5のいずれか一に記載のデータ管理装置。
- 前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらの数を計数する機能を備えていることを特徴とする請求項1乃至請求項5のいずれか一に記載のデータ管理装置。
- 前記インデクスに座標を格納する際、座標または領域コードと、座標から領域コードを生成しあるいは領域コードから座標を復元するための元分割とを格納することを特徴とする請求項1乃至請求項5のいずれか一に記載のデータ管理装置。
- 前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定範囲に含まれている場合に、インデクス中でそれを前方列とする座標は、一括して指定範囲に含まれていると判定することを特徴とする請求項4に記載のデータ管理装置。
- 前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定範囲に含まれるものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について指定範囲に含まれているか否かの判定を実行することを特徴とする請求項4に記載のデータ管理装置。
- 前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定座標から最近座標候補との距離以内にある場合に、インデクス中でそれを前方列とする座標のいずれか一つを新たな最近座標候補とすることを特徴とする請求項5に記載のデータ管理装置。
- 前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定座標から最近座標候補との距離以内のものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について新たな最近座標候補になり得るか否かを判定し、判定の結果、より指定座標に近い座標があれば、最も近いものを新たな最近座標候補とすることを特徴とする請求項5に記載のデータ管理装置。
- 前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとしてスタックに格納しておき、スタックから取り出した前方列に関して、それを前方列とする座標で、指定座標から最近座標候補との距離より近いものがあり得ない場合には、それらを探索の対象としないことを特徴とする請求項5に記載のデータ管理装置。
- 前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとして、それを前方列とする座標で指定座標から最も近い座標との距離と共に格納しておき、その距離が最小の前方列を最近座標候補を探索すべき対象として選択し、その距離が指定座標と最近座標候補との距離以上の場合には探索を終了することを特徴とする請求項5に記載のデータ管理装置。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02901699A JP3607107B2 (ja) | 1998-03-13 | 1999-02-05 | データ管理装置 |
EP99104003A EP0942381B1 (en) | 1998-03-13 | 1999-03-12 | System and method for data management |
US09/267,165 US6687688B1 (en) | 1998-03-13 | 1999-03-12 | System and method for data management |
DE69939289T DE69939289D1 (de) | 1998-03-13 | 1999-03-12 | System und Verfahren zur Datenverwaltung |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6370198 | 1998-03-13 | ||
JP10-63701 | 1998-03-13 | ||
JP02901699A JP3607107B2 (ja) | 1998-03-13 | 1999-02-05 | データ管理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11328225A JPH11328225A (ja) | 1999-11-30 |
JP3607107B2 true JP3607107B2 (ja) | 2005-01-05 |
Family
ID=26367163
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP02901699A Expired - Fee Related JP3607107B2 (ja) | 1998-03-13 | 1999-02-05 | データ管理装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6687688B1 (ja) |
EP (1) | EP0942381B1 (ja) |
JP (1) | JP3607107B2 (ja) |
DE (1) | DE69939289D1 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6721759B1 (en) * | 1998-12-24 | 2004-04-13 | Sony Corporation | Techniques for spatial representation of data and browsing based on similarity |
US7197498B2 (en) * | 2003-06-30 | 2007-03-27 | Intel Corporation | Apparatus, system and method for updating a sorted list |
US7619913B2 (en) | 2004-11-30 | 2009-11-17 | Hewlett-Packard Development Company, L.P. | Device, method and program for managing area information |
US7653643B2 (en) * | 2005-03-24 | 2010-01-26 | Microsoft Corporation | Method and apparatus for compressing a data set |
US7293022B2 (en) * | 2005-04-14 | 2007-11-06 | International Business Machines Corporation | List update employing neutral sort keys |
US9940345B2 (en) * | 2007-01-10 | 2018-04-10 | Norton Garfinkle | Software method for data storage and retrieval |
US20090150355A1 (en) * | 2007-11-28 | 2009-06-11 | Norton Garfinkle | Software method for data storage and retrieval |
US7966336B2 (en) * | 2007-11-30 | 2011-06-21 | Palo Alto Research Center Incorporated | Bounded sub-optimal problem solving |
US8510310B2 (en) * | 2008-12-23 | 2013-08-13 | Zhijing George Mou | Method and system for multi-dimensional and geographic search |
JP5237837B2 (ja) * | 2009-01-07 | 2013-07-17 | 株式会社日立製作所 | 空間データ管理装置、空間データ管理方法、および、空間データ管理プログラム |
US20100185672A1 (en) * | 2009-01-21 | 2010-07-22 | Rising Iii Hawley K | Techniques for spatial representation of data and browsing based on similarity |
WO2013018683A1 (ja) | 2011-07-29 | 2013-02-07 | 日本電気株式会社 | 情報漏えいに耐性を持つインデックス生成システム及びインデックス生成装置並びにその方法 |
WO2014123482A1 (en) * | 2013-02-08 | 2014-08-14 | Contentmap International Ab | Method and device for handling data containers |
US10049164B2 (en) * | 2013-07-12 | 2018-08-14 | Nec Corporation | Multidimensional-range search apparatus and multidimensional-range search method |
US10002146B1 (en) | 2017-02-13 | 2018-06-19 | Sas Institute Inc. | Distributed data set indexing |
JP6550448B2 (ja) * | 2017-12-18 | 2019-07-24 | ヤフー株式会社 | データ管理装置、データ管理方法、およびプログラム |
CN108182242A (zh) * | 2017-12-28 | 2018-06-19 | 湖南大学 | 一种用于海量多维数值数据范围查询的索引方法 |
CN111241090B (zh) * | 2019-12-23 | 2023-11-10 | 华为技术有限公司 | 存储系统中管理数据索引的方法和装置 |
CN111796798B (zh) * | 2020-09-08 | 2020-12-22 | 腾讯科技(深圳)有限公司 | 一种定点与浮点转换器、处理器、方法以及存储介质 |
CN115169276B (zh) * | 2022-07-22 | 2023-04-07 | 北京云枢创新软件技术有限公司 | 一种基于叠放模块的引脚区域匹配方法 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62145369A (ja) * | 1985-12-20 | 1987-06-29 | Hitachi Ltd | 図形デ−タの検索方法 |
JPS62226225A (ja) * | 1986-03-27 | 1987-10-05 | Nec Corp | 関係認定装置 |
JPS63157279A (ja) * | 1986-12-22 | 1988-06-30 | Ricoh Co Ltd | パタ−ン情報の処理方式および演繹方式 |
JPS63221486A (ja) * | 1987-03-11 | 1988-09-14 | Toshiba Corp | 図形の接合装置 |
US4944023A (en) * | 1987-05-19 | 1990-07-24 | Ricoh Company, Ltd. | Method of describing image information |
US5202986A (en) * | 1989-09-28 | 1993-04-13 | Bull Hn Information Systems Inc. | Prefix search tree partial key branching |
US5345516A (en) * | 1991-04-19 | 1994-09-06 | International Business Machines Corporation | Apparatus and method for parsing a chemical string |
US5953006A (en) * | 1992-03-18 | 1999-09-14 | Lucent Technologies Inc. | Methods and apparatus for detecting and displaying similarities in large data sets |
US5836003A (en) * | 1993-08-26 | 1998-11-10 | Visnet Ltd. | Methods and means for image and voice compression |
WO1995002222A1 (en) * | 1993-07-07 | 1995-01-19 | European Computer-Industry Research Centre Gmbh | Database structures |
US5446806A (en) * | 1993-11-15 | 1995-08-29 | National Semiconductor Corporation | Quadtree-structured Walsh transform video/image coding |
US5615299A (en) * | 1994-06-20 | 1997-03-25 | International Business Machines Corporation | Speech recognition using dynamic features |
EP0702311A1 (en) * | 1994-09-14 | 1996-03-20 | Kabushiki Kaisha Toshiba | Data processing system,data retrieval system,data processing method and data retrieval method |
US5551024A (en) * | 1994-10-13 | 1996-08-27 | Microsoft Corporation | System for identifying data records in a database using a data structure with linked parameters in a search range |
US5842004A (en) * | 1995-08-04 | 1998-11-24 | Sun Microsystems, Inc. | Method and apparatus for decompression of compressed geometric three-dimensional graphics data |
JP3020851B2 (ja) * | 1995-10-23 | 2000-03-15 | シャープ株式会社 | 情報検索装置および情報検索制御方法 |
US5819286A (en) * | 1995-12-11 | 1998-10-06 | Industrial Technology Research Institute | Video database indexing and query method and system |
JP3598183B2 (ja) * | 1996-10-16 | 2004-12-08 | 株式会社東芝 | 多次元データ管理方法、多次元データ管理装置、多次元データ管理プログラムを記録した媒体 |
US5852822A (en) * | 1996-12-09 | 1998-12-22 | Oracle Corporation | Index-only tables with nested group keys |
US5963642A (en) * | 1996-12-30 | 1999-10-05 | Goldstein; Benjamin D. | Method and apparatus for secure storage of data |
US6070159A (en) * | 1997-12-05 | 2000-05-30 | Authentec, Inc. | Method and apparatus for expandable biometric searching |
-
1999
- 1999-02-05 JP JP02901699A patent/JP3607107B2/ja not_active Expired - Fee Related
- 1999-03-12 US US09/267,165 patent/US6687688B1/en not_active Expired - Lifetime
- 1999-03-12 EP EP99104003A patent/EP0942381B1/en not_active Expired - Lifetime
- 1999-03-12 DE DE69939289T patent/DE69939289D1/de not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH11328225A (ja) | 1999-11-30 |
US6687688B1 (en) | 2004-02-03 |
EP0942381A2 (en) | 1999-09-15 |
EP0942381B1 (en) | 2008-08-13 |
DE69939289D1 (de) | 2008-09-25 |
EP0942381A3 (en) | 2004-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3607107B2 (ja) | データ管理装置 | |
US11899641B2 (en) | Trie-based indices for databases | |
JP3849279B2 (ja) | インデクス作成方法および検索方法 | |
US6505206B1 (en) | Method for implementing an associative memory based on a digital trie structure | |
US6381601B1 (en) | Grouping and duplicate removal method in a database | |
US20050234843A1 (en) | Computer program for storing electronic files and associated attachments in a single searchable database | |
JP2001522495A (ja) | 動的に増加しているデータベース・データ・セットの増加集計方法 | |
US8380737B2 (en) | Computing intersection of sets of numbers | |
WO2003071450A2 (en) | System and method for identifying relationships between database records | |
CN102214302A (zh) | 识别装置、识别方法以及程序 | |
US9299082B2 (en) | Fast streams and substreams | |
CN110309336A (zh) | 图像检索方法、装置、系统、服务器以及存储介质 | |
JP2000315206A (ja) | 検索条件の組み合わせに基づく検索システムおよび方法 | |
JP3193658B2 (ja) | データ間結合ルール導出方法及び装置、及び直交凸領域切出方法及び装置 | |
CN112395288B (zh) | 基于希尔伯特曲线的r树索引合并更新方法、装置及介质 | |
Chern et al. | An asymptotic theory for Cauchy–Euler differential equations with applications to the analysis of algorithms | |
Kutz et al. | Faster algorithms for computing longest common increasing subsequences | |
CN114564620A (zh) | 图数据存储方法、系统及计算机设备 | |
US8407187B2 (en) | Validating files using a sliding window to access and correlate records in an arbitrarily large dataset | |
US10949465B1 (en) | Efficient graph tree based address autocomplete and autocorrection | |
AU2002351296B2 (en) | System and method for processing a request using multiple database units | |
Carlsson et al. | Sublinear merging and natural merge sort | |
JP3938815B2 (ja) | ノード作成方法、画像検索方法及び記録媒体 | |
Shibuya et al. | Set-min sketch: a probabilistic map for power-law distributions with application to k-mer annotation | |
CN114398373A (zh) | 应用于数据库存储的文件数据存储读取方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040629 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040830 |
|
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: 20040928 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041006 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081015 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081015 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091015 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101015 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111015 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111015 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121015 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131015 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |