JP3771271B2 - コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 - Google Patents
コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 Download PDFInfo
- Publication number
- JP3771271B2 JP3771271B2 JP52129297A JP52129297A JP3771271B2 JP 3771271 B2 JP3771271 B2 JP 3771271B2 JP 52129297 A JP52129297 A JP 52129297A JP 52129297 A JP52129297 A JP 52129297A JP 3771271 B2 JP3771271 B2 JP 3771271B2
- Authority
- JP
- Japan
- Prior art keywords
- entry
- index block
- index
- key
- entries
- 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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—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/953—Organization of data
- Y10S707/956—Hierarchical
-
- 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/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、コンピュータデータ及びファイル記憶システムと、コンピュータデータ及びファイル記憶システムでのデータの索引付けとアクセスのための構造に係り、更に特に、0完全木のコンパクト表現を使用するための新規の構造と、こうした構造において探索キーの集まりを記憶及び検索するための方法とに係る。
発明の背景
データベースのようなデータ及びファイル記憶システム、特にコンピュータシステムで使用するデータ及びファイル記憶システムで繰り返し起こる問題は、データベース内に記憶された情報の特定の項目の探索と位置指定である。こうした探索は、ディレクトリすなわち索引をデータベースに作成することと、そのロケーションがコンピュータのメモリ上にあるか記憶媒体上にあるかに係らずデータベース内の情報の最有望な位置に対するポインタを発見するために、探索キーを使用して索引を探索することとによって行われることが一般的である。
その最も一般的な形態では、コンピュータ内のデータベース・レコードに対する索引は、そのコンピュータの記憶手段内に記憶されている、枝で結合された1つ以上のノードで構成された木として形成される。各々のノードは、一般的に、探索を誘導するための情報を収容する1つ以上の枝フィールドを含み、更に、こうした枝フィールドの各々が、一般的に、別のノードへのポインタすなわち枝と、ノードからの枝に沿って配置されることが可能な情報の範囲とタイプを示す関連した枝キーとを含む。木と、その木の探索は、根ノードと呼ばれる単一ノードで始まって、情報項目または(より一般的には)情報項目のポインタのいずれかを含むノードに達するまで様々な枝ノードを経由して下方に進む。情報関連ノードは、「葉ノード」、または、探索がそのノードのレベルで成功するか失敗するので「失敗ノード(failure node)」と呼ばれることが多い。コンピュータの木記憶構造内では、木のあらゆるノードは、そのノードに従属している全てのノードに対して親ノードであり、その親ノードに従属している木の下位構造は、親ノードに対して部分木と呼ばれることが多い。
探索時に木記憶構造内を進む際の方向または枝に関する決定は、探索キーと、探索時に遭遇する各ノードに記憶された枝キーとを比較することによって行われる。所与のノードに従属する枝に対する比較の結果に従って、その探索の次の段階を行わなければならない。この点で、探索キーは、コンピュータシステム内で探索されなければならない情報項目に関連する文字ストリングまたは数字ストリングで構成されることが一般的である。
先行技術は、コンピュータデータベースシステム用の様々な探索木データ記憶構造を含み、こうした木データ記憶構造の中には、明らかに後続の木構造の全ての開発の基礎となっている原型であり且つ当業で公知の最も一般的な探索木の形態である「B木」が含まれている(例えば、Knuth.The Art of Computer Programming,Vol.3,pp.473−479を参照されたい)。B木は、データセットに対する適切な一次アクセスと優れた二次アクセスの両方を可能にする。従って、当然のことながら、こうした木は、データベース及びファイルシステムで用いられることが多いデータ記憶構造で使用されることが意図されている。しかし、データベースシステムでB木記憶構造を使用する場合には問題点がある。すなわち、索引付き属性値は全て、索引自体において複製されなければならない。多数の二次探索値を複製することによる累積的効果は、データベース自体のサイズを越える場合が多い索引を生じさせることである。このオーバーヘッドのために、潜在的に有効なアクセス経路をデータベース設計者が拒否せざるを得なくなる可能性がある。更に、探索キー値をB木のブロック内に内含させることは、ブロック・ファンアウトを著しく減少させると共に、木深さと検索時間を著しく増大させる。
コンピュータデータベースシステムで使用可能な別の木構造であるコンパクト0完全木(即ち、C0木)は、大半の実際的なキー長さ(即ち、32バイト未満)にとってその典型的な8ビットの長さが適切である小さな代替値で索引キー値を置き換えることによって、索引から探索値を除去する。従って、実効値を任意順序でいずれかの場所に格納し、その木構造に対する索引を、索引ブロック内に格納された(代替値、ポインタ)対の階層的集合の状態のままにしておくことが可能である。この構成は、索引のサイズを約50%から80%縮小させることが可能であると共に、その木の枝因子を増加させることが可能であり、これによって、コンピュータデータベースシステムにおける正確一致照会1回当たりのデータベースシステムのディスクアクセス回数の低減を可能にする。(Orlandic and Pfaltz,Compact 0−Complete Trees,Proceedings of the 14th VLDB Conference,pp.372−381を参照されたい。)
C0木を生成するための公知の方法はB木に比べて記憶利用率を50%から80%増大させるが、その木の最低位レベルの索引記入項目の個数が記憶レコードの実際数よりも多いダミー記入項目(代替値、ポインタ=NIL)の存在のために、記憶空間の無駄がある。従って、最低位木レベルにおけるC0木の索引記入項目の予測上の記憶利用率は、B木の場合の記憶利用率0.693に対して0.567である。
更に、B木記憶構造とC0木記憶構造は代表的な効率の良い値探索方法であるが、これらの方法は両方とも木データ記憶構造自体の初期生成を必要とする。これらのコンピュータ記憶構造は両方とも、その構造に固有の形態でソート順に情報を記憶する。
キーレコードをランダムな順序でソートする場合よりも、キーレコードをそのキーフィールドの順序で最初にソートする場合の方が、より効率的に木を構築することが可能である。従って、効率の高いコンピュータデータベースシステムは、キーの集まりを最初にソートし、その後で、ソート済みのキーから飛び飛びに抽出したキーに基づいて木を構築すべきである。
キー値がソート順である場合には、記憶されるべき次のキー値は、現在葉索引ブロック(current leaf index block)すなわち部分木のキー値の範囲内である可能性がある。これに加えて、現在索引ブロックの所与のキー区間内の全てのキーが挿入されるまで、索引ブロック分割を据え置くことが可能である。従って、目標は、可能な限り効率的な方法でキー範囲間内に順序付けた形のキーレコードまたはデータ項目を効率的に入力する、データ記憶構造とデータ記憶方法を構築することである。特に、こうしたデータ記憶構造とデータ記憶方法は、無駄になる記憶空間を減少させると共に、入力時に、コンピュータの記憶媒体またはメモリの中に記憶されたデータ項目にアクセスする探索キーをソートしなければならない。この目標は、公知のB木コンピュータ記憶構造とC0木コンピュータ記憶構造の利点を維持すると同時に、その特性を利用することによって実現されなければならない。
発明の要約
本発明の実施様態の1つでは、コンピュータシステム内の記憶データを検索するために必要な情報の量を最少化するためのデータ記憶構造が、探索キーを索引付ける(index)ための項目から構成される。各々の項目は、深さ値(depth value)と、2つの条件を有するデータ有り表示子(data present indicator)とを含み、コンピュータ内に記憶された木構造が上記記入項目の各々を相互連結し、データ記憶構造を形成する。探索キーは、データ記憶構造によって索引付けられるデータレコードの2進表現であるか、または、データレコードのルックアップに使用される他の任意の属性もしくは属性の集まりであることが可能である。このデータ記憶構造は、更に、探索キー区間範囲に関連付けられた各記入項目のカウントを記憶するための手段も含む。
本発明の上記実施様態は、木データ記憶構造によって索引付けられたデータを記憶し、アクセスし、検索するための新規の方法を含む。これらの方法は、各探索キーに対して事前定義された機能を果たすように木構造内の幾つかの探索キーを逐次処理するための方法と、木構造内の探索キーを位置指定するための方法と、木構造内の探索キーに関する情報を記憶し索引付けるための方法と、本発明の索引ブロックを分割するための方法とを含む。
本発明の実施様態の1つは、記憶利用効率の向上をもたらし、上記のようにB木の記憶利用率を50%から80%上回るC0木の記憶利用率を更に上回る記憶利用率を実現する。最低位レベルにおいてC0木によって発生させられる記憶空間の無駄を解消するために、本発明の好ましい実施様態の1つは、コンピュータの記憶手段内の2つの別々の物理構造、即ち、(1)深さ値と2つの条件を有するデータ有り表示子とを含む代替値のリストに対する索引ブロック深さ構造と、(2)あらゆる非NILポインタ値のリストを指定するポインタ構造とで、物理的に隣接した値の対としての(代替、ポインタ)項目の記憶域を置き換える。本発明のこの好ましい実施様態では、先行技術のC0木データ記憶構造のNILポインタ(即ち、ダミー項目)が、代替値自体の値のデータ無し表示子ビット(data not present indicator bit)によって表現される。各部分木のメタデータも、ポインタ構造中の索引付きキーの各々に関する増分辞書順位置(incremental lexical position)を累算するために、各部分木に関する非NIL項目のカウントを反映する。ポインタ構造がNILポインタを全く含まないので、NILポインタを表示するためには1ビットの記憶だけしか必要ではなく、最小のメタデータが記憶される。従って、記憶利用率は、B木の場合に予測される記憶利用率に戻る傾向がある。
更に、多重レベル木構造走査の非効率性を排除するために、本発明の好ましい実施様態のデータ記憶構造に加えられるべきキーが、ソート順に集合または1つ以上の項目として処理される。こうして、各キーに関して、根から葉への木のノードのより高度の参照の局地性と、走査及び維持の簡略化(索引ブロック分割を含む)とが実現される。現在索引ブロックのキー区間範囲内に次のキーが含まれるかどうかを判定することによって、事前定義された機能の処理を現在索引ブロックにおいて継続することが可能であり、または、その親ブロック内で再開することが可能である。この新たな方法では、索引ブロックの分割は、現在ブロックの処理全てが完了するか、ブロックサイズが通常の閾値よりも著しく大きい極端な最大値をとるまで、索引ブロックの分割が据え置かれ、従って、適切なキー全てが部分木に加えられ終わるまでその部分木の文脈保存を可能にする。
本発明の実施に関する説明としてだけ本発明の実施様態が示され説明される以下の詳細な説明から、本発明の更に別の実施様態が当業者に容易に明らかになるだろう。後に理解されるように、本発明は他の様々な実施様態で実施されることが可能であり、その幾つかの詳細事項は、本発明の思想から逸脱することなく、様々な明らかな点で変更が可能である。従って、次に示す添付図面と詳細な説明が本発明を例示する性質のものであって、本発明を限定するものではないことを理解されたい。
【図面の簡単な説明】
本発明の上記説明と構造及び特徴の全てと、その実施様態が、以下の説明と添付図面とから明らかになるだろう。
図1aは、本発明が実施されるコンピュータシステムの略ブロック図である。
図1bは、本発明を実施するためのコンピュータ上のデータベースシステムの略ブロック図である。
図2aは、先行技術の完全2分木の概念図である。
図2bは、先行技術の0完全2分木の概念図である。
図3aは、データベース中に記憶された値に関する、先行技術のC0木索引構造の説明図である。
図3bは、分割が起こる前の図3aのC0木の説明図である。
図4aは、本発明のC0木の具体例を示す説明図である。
図4bは、図4aのC0木の記憶コンテナ(storage container)の内容の詳細図である。
図5は、本発明によるC0木の3レベル実施様態の例を示す説明図である。
図6aは、記憶構造のノードの例を示す説明図である。
図6bは、INITノードの例を示す説明図である。
図7は、本発明の逐次処理手続きのフローチャートである。
図8は、本発明の葉探索手続きのフローチャートである。
図9は、本発明の葉挿入手続きのフローチャートである。
図10は、本発明の枝探索手続きのフローチャートである。
図11は、本発明の枝挿入手続きのフローチャートである。
図12は、本発明の深さ探索手続きのフローチャートである。
図13は、本発明のバルク処理手続きの説明図である。
図14は、本発明のbKリセット機能の説明図である。
図15は、本発明の深さ追加手続きのフローチャートである。
図16aは、本発明の根分割手続きのフローチャートである。
図16bは、分割前の根レベルの説明図である。
図16cは、分割後の根レベルの説明図である。
図17は、本発明の子分割手続きのフローチャートである。
図18は、本発明の最小深さ手続きのフローチャートである。
図19は、本発明のノード分割手続きのフローチャートである。
これらの図で使う同じ番号及び名称は、同じ要素を表す。
詳細な説明
A)コンピュータシステムの概観
図1aは、プログラム可能コンピュータと、ファイルシステムを生成するためのコンピュータプログラムと、本発明によるファイルシステム操作処理のためのコンピュータプログラムとを有するコンピュータシステムを示す。このシステムは、プログラム可能コンピュータ1、ディスプレイ装置2、コンピュータ入力装置3、及び、記憶手段を含む。記憶手段は、磁気ディスク記憶システムまたはコンピュータのデータ記憶用メモリパーティションのような記憶装置4を含む。ファイルシステムを含むハードウェア及びソフトウェアと、後述の処理操作を行うためのハードウェア及びソフトウェアは、コンピュータ1に接続されたファイルシステム5(鎖線で示す)の形で実現される。コンピュータ1に接続されたシステム5は、そのファイルシステム内のデータの表現と、記憶装置4内に記憶された1つ以上のデータファイルに対する操作の実行とに係る様々な活動を統合する。システム5は、プログラムされた汎用コンピュータ(例えば、パーソナルコンピュータ、ミニコンピュータ、メインフレームコンピュータ、または、1個以上の集積チップで形成された特定目的コンピュータ)であることが可能である。
図1bを参照すると、この図に示されるように、ファイルシステム5は、ファイル処理装置7とコマンドインタプリタ6を含む。コンピュータファイルシステム内に記憶された情報の特定項目にアクセスするために、ファイル処理装置7は、記憶装置4内に記憶されたデータ項目を検索するのに必要な情報量を最少化するための、図4に示す通りの新規のコンパクト0完全データ記憶構造40を使用する。このデータ記憶構造は、探索キー1420を索引付けるための複数の記入項目30、31、80、81、82、83、84、85、86、87、88と、これらの記入項目を相互連結するコンピュータの記憶装置4内に記憶された新規のC0木構造43を有し、各記入項目が深さ値89とデータ有り表示子90を含み、データ有り表示子90は例えば2つの条件を有する。このデータ記憶構造40は、更に、探索キー区間範囲に関連付けられた非NIL葉記入項目のカウントを記憶するための手段66も含む。これに加えて、本発明は、木構造43とは別であり且つ典型的な実施様態ではデータ記憶構造40自体とは別であることが可能な、ヘッダ36と記入項目36aから構成される別のポインタ構造を使用する。ポインタ構造36、36aは、記憶装置4の記憶コンテナ39内のデータ項目にアクセスする。
本発明の上記実施様態は、木データ記憶構造によって索引付けしたデータの新規の記憶方法、アクセス方法、及び、検索方法を含む。これらの方法は、事前定義された機能を各探索キーに対して行うために木構造内の幾つかの探索キーを逐次処理するための方法と、木構造内の各探索キーに関する情報を記憶し索引付けるための方法と、本発明の索引ブロックを分割するための方法とを含む。
B)先行技術の木構造
図2a及び図2bを参照すると、これらの図には、先行技術の完全2分木、先行技術の0完全2分木、及び、データを索引付けるためのこれらの木の使用方法が示されている。
1)完全2分木
図2aを参照すると、この図に示される2分木1402は、1412及び1414のような弧または辺で隔てられた1406,1408及び1410のような点で示されるノードから成る、説明用の辺ラベル付き木データ記憶構造である。ノードはaからZまでとA′の小文字と大文字で示される。末端ノードは「葉ノード」または「葉」と呼ばれ、大文字で示される。他の内側ノードは全て小文字で示される。検索対象の情報は、葉1416及び葉1418のような木の葉に位置したポインタによって指定された記憶場所内に記憶される。葉H、I、V、W、L、Z、A′及びQに関して探索キー1420が示されており、図2aでは、探索キー1420は、何らかの最大ビット長さ(例として、8ビットが使用されている)までの任意の均一な長さを有する2進数のストリングである。これらの葉ノード各々に関連付けられた探索キー1420は、記憶装置4内の対応する葉ノードに関する記憶位置に対するポインタを位置指定するために使用される。関連した探索キー1420によって示される葉ノードだけが、関連データレコードを格納する記憶位置に対するポインタを有し、従って「満杯(full)」であると言い表される。葉G、K、O、S、T及びYは、記憶位置に対するポインタを持たず、従って「空(empty)」と言い表される。
記憶装置4内のデータレコードの検索は、いずれか1つの探索キー1420の2進「0」記号と2進「1」記号を、根ノードaで始まり所期の葉ノードで終わる連結された点と弧の経路に沿ったノード間の各弧1412上の「0」または「1」辺ラベルと連続的に比較することによって実現される。2分木の各々のノードと葉は、それに入ってくる弧が「0」とラベルされている場合には、0ノードまたは0葉であり、一方、それに入ってくる弧が「1」とラベルされている場合には、1ノードまたは1葉である。コンピュータデータベース及びファイル管理システムでは、ノードに対するアクセス経路は、根ノードaから特定の該当ノードへ達する「0」及び「1」の辺ラベルを連結することによって得られる2進ストリングである。
全てのノードが葉であるか、または、正確に2つの空でない(non−empty)直接の子孫を有するノード(即ち、従属0ノードと従属1ノードを有するノード)である場合に、2分木構造を「完全な(complete)」と言い表す。図2aでは、ノードaからノードA′までの各ノードが、0完全性(0−completeness)の条件を満たす。
従って、図2aは、葉H、I、V、W、L、Z、A′、Qのデータレコードを各々に指定するために00001000、00100101、01000010、01000110、1000001、10101000、10101010及び10110010を含む、探索キー1420を有する木記憶構造を示す。「完全」2分木要件を満たすために空の葉G、K、O、T、S、Yが木1402内に含まれる。
2)0完全2分木
図2bを参照すると、この図には、特に明記しない限り図2aで使用したのと同一の構造、名称、及び、照合番号を有する0完全2分木1430が示してある。1)いずれかの0葉の兄弟がその木内に存在し、且つ、2)正確にδ−1個の1ノードがその木内に存在する場合に、δ個の葉を有する2分木1430が0完全であると言い表される。従って、図2bは、0葉H、V、L、T、Zの全てが兄弟1ノードを有し、且つ、9個の葉H、I、V、W、L、T、Z、A′、Qと8個の1ノードI、W、e、c、m、A′、U、Qが存在するので、図2aの2分木の0完全2分木表現である。葉G、K、O、S、Yのような(関連探索キーの欠如によって示される)空である1葉を木1402から削除することによって、0完全木1430が図2aの2分木1402から得られる。空の0葉の削除は、木1430内に8個の1ノードを必要とする第2の条件に違反し、従って、ノードTが空の場合でさえ、そのノードTが木記憶構造1430内に残り、必要な記憶空間を増加させる。
小文字で表される内側ノードの各々は、対応する0部分木と1部分木を有する。0完全木の「前順走査」は、その木の根ノードで開始した後に、最後ノードへのアクセスが完了するまで次の2つのステップを繰り返す。
1)現在ノードnniが内側ノードである場合には、0完全性の定義によって内側コードの各々が0息子ノードを持たなければならないので、その順序における次のノードnni+1は現在ノードの0息子であり、
2)現在ノードnniが葉である場合には、前順での次のノードは、その0部分木がnniを含み且つその深さが最大であるノードppの1息子である。
こうして、前順での第1のノードは内側根ノードaである。その次のノードは、その0息子ノードbであり、その次は0息子ノードdが続き、更にその後に葉Hが続く。Hが葉ノードであり且つノードdの0部分木がHを含むので、前順でのその次のノードはノードdの1息子であり、その深さは最大である(即ち、その0部分木がHを含み且つその深さが1であるノードbとは対照的に、2の深さ)であるので、図2bに示される木1430の完全前順走査は、シーケンス「abdHIejnrVWcfLmpTuxZA′Q」である。
0完全木の前順走査における最終葉ノードQを除く葉ノードH、I、V、W、L、T、Z、A′の各々に対する後継者ノード(successor node)も特に重要である。境界ノード(bounding node)と呼ばれるこれらのノードは、図2bでは、各々にI、e、W、c、m、u、A′、Qである。前順走査に関して境界ノードが定義されるので、最終葉ノードQを除く葉ノードの各々がそれ自体の固有の境界ノードを有する。これに加えて、上記の前順走査の定義から、境界ノードは全て1ノードである。
2.a)キー区間
ノード及び境界ノードの「識別子」を、0完全木内の各々の葉に対応するキー区間を設定するために使用することが可能である。葉ノードの「識別子」は、探索キーと同じ長さであり、且つ、その高位(または最左)ビットが、0に設定された他の最左ビットの全てを有する葉にまで達する連結弧または連結経路の2進ビットである2進ストリングである。
「キー区間」は、形式的には、葉識別子(含む)とその境界ノードの識別子(含まない)との間のキー範囲と定義される。この場合も、例外は、そのキー区間の上限が常に予め知られており且つ全て1ビットから成る(即ち、11111111)、前順走査での最終葉ノード(例えばQ)である。
表1では、0完全木1430の葉ノードH、I、V、W、L、T、Z、A′、Q各々のキー区間が辞書式順序にリストされている。従って、例えば、葉Vは01000000の識別子を有し、その対応する境界ノードWは識別子01000100を有する。表1に示されるように葉Vのキー区間は、01000000(含む)から01000100(含まない)、または、01000000から01000011(含む)である。
表1を考察することによって、境界ノード識別子の知識は、任意の葉の適切なキー区間を識別するのに十分であり、従って、任意の所与の探索キーを有する対応するデータレコードを識別するのに十分である。探索キー01000010を使用する例では、前順走査シーケンス内の木の境界識別子を調べる探索手続きが、探索キー01000010より大きい第1の境界識別子が発見される時に、探索キーに関する正しいキー区間を発見するだろう。第1の境界ノードI(00100000)は探索キー01000010よりも小さい。前順の境界ノードeの第2の境界識別子01000000も、その探索キーよりも小さい。第3の境界ノードWの識別子(01000100)は上記探索キーよりも大きく、葉Vのキー区間の非包含的上限である。葉Vのキー区間の包含的下限は上記境界ノードeの識別子である。
表1では、各々のキー区間と共に、そのキー区間に関する0完全木1430の境界ノードの「深さ」を表す数が示されている。例えば、葉Vの境界ノードは、0完全2分木内で6の深さを有する葉wである。定義上は境界ノードを持たない最終ノードQの場合には、その区間の上限が11111111に設定され、0の割当て深さを有する。
境界ノードの集まりの識別子とそれらの深さとの間の関係には1つの明らかな規則性がある。境界ノードの深さがddである場合には、識別子の定義によって、対応する識別子のdd番目のビットが1に設定され、後続の低位ビット全てが0に設定される。
キー長さが8ビットである表1では、第1の境界ノード識別子00100000を得るために、初期ダミー識別子が00000000であり、第1の境界ノードIの深さが3であり、第1の境界ノード識別子の第3のビットが1であり、後続の低位ビットが0である。第2の境界ノード識別子01000000を得るために、第2の境界ノードeの深さは2であり、第1の境界ノード識別子を使用し、第2のビットが1に設定され、全ての後続ビットが0に設定される。残りの境界ノードの識別子は同様の仕方で構成される。
3)先行技術のC0木
0完全2分木内の境界ノードの深さからキー区間を構成することが可能であるという知識を使用して、図2bの先行技術の0完全木のコンパクトな形態を図3aに9で示す。このコンパクトな形態はC0木と呼ばれる。このツリー構造は、記入項目17を伴う索引ブロック10、11、12を有する。C0木を形成する場合、いずれか1つの索引ブロック内の記入項目17の最大数は、常に、予め決められた最大索引ブロック数14以下である。図3aでは、予め決められた最大索引ブロック数14が5であると仮定して、木構造9がどのように図2bの0完全2分木を表現するかを考察する。索引ブロック10、11、12の記入項目17の各々が、深さ値17aと、記憶位置13に対するポインタ17bを有する。唯一の例外は、図2bの空の葉ノード(例えば、葉T)を表す17b′のようなNIL記入項目だろう。この記入項目17b′は、メモリ内に記憶された対応データを持たない空のポインタ17bを有し、コンピュータシステム内の記憶空間を浪費する。
例えば、表1を参照して図3aに示されるように、葉H、I、V、Wに対応する境界ノードI、e、W、cの深さ値3、2、6、1が索引ブロック11内に記憶される。葉L、T′、Z、A′に対応する境界ノードm、u、A′、Qの深さ値3、5、7、4と、最終葉ノードQの割当て深さ値0が、索引ブロック12内に記憶される。各記入項目17のポインタ17bは、図2bの空の葉Tに対応する記入項目17b′の空ポインタ17bを除いて、探索キーと、メモリまたは記憶装置内のその関連データレコードとに対応する記憶位置13を指定する。根索引ブロック10は、対応する葉索引ブロック11及び12を指定するポインタ17bを有する記入項目17を持つ。索引ブロック10の各記入項目17の深さ値17aは、葉索引ブロック11及び12各々の最終深さ値または最小深さ値1及び0に対応し、葉索引ブロック11及び12各々に関するキー区間範囲を与える。
さて、最初の6個の探索キーが辞書式順序で索引付けされている図3bに示す通りのコンパクト0完全木の満杯索引ブロックを分割するための公知の方法を考察する。この点で、その木構造は、探索キー00001000、00100101、01000010、01000110、10000001、及び、10101000を索引付ける6個の葉ノードを有する概念0完全2分木のコンパクトな表現である、6個の記入項目17を有する単一索引ブロック19である。6番目の探索キー10101000に対して索引付けると、5個の予め決められた完全索引ブロック数14を超過し、索引ブロック19の分割が生じなければならない。この分割は、索引ブロック19の深さ値17aの最小深さ(1である)で生じる。この分割は、根索引ブロック20と、3、2、6及び1の深さ値17aを有する葉索引ブロック21と、3及び0の深さ値17aを有する葉索引ブロック24を生じさせる。分割後には、親索引ブロック20は2個の記入項目17によって構成される。第1の記入項目22は、上記と同じ6個の探索キーの入力後に概念2進0完全木内の探索キー01000010を索引付ける葉ノードの境界ノード深さに対応する1の深さ値17aを有し、第2の記入項目23は、常に0完全木の前順での最終葉ノードの割当て値である0の深さ値17aを有する。記入項目22及び23のポインタ17bは各々に索引ブロック21と索引ブロック24を指定する。
B)本発明のコンパクト0完全データ記憶構造
図4を参照すると、この図には、図2a、図2b及び図3aの場合と同じ探索キー1420の集合を入力した後の、本発明の実施様態の1つのデータ記憶構造40が示されている。より多くの個数の探索キーをこのデータ記憶構造40内に入力することが可能であり、探索キーのより大きい集合に上記実施様態を適用することは、当業者の知識の範囲内に含まれるだろう。近接した深さ値17a及びポインタ17b記入項目17を有するブロック10、11及び12を持つ図3aのC0木とは対照的に、図4のデータ記憶構造は、索引ブロック記入項目47cに索引付けられた索引ブロックヘッダ47aと部分木ポインタ47bとを有する根ノード47と、索引ブロック記入項目34cに連結した索引ブロックヘッダ34aと部分木ポインタ34bとを有するノード34と、索引ブロック記入項目35cに連結した索引ブロックヘッダ35aと部分木ポインタ35bとを有するノード35とから構成される木構造43を持つ。
記入項目47c、記入項目34c、及び、記入項目35cの各々は、深さ値89とデータ有り表示子90を含む。これに加えて、データ記憶構造40は、非NILである葉索引ブロック記入項目34c及び35cの対応深さ値89に関するポインタまたは参照可能索引を含む対応記入項目36aを有するポインタヘッダ36から構成された別個のポインタ構造を持つ。34c及び35cの深さ値89と、ポインタ記入項目36aの索引は、葉Tのような0葉記入項目に対応する空ポインタが除外されて無駄な記憶空間が減少することを除いて、図3aの索引ブロック11及び12内の深さ値17aとポインタ17bに相当する。ノード47の索引ブロック記入項目47cは、対応する索引ブロック34c及び35c各々において最終の(即ち、最小値の)深さ記入項目を与える図3aの索引ブロック内の記入項目に対応する、記入項目30及び31を含む。根レベル41のポインタ47bは、索引ブロック記入項目47cの各々に対応するキー区間に関する葉レベル64を指定する。
対応する深さ値89を索引ブロック記入項目47c、34c及び35cとポインタ記入項目36aとに分割することに加えて、対応記入項目66aを有するカウントヘッダ66が関係付けられる。記入項目66aは、索引ブロック記入項目34c及び35c内の合計数Fまたは満杯葉(非NIL)記入項目を各々に与えるカウント記入項目32及び33を含む。従って、カウント記入項目32は、索引ブロック記入項目34c内に4個の非NIL4記入項目(または値F)が存在することを示す値4を有する。カウント記入項目33は、索引ブロック記入項目35c内に4個の非NIL記入項目(または値F)が存在することを示す値4を有する。従って、データ記憶構造40は、新規のC0木構造43と、別個のポインタ構造36及び36aと、記憶コンテナ39を有する。ノード34、35及び47と、カウントヘッダ66と、カウント記入項目66aは、木構造43内にあり、一方、参照可能索引またはポインタは、ヘッダ36と記入項目36aから構成される別のポインタ構造内にある。
図4の木構造43の例は、2の高さと、ルートレベル41と、葉レベル64とを有する。根レベル41における索引ブロック記入項目47cは、2個の記入項目30及び31を含み、葉レベル64における索引ブロック記入項目構造34c及び35cは、4個の記入項目80、81、82、83と5個の記入項目84、85、86、87、88を各々に含む。C0木記憶構造の高さまたはレベル数は、木構造43の葉記入項目内で索引付けられるべきデータ項目及び関連探索キーの数と、ファイルシステム内で設定される予め決められた最大索引ブロック数79とに応じて変化する。上記図4の実施様態は、5の予め決められた最大索引ブロック数79を有する。
深さ値89は、木構造43のノード47、34及び35の索引ブロックヘッダ47a、34a及び35aの各々に連結されている索引ブロック記入項目47c、34c及び35c内に位置している。重要なことであるが、データ有り表示子ビット90も、索引ブロック記入項目47c、34c及び35cの各々の中に存在する。
表示子ビット90の各々が、0と1で各々に表現される2つの条件FまたはTのどちらか一方の状態である。葉レベル64における深さ値89では、条件T、すなわち、第1の条件は、対応記入項目が、図3aのC0木のNIL記入項目であるか、または、図2aと図2bにおける深さ値5の葉Tのような概念0完全2分木の空ノードであることを表す。条件F、すなわち、第2の条件は、対応記入項目が、図2a及び図2bの葉H、I、V、W、L、Z、A′及びQに対応する記入項目80から記入項目84までと記入項目86から記入項目88までのように、コンピュータの記憶装置内の対応データ項目に関連付けられていることを示す。非NIL記入項目80から84までと非NIL記入項目86から88までは、ポインタ記入項目36aのいずれか1つによってアドレス指定されるコンピュータのメモリ8の記憶コンテナ39内に、対応データ項目を有する。記入項目85のようなNIL記入項目またはT記入項目は、36a内のいずれかの索引記入項目または記憶コンテナ39内のデータ項目をアドレス指定しない。ポインタ記入項目36aの各々は、対応する辞書順データ項目に対するポインタもしくは参照可能索引であるか、または、コンピュータの記憶装置内に記憶されたデータ項目に関連付けられている探索キー1420の1つに対するポインタもしくは参照可能索引である。
コンパクト0完全木40のデータ記憶構造をその構成要素データ構造に関して考察する。図6aは、コンピュータシステム内の各ノードの構造を例示する説明図である。ノード34を一例として示しているが、その他は同一である。ノード34は2つの構造によって構成される。これらの構造の各々は、記入項目34cリストに対するヘッダから構成されているが、各々の構造はアレイまたは他の形態のデータ構造であることが可能である。一方の構造は、記入項目34cのリストを指定するマップヘッダ34aを有し、他方の構造は、他のリストから構成されることが可能な要素のリストを指定する複合部分木ポインタ34bである。
各索引ブロックに関連付けられた複合ヘッダCは、(木構造43の次の下位レベルがある場合に)木構造43の次の下位レベルを指定する。従って、図4では、複合ヘッダ47bが、枝の中の子ノード34及び35の部分木を指定する。各々の枝は、その木の下位レベルを指定する複合ヘッダを含んでも含まなくてもよい。ノード47のように複合ヘッダCが空ではない場合には、ノード47は「内側」枝タイプまたは「根」枝タイプのノードである。木構造の葉レベルでは、子ノードまたは部分木はノードに依存せず、複合ポインタ34b及び35bが各々にその木の別のレベルを指定しないノード34及び35に示されるように、個々の複合ヘッダは空である。複合ヘッダは、幾つかの関連情報項目を統合することによって部分木に構造を与える。図6bに示すような初期INITタイプ構造40′では、非NIL値が加えられ終わる前に、ノード47′のマップヘッダ47a′が、0の深さ値89′と、第1の条件(NIL条件)Tに設定された表示子ビット90′とを有する記入項目を指定し、これは、記憶コンテナ39′内のこの記入項目に関する対応データ項目が無いことを示している。
この複合構造の第1の要素(例えば、図4の42)は根レベルでは常に空であり、単に反転させられ、その結果として、根レベルの複合構造レイアウトが上記木の様々なサブレベルと類似しており、根索引ブロックヘッダ47aに連結した記入項目47cの数が、予め決められた最大索引ブロック数79である5よりも多い場合のように、ノード47の根索引ブロック47aが多すぎる場合には、新たな根レベルが生じさせられる必要がある。上記木の根レベル以外のより深いレベルにおける第1の要素42目的が説明されなければならない。
根レベル41における第4の要素は、ポインタ記入項目36aのリストを指定するポインタヘッダ36である。図4に示す第5の要素は、情報の実データ項目がその中に記憶されるコンピュータのメモリ8または記憶装置4内の記憶コンテナである。データ項目は、コンピュータシステムに記憶可能なあらゆる形態のデータであることが可能である。記入項目36aの各々は、索引ブロック記入項目34c及び35cの1つに対応する。記入項目36aの各記入項目は、コンテナ39内のデータに対する参照可能索引またはポインタを含む。
最後の2つの要素36及び39は木構造43とは別であり、様々な別個の方法で使用することが可能である。例えば、図4の上記実施様態と対照区別して、これら2つの要素を、木構造43に物理的に近接していない別の複合ポインタ構造の中に置くことが可能である。
探索キー1420とデータ記憶構造40は、求める項目をファイルシステムが容易に且つ効率的に発見することが可能であるように構成される。図4bに示すように、記憶コンテナ39は、探索キーによって表されるデータ項目を任意の順序で含む。各探索キーに関する辞書順に参照可能索引またはポインタは、ポインタ記入項目36a内に置かれる。最後に、各々の索引またはポインタがコンテナ39内のデータ項目の位置をアドレス指定する。同時挿入されるべき幾つかの項目が最初にバッファ内で辞書順にソートされ、その後で、任意の順序でコンテナ39内でソートされる。データ値の記憶を、当業者に公知の様々な方法で行うことが可能である。
木構造43に戻ると、表示子90を有効利用するために、根レベル41を除く任意のレベル(例えば、レベル64)における複合構造の第1の要素66は、カウント記入項目66aに対するカウントヘッダ66である。記入項目32または33のようなカウント記入項目66aの各々は、複合ヘッダ47bを介してノード47に連結された部分木レベル64内の対応する索引ブロック記入項目34c及び35c内の、Fに設定された表示子90を有する非NIL葉記入項目のカウントである。図4のレベル64に2つのノード34及び35が存在するので、このカウント構造は2つの記入項目32及び33を有する。第1の記入項目32は索引ブロック記入項目34cのカウントに対応し、第2の記入項目33は索引ブロック記入項目35cのカウントに対応する。第1の索引ブロック記入項目34cは4つの非NIL記入項目またはF記入項目80、81、82、83を含むので、カウント構造の第1の記入項目32は4のカウント値を含む。第2の索引ブロック記入項目35cは4つの非NIL記入項目84、86、87、88を含むので、第2の記入項目33は4のカウント値を有する。各レベルの各部分木の記入項目32及び33のような非NIL葉記入項目カウントは新たなデータ項目に対応する各々の新たな非NIL記入項目が対応索引ブロック内に挿入される時に増分され、対応索引ブロックから削除された各非NIL記入項目に関しては減分される。
データ記憶構造40に対して操作を行う時、及び、根レベル41から木構造43を下降する時には、レベル64のカウントヘッダ66と記入項目66aのような各部分木の第1の要素における値の集積によって、先行部分木内の非NILまたはF葉記入項目の、ポインタ索引psの形態のポインタ記入項目36aに対する情報アクセスが保たれる。記憶データ項目の対応ポインタ索引を得るためには、以前の部分木レベルからの先行カウントを、現在探索キーのキー区間に対応する記入項目までの現在葉索引ブロック内の処理済み非NIL記入項目のカウントに加える。この索引psは、データ項目の辞書順位置でもあるポインタ記入項目36a内のデータ項目のポインタ位置に対応する。
さて、図4aと図4bを参照して、探索キーのキー区間範囲とデータ項目を判定する方法の例を説明する。こうした判定で行うべき諸ステップに関する詳細な説明は、プログラム構造、特に図12の深さ探索手続きに関して本明細書で説明している。2進形式10101000の探索キーに対して探索を行うと仮定する。探索キーは、左から始めて値1、3及び5である探索キーの1ビットの順序値ビット位置を含むシーケンスによって表される。これに加えて、最終の値がそのシーケンス内の最後の値の後に加えられ、この最終の値は最大キー長さ(ビット単位)に1を加えた値であり、そのキーが1バイト最大値であるのでこの例では9である。結果として、探索キー10101000に関するシーケンスは1、3、5及び9である。この探索キーシーケンスは、木構造43内の索引ブロックの深さ値と比較される。最初に、根ノード47の索引ブロック記入項目47cの深さ値89が索引キーシーケンスの要素と比較される。深さ値がそのシーケンスの探索キー要素の順序値より小さい記入項目が発見されるまで、深さ値89の比較が繰り返される。これに加えて、現在索引ブロック47c内の記入項目に対する索引と、探索キーシーケンス要素の順序位置に対する索引とが保持される。記入項目30の深さ値が、探索キーシーケンスの第1の順序要素と比較される。両方が1に等しいので、探索キーシーケンス要素に対する索引が増分される。その後で、深さ値が順序値より小さくないので、索引ブロック内の記入項目に対する索引が増分される。
索引ブロック47cの第2の記入項目31の深さ値(0である)が、そのシーケンスの第2の順序要素(3である)と比較される。これら2つの値が互いに等しくなく、記入項目31の深さ値が順序値(3である)より小さい(即ち、0<3)ので、探索はこの索引ブロック内で終了し、更に、これが非葉ノード47であるので、記入項目31に対応する子索引ブロックが得られ、探索される。図4では、これは索引ブロック構造35a及び35cである。これに加えて、ポインタ記入項目36aに対するポインタ索引は、カウント記入項目66aの記入項目32内に記憶された値だけ増分される。このポインタ索引は、索引ブロック記入項目34c内の(F記入項目で示される)先行の非NIL記入項目の合計を含む。
35cの記入項目の任意の部分木レベルの探索の開始時に1に初期化される現在葉索引ブロック内の非NIL記入項目のカウントが、保持される。第1の記入項目84が非NILであるので、非NIL記入項目のカウントが1だけ増分される。親ノード47の47cで探索が終わった位置と同一の位置でファイルシステムがそのシーケンスの順序値の探索を再開するので、記入項目84の深さ値(3である)が、探索キーシーケンスの第2の順序探索値3と比較される。記入項目84の深さ値と順序探索キー要素3は等しい。従って、35c内の次の記入項目85がアクセスされる。更に、順序値3が探索キーの現在ビット位置に等しいので、探索キーシーケンスの次の順序値5が得られる。記入項目85はNIL記入項目であり、従って、非NIL記入項目のカウントは増分されない。その後で、記入項目85の深さ値は、探索キーシーケンスの第3の順序値5と比較される。これら2つの値が等しい(5=5)ので、索引ブロック記入項目35cの次の記入項目86が得られ、順序値シーケンスの次の要素(9である)が得られる。記入項目86は非NILであり、非NIL記入項目のカウントを2に増分する。これに加えて、記入項目86の深さ値89が、順序値9と比較される。深さ値7が探索キーアレイ内の順序値9より小さい(7<9)ので。探索が、この索引ブロック内で終了し、更に、これが葉ノード34なので、図2bと表1における葉Zに対応する正しい記入項目が発見される。
この点で、4に等しいポインタ索引psが2と合算され、その結果として6が得られる。この「6」は、8であるポインタ記入項目36aの6番目の記入項目を選択するために使用される。この6番目の記入項目は、記憶コンテナ39内の8番目のデータ項目に対する参照可能索引であり、図4bで示されるような2進形式の探索キー10101000に対応する。
従って、記憶構造40は、T/F表示子とカウント構造でそれらを置き換える図3a及び図3bの先行技術の外側NIL(ダミー)記入項目の記憶の必要を無くする。木構造43と探索キー1420は、Fに設定された葉レベルにおいて表示子ビットの数のカウントを維持する記入項目66aと共に、ポインタ記入項目36aに対する索引を維持するために使用される。この場合には、ポインタ記入項目36aは、記憶コンテナ39内に記憶された項目に対する索引を含む。
更に、ポインタヘッダ36とポインタ記入項目36aが木構造43の残りのものとは別であり、探索キー1420に対する参照可能索引を辞書順序で記憶するので、木構造43を全く使用せずに辞書順序で探索キーまたはデータ項目をアクセスすることが可能である。位置指定されるべきデータ項目の辞書順の位置を知ることによって、記入項目36aだけにアクセスすることによってデータ項目の位置指定することが可能である。
本発明のC0木を構築するために、図6bに示されるようなINITタイプの構造が作成される。その後で、個々の探索キーを下記のプログラム構造の方法で挿入する。索引ブロックが満杯である時には、下記の方法で索引ブロックを分割する。従って、好ましい実施様態のC0木データ記憶構造を構築することは、既に形成された好ましい実施様態のC0木に中に辞書順序で新たなデータ項目またはキーを入力するために使用される、索引付け情報とノードの記憶の反復処理と索引ブロック分割方法との問題である。
C)コンパクト0完全木表現におけるキーの記憶及び検索のプログラム構造
次に、事前定義された機能を各探索キーに対して行うために木構造内の幾つかの探索キーを逐次的に処理する方法と、木構造内の探索キーを位置指定するための方法と、木構造における各探索キーに関する情報を記憶し、索引付けし、本発明の索引ブロックを分割するための方法を説明する。
幾つかの探索キーを逐次的に処理するための方法は、各探索キーに対応する索引ブロックを求めてデータ記憶構造内をくまなく探索することと、探索のような事前定義機能を行うこと、または、木構造によって索引付けられるべき探索キーを挿入することと、各索引ブロック内の記入項目の数が予め決められた総数を上回るかまたは最大数よりも大きくなる時に索引ブロックを分割することと、木構造内に挿入されるべき探索キー内の空ストリングを処理することとを含む。
C0木構造のコンピュータプログラム構造を、図7から図19のフローチャートに概略的に示す。このプログラム構造全体に亙って使用されるマクロ定義の要約を表3に示し、この表3ではマクロ名と簡単な説明が示される。同様に、図7から図19のフローチャートの要約が表2に示され、この表ではフローチャートの参照先とその入力と変数と出力とが示される。以下では、各々の手続きを表2と表3を参照しながら説明する。説明の便宜上、図7から図19を参照して説明する各ステップを行うためのブロックを括弧内に示す。
1)逐次処理手続き
図7は、辞書順にソートした探索キーに対して、事前定義された機能がメモリ8(図1b)内のバッファ上で実行される逐次処理手続きを示す。プログラムは最初に幾つかの探索キーをフェッチし、バッファ内で探索キーを辞書順にソートする。その後で、次に示す各ステップを行う。
プログラム制御下のコンピュータは、記憶コンテナ39から、ポインタヘッダ36によって指定されたポインタ記入項目36aの最初の記入項目に関連付けられた記憶キー(stored key)をフェッチする(100)。記憶キーが空であるかどうかを調べるために記憶キーを検査する(102)。このステップは、空ストリング処理ルーチンの一部であり、ポインタ記入項目36aの最初の記入項目が以前に空ストリングデータ項目を索引付けたかどうかを調べるための検査を行う。
記憶キーが空である場合には、ポインタ記入項目36a内に空ストリングが存在することを示すために、木構造内の非NIL記入項目の合計であるポインタ記入項目36aに対する初期索引値psを1に設定する(104)。記憶キーが空でない場合には、初期索引値psを0に等しく設定する(106)。
探索キーKをバッファからフェッチする(108)。その後で、空ストリングを記憶コンテナ39に加え且つポインタ記入項目36aに加えるべきかどうかを判定する目的で、その探索キーが空である(即ち、空ストリングである)ことを調べるために探索キーを処理する(110)。
探索キーが空でない場合には、その変数の初期化が生じることになる。内側索引ブロックから部分木枝に下降する時に以前の記入項目の深さ値を記憶する後続変数diと、現在索引ブロック内の境界ノードの深さdjの変数を、0に初期化する。データベースシステムによって処理されている現在探索キーの現在の終端ビット位置を参照する変数bKを1に初期化する(112)。
実行すべき実際の事前定義機能を、フラグLOADINGを調べることによって決定する(114)。LOADINGが表示される場合には、このシステムが、各探索キーに関する索引付け情報を記憶するための挿入機能を逐次処理し、現在ノードが根タイプかINITタイプのどちらであるかを調べるためにノードタイプの検査を行なう(116)。システムがLOADINGではない場合には、現在探索キーに対応するキー区間を位置指定するために逐次探索を行い、ノードが根タイプかINITタイプのどちらであるかを調べるためにノードタイプの検査を行なう(118)。
システムがLOADINGであり且つノードが根タイプである場合には、「枝挿入手続き」(120)を行う。ノードがINITタイプである場合には、葉挿入手続きを行う(122)。ノードが根タイプであることをステップ118が示す場合は、枝探索手続きを行う(124)。ステップ126中に木43の最高位のノードがINITタイプである場合には、葉探索手続きを行う(126)。
木43が変更された可能性があるステップ120、122、124、126のいずれかを行った後に、現在索引ブロック内の記入項目の数が、予め決められた許容最大索引ブロック数79(図4)よりも多いかどうかを調べるために、ノード・オーバーフル(node overfull)検査を行う(128)。現在記入項目の数が最大索引ブロック数よりも多い場合には、後述の根分割手続き(130)を行う。そうでない場合には、後述するブロック140にプログラムが進む。
ステップ110に戻り、キーKが空であり、且つ、記入項目p[1]によって参照される記憶キーKiが空である場合には、更に別の空ストリング処理が発生し、ポインタ記入項目36aに対する索引psが上記のように1に等しいかどうかを調べるために検査を行う(132)。
psが0である場合には、ステップ102で行った検査が、記憶コンテナ39内に記憶された空ストリングを発見しなかったことを、システムが認識する。LOADINGが真であり且つロード要求がファイルシステム上で行われているかどうかを調べるために、検査を行う。真である場合には、木構造内への探索キーのロードが行われており、1つの項目の追加(即ち、空ストリングの追加)を表示するためにポインタ記入項目36aに対する索引psを1に設定する(136)。
この点で、探索キーが空であることと、ロード要求が実行されていることの判定が完了する。従って、探索キーは空ストリングである。ポインタヘッダ36aに連結した第1の記入項目に1つの要素を挿入し、ポインタベクトルp[1]の第1の位置を記憶コンテナ39内のキーのアドレスに設定する(138)。
最後に、更に別の探索キーがメモリ8のバッファから分析されることになっているかどうかを調べるために、更に別のキーの判定を行う(140)。そうである場合には、ステップ108へのループがその後に続く。更に別の探索キーの分析が不要である場合には、逐次処理手続き(199)の外に出る。
2)葉探索手続き
逐次処理手続きまたは枝探索手続きによって呼び出される葉探索手続きが図8に示されている。プログラム構造のこの部分は、現在探索キーに対応するキー区間を有する木構造内の記入項目を発見し、こうして、探索キーが以前に索引付け済みである場合に、木構造内の探索キーを位置指定する。次に示す各ステップが実行される。
変数j及びcを1に初期化し、d′を、境界ノードの深さdjに等しく設定する(200)。後述する深さ探索手続きは、現在探索キーに対応するキー区間を有する現在索引ブロック内の記入項目を位置指定する(202)。位置指定された記入項目ejの表示子がNIL表示子である(即ち、表示子90がTである)かどうかを調べるための判定を行う(204)。
記入項目ejがNIL記入項目である場合には、現在探索キーが木構造中に発見されない(206)。この記入項目が非NILである(表示子90がFである)場合には、非NIL記入項目の合計カウントc+psで索引付けられたポインタ記入項目36aの記入項目p[c+ps]を使用することによって、記入項目ejに対応する記憶キーを記憶コンテナ39からKi内にフェッチする(208)。以前の索引ブロック内の非NIL記入項目psと、深さ探索手続きによってフェッチされた現在索引ブロック内の非NIL記入項目のカウントcとの合計が保持されるので、この合計カウントは、ポインタ記入項目36a内の正しい位置または索引を与える。これら2つの値を加算することによって、記入項目ejに関連付けられたポインタ記入項目36aの要素が発見される。その次に、葉記入項目ejに対応するキーと探索キーが同一の値であるかどうかを調べるために、フェッチされたキーKiを探索キーKと比較する(210)。これら2つのキーが等しくない場合(NE)には、探索キーKが発見されなかったのであり、木構造内には存在しない(212)。
これらのキーが等しい場合には、適切な葉記入項目とキーKとが発見されたことになる(214)。その後で、次の探索キーにアクセスし、現在探索キーと、処理すべきバッファ内の次のキーとの間の区別ビットb′を判定するために、後述する「バルク処理手続き」を行う(216)。
その次に、処理すべき次の探索キーが現在索引ブロックのキー区間範囲内に含まれているかどうか(即ち、この手続きの初期化でd′が設定または割当てられる場合に、d′<b′かどうか)に関する判定を行う(218)。次の探索キーが現在索引ブロックのキー区間範囲内である場合には、bKリセット機能を再開する(220)。この好ましい実施様態では複数のキーが値の辞書順に処理されるので、各々の探索手続きまたは挿入手続きの完了時に探索がそこで終了したキービット位置を呼び戻すことによって、次の探索キーの探索の処理をそこで再開する適切なキービットを判定することが可能である。現在索引ブロックのキー区間範囲内に現在キーが含まれていない場合には、保持された区別ビットb′とキービット位置bKの適切な値を伴って、葉探索手続きの現在の反復を呼び出したルーチンへ復帰する(299)。
3)葉挿入手続き
ロード要求がステップ114で行われている場合には、記憶装置4内に以前に存在しなかったソートされたキーのバッファからの新たなキーが、データ記憶構造に個別に加えられる。葉挿入手続きを図9に示すが、この手続きは、新たな探索キーの正しい配置を判定しキーの索引情報を記憶することによって、各々の新たな探索キーを挿入する。葉挿入手続きの各ステップを次に説明する。
この手続きの変数f=0、j=1、及び、d′=dj(境界深さ)を初期化する(300)。現在探索キーをそのキー区間が含む記入項目を位置指定するために深さ探索手続きを行う(302)。その後で、深さ探索手続きによって位置指定された記入項目ejがNIL記入項目である(T表示子90を有する)かどうかを調べるために、検査を行う(304)。
その記入項目がNIL記入項目である場合には、挿入記入項目のポイントが発見される。非NIL記入項目として挿入すべき新たな記入項目の追加を反映するために、及び、そのキーに対する新たに挿入されたポインタを反映するために、変数cと変数nを増分する(306)。要素をポインタ記入項目36a内に挿入し、記憶コンテナ39内に記憶されているそのキーとその参照データ項目とのアドレスに割り当てる(308)。記憶コンテナ39内の記憶要素を有する記入項目とポインタ記入項目36aとの結合を反映するために、記入項目ejの表示子をNIL(T)から非NIL(F)に変化させる(310)。
ステップ304において記入項目がNIL記入項目でない場合には、ポインタ記入項目36a要素p[c+ps]でアドレス指定されたキーをフェッチし、Ki内にロードする(312)。フェッチしたキーKiと現在キーKとが等しいかどうかを調べるために(即ち、現在キーが記憶コンテナ39内に既に存在するかどうかを判定するために)フェッチしたキーKiと現在キーKを比較する(314)。フェッチしたキーKiと現在キーKとが等しい場合には、処理すべき次のキーが現在索引ブロック内にあるかどうかを判定するために、バルク処理手続きを行う(316)。
現在キーとフェッチしたキーとが等しくない場合には、現在キーが存在しなかったので、ポインタ記入項目36aに加えられた新たな記入項目のカウントnを増分する(318)。その後で、何らかのダミー記入項目を加えるために、及び、その新たな記入項目の正しい配置を判定するために、後述する深さ追加手続きを行う。処理されている現在キーがフェッチされたキーKi以上の大きさであるかどうかを表し(320)且つポインタ記入項目36a内の位置または索引を表示するフラグFを、そのルーチンが戻す。ポインタ記入項目36a内に要素を挿入し、先行部分木内の非NIL記入項目の数psと現在索引ブロックの非NIL記入項目の数cとフラグfの値との合計に対応する正しい索引付けられた配置に上記キーのアドレスとその参照データ項目を割り当てる(322)。
その後で、バルク処理ルーチンを行い、区別ビットb′を戻す(324)。更に、現在索引ブロック内の記入項目の数がMAXより大きい(即ち、許容最大値より大きい)かどうかを調べるために検査を行う。最大値を、索引ブロックの記入項目に関して予め決められた最大索引ブロック数79(例えば、図4の場合には4)よりもはるかに大きい非常に高い閾値に設定する(326)。
現在索引ブロック内の記入項目の数が最大値よりも大きくない場合には、バルク処理ルーチン中にフェッチされた処理対象の次のキーが現在索引ブロックのキー区間範囲内にあることを表示するb′よりd′が小さいかどうかに関して検査を行う(328)。そうである場合には、ステップ302に戻る前にbKリセット手続きを行う(336)。いずれにしても、最終的には、この手続きは、区別ビットb′の値、現在キービット位置bK、及び、ポインタ記入項目36a内の新たな要素の数を伴って、上記呼出し手続きに戻る。
4)枝探索手続き
図10の枝探索手続きが図7の逐次処理手順から呼び出される場合には、葉探索手続きを行うために正しい葉(LEAF)レベルと索引ブロックを位置指定する目的で、C0木データ記憶構造の枝をくまなく探索するために、次の諸ステップが行われる。
最初に、変数j=c=1及び変数d′=dj(djは境界深さである)を初期化する(400)。現在キーを含むキー区間を有する現在内側枝索引ブロック内の適切な記入項目を位置指定するために、深さ探索手続きを行う(402)。システムが枝レベルにあるので、記入項目が木構造の部分木に関連付けられる。
枝の記入項目ejに対応する位置指定された子ノードをフェッチし(404)、その後で、ノードタイプを判定するために検査する(406)。子ブロックのノードタイプが葉である場合には、葉探索手続きを行う(408)。そのノードタイプが葉でない場合には、即ち、内側タイプである場合には、枝探索手続きを行う(410)。
この手続きは、現在索引ブロックのキー区間範囲内に現在キーがあるかどうか(即ち、d′<b′であるかどうか)を判定する(414)。そうである場合には、後述するbKリセット手続きを行い(416)、ステップ402へのループを実行する。そうでない場合には、プログラムが、区別ビットb′の値とキービット位置bKを逐次処理手続きに戻し、枝探索の現在の反復が完了する(499)。
5)枝挿入手続き
バッファ内のソート済み探索キーに対して行なわれるなければならない事前定義された機能がロードであり、逐次処理手続きのステップ116の索引ブロックタイプが根索引ブロックであることを判定し、その後で、枝挿入手続きをステップ120で呼び出し、現在探索キーのキー区間を含む葉索引ブロックを位置指定するまで、図11に示す通りのステップを後述するように行う。
現在探索キーをその区間が含む記入項目に対する索引を1に設定し(即ち、j=c=1)、現在境界深さ値を割り当て(即ち、d′=dj)、親索引ブロックに関連付けられた新たなキーのカウントをゼロに設定する(即ち、cn=0)(500)。その後で、現在キーをそのキー区間内に有する記入項目を位置指定するために、深さ探索手続きを行う(501)。探索キーの探索と、探索キーをそのキー区間が含む現在索引ブロック内の記入項目に対する索引との探索処理を再開するために、この手続きはキービット位置を戻す。
コンピュータが枝挿入手続きを行っているので、現在索引ブロックの索引ブロックタイプは、内側または根である。記入項目のキー区間内に現在キーを有する記入項目を位置指定した後に、現在索引ブロックの深さ記入項目に対する索引jが1より大きいならば、後続の深さ変数diを更新する(502)。プログラムは、位置指定記入項目が現在内側タイプ索引ブロックの最初の記入項目ではないことを認識し、後続深さ変数diを、現在索引ブロック内の位置指定記入項目に先立つ記入項目ejの深さ値に更新する(503)。その後で、変数djを記入項目ejの深さに設定する(504)。
この時点で、索引ブロック深さ記入項目と子索引ブロックの部分木とを含む、位置指定された記入項目に対応する、現在索引ブロック内の部分木V内のj番目の子である、索引付けられた子ノードをフェッチする(505)。このステップは、非NIL記入項目psの更新された合計によってポインタ記入項目36aを索引付けするために、非NIL記入項目psの更新された合計を戻す。更に明確に述べれば、木の現在レベルの複合構造の第1の要素(即ち、カウント構造)が、先行の部分木に関する非NIL記入項目カウント情報を含むので、jの値までのカウント記入項目の要素を合算し、非NIL記入項目のカウントの事前の合計に加え、新たな合計に達する(506)。
その後で、ステップ504からのフェッチした子ノードのタイプを判定する(507)。この子ノードが葉タイプである場合には、葉挿入手続きを行う(508)。この子ノードが内側タイプである場合には、枝挿入手続きを行う(510)。
枝挿入または葉挿入から処理を戻した後に、現在索引ブロックに対応するカウント記入項目c[j]を、「その以前の値」+「子索引ブロックの記入項目に関連付けられた新たなキーの数n」に設定する(514)。親索引ブロックに関連付けられた新たなキーのカウントcnを、子索引ブロックの記入項目に関連付けられた新たなキーのカウントnだけ増分する(514)。
その後で、上記手続きが、索引ブロックがオーバーフル(overfull)であるかどうかを判定することによって、現在子ノードを分割するかどうかを判定する(520)。索引ブロック記入項目が、索引ブロック1つ当たりに許容される記入項目の予め決められた最大索引ブロック数を越えてしまった場合には、後述する子分割手続きを行う(522)。
現在索引ブロックのキー区間範囲内に現在キーがある(即ち、d′<b′)かどうかを調べるために検査を行う(534)。そうである場合には、区別ビットb′をゼロに設定し、これは、子分割が生じたので根レベルにまで挿入を終わらせる(526)。両方の場合とも、子索引ブロックの記入項目に関連付けられた新たなキーの数nを、現在索引ブロックに関する新たなキーのカウントに対する戻り変数として設定する(536)。
索引ブロックがオーバーフルでない場合には、現在索引ブロックのキー区間範囲内に現在キーがある(即ち、d′<b′)かどうかを調べるための検査を行う(534)。現在キーが現在索引ブロックのキー区間範囲内にある場合には、bKリセット手続きを行う(538)。いずれにしても、この手続きは、子索引ブロックに加えられた新たなキーのカウントn、区別ビットb′、及び、キービット位置bKを伴って、呼出し手続きに戻る(599)。
6)深さ探索手続き
図12に示すように、C0木データ記憶構造上で探索または挿入を行う毎に、キー区間が現在キーに対応する現在索引ブロック内の記入項目を位置指定するために深さ探索手続きを行なう。
索引変数kを1に設定し、非NIL記入項目のカウントcである入力変数を減分する(600)。この手続きは、現在キーの探索を開始するために、現在キービット位置bKと少なくとも同じ大きさである現在探索キーの順序要素b[k]を得る(602)。この順序要素は、分析されている現在探索キー内の2つのアルファベット文字の1ビット位置の値(即ち、0と1)から構成される。現在記入項目ejがNIL記入項目であるかどうかに関して判定を行う(604)。この記入項目がNIL記入項目でない場合には、現在索引ブロックの非NIL記入項目のカウントcを増分する(606)。
その後で、この好ましい実施様態は、現在索引ブロックの記入項目ejの深さ値djが現在順序要素b[k]に等しいかどうかを判定し(610)、等しくない場合には、現在順序要素b[k]より小さいかどうかを判定する(612)。等しい場合には、索引変数kを増分する(616)。現在順序要素b[k]に等しくなく、それより大きい場合には、索引ブロックの深さ記入項目に対する索引変数jを増分する(618)。現在順序要素b[k]より小さい場合には、現在キービット位置bKを、現在順序値b[K]に等しく設定する(614)。最後に、この手続きが呼出しルーチンに戻る(699)。現在キーKのキー区間に対応する深さ記入項目を索引付けるために使用される索引変数の値、ポインタ記入項目36aにアクセスするために使用される現在索引ブロックの非NIL記入項目のカウントc、及び、処理されている索引キーの現在キービット位置をファイルシステムが呼び戻すことを可能にする現在キービット位置bKの決定が戻される。
6a)多重レベル探索
探索キーを探索するための適切なプログラム構造を説明してきたので、次に、2つ以上のレベルから構成されるC0木の探索キーのキー区間範囲とデータ項目を判定する方法のより詳細な例を、図5と表4を参照しながら説明する。データ記憶構造1540は、3つのレベル、即ち、根レベル、内側レベル、及び、葉レベルから構成される。この例に適していない構造1540内の幾つかの情報項目は図5に示されておらず、文字Xで置き換えられている。従って、現在表示子ビットが、1570のような葉レベル構造における対応データ項目の存在を表示するだけなので、根レベル1541と内側レベル1564の索引ブロック記入項目は、現在表示子ビットを表すXを有する。更に、記入項目1575c以外の、葉レベルにおける索引ブロック記入項目の各々の深さ値は、この探索の例では使用されていないので、Xとして示されている。最後に、ポインタ記入項目1536aと記憶コンテナ1539との内容は、この例に必要でないので、特に説明していない。
表4に示される通りに、探索キー10011001に対して探索を行うと仮定する。検索キーは、探索キー内の1ビットの順序値ビット位置を含むシーケンスb[k](左から始めて1、4、5、8である)によって表現される。上記の例の場合と同様に、最後の値9が、そのシーケンス内の最後の値の後に加えられる。従って、シーケンスはb[k]=<1,4,5,8,9>である。最初に、根ノード1547の索引記入項目1547cの深さ値89を、探索キーシーケンスの要素と比較する。索引ブロック記入項目1547に対する索引jが維持され、探索キーシーケンスの順序位置に対する索引kが維持される。表4のステップ1では、記入項目1530の深さ値d[j]を、探索キーシーケンスの第1の順序要素b[k](1に等しい)と比較する。深さ値d[j]がその第1の順序要素b[k]よりも大きいので、索引ブロック記入項目1547cに対する索引jを増分する。
表4のステップ2では、索引ブロック記入項目1547cの第2の記入項目1531の深さ値d[j]を、第1の順序要素b[k]と比較する。これらが互いに等しいので、探索キーシーケンスに対する索引kを増分する。その後で、索引ブロック記入項目1547cに対する索引jを増分する。
ステップ3においてj=3でk=2であるので、第3の記入項目1532の深さ値d[j]を第2の順序要素b[k]と比較する。これら2つの値が互いに等しくなく、且つ、記入項目1532の深さ値d[j]が順序値b[k]よりも小さい(即ち、0<4)ので、探索は、1547aが先頭の索引ブロック内で終わる。これは非葉ノード1547なので、記入項目1532に対応する子ノードと索引ブロックが得られ、探索される。図5では、これは、部分木1570と索引ブロックヘッダ1535aと記入項目1535cとを有するノード1535である。これに加えて、コンピュータシステムが子索引ブロックにおいて容易に且つ効率的に探索手続きを再開することが可能であるように、終端キービット位置bKを現在索引付け順序値b[k]にセットする(即ち、bK=4)。
これに加えて、表4のステップ4に示されるように、内側レベル1564のカウントヘッダ1556の記入項目1557及び1558が、探索されるべき部分木である第3の記入項目に先行するので、ポインタ構造1536に対するポインタ索引psが、記入項目1557及び1558内に記憶された値だけ増分される。このポインタ索引psが、このノード1535の以前の兄弟の中の先行する非NIL記入項目(F記入項目で示される)の合計を含む。従って、記入項目1557はノード1537の複合ヘッダCに依存する非NIL葉記入項目に対応し、記入項目1538はノード1538の複合ヘッダCに依存する非NIL葉記入項目に対応する。従って、8つの非NIL葉記入項目がノード1537に依存し、6つの非NIL記入項目がノード1538に依存するので、ポインタ索引psは、現時点では14に等しい。
表4のステップ5では、索引変数jが1に初期化される。記入項目1535cの第1の深さ値d[j]が、第2の順序探索値b[k]と比較される。(図12のステップ602でコンピュータシステムが索引kを増分し、親ノード1547の探索が終了した時に4に設定された終端キービット位置bKより大きいかそれに等しい探索キーシーケンスにおいて順序要素を得るので、4に等しい第2の順序値が使用される。)d[j]がb[k]に等しいので、探索キー配列に対する索引kが増分される。その後で、記入項目1535cに対する索引jが増分される。
ステップ6では、索引ブロック記入項目1535cの第2の記入項目1554の深さ値d[j]が、5に等しい第3の順序要素b[K]と比較される。深さ値d[j]が順序要素b[K]より小さい(即ち、2<5)ので、1535aが先頭にあるこの索引ブロック内で探索が終了する。ノード1535が内側ノードであるので、記入項目1535に対応する子ノードと索引ブロックが得られる。図5では、これはノード1575である。終端キービット位置bKが、現在索引付け済みの順序値b[k]に設定される(即ち、bK=5)。その後で、ポインタ索引psがステップ7で更新され、ノード1575の以前の兄弟の中の非NIL記入項目の数を追加して含む。葉レベルでは、カウントヘッダ1560に連結した記入項目1561のような各カウント記入項目が、葉構造1570内の個々のノード内の非NIL記入項目の数に対応し、第1のカウント記入項目1561が、葉構造1570内の第1のノード1576内の非NIL記入項目の数に対応する。従って、ポインタ索引psは、その以前の値である14にカウント記入項目1561の値(5)を加えた19に等しい。
索引変数jと索引変数kを再び1に設定する。コンピュータシステムが索引kを増分し、終端キービット位置bKより大きいかそれに等しい順序要素b[k]を得る。従って、それは、5に等しい第3の要素を得る。
記入項目1575cの探索の開始時にゼロに初期化された非NIL記入項目のカウント索引cが維持される。順序要素b[k]がステップ8で索引ブロック記入項目1575cの記入項目1580の深さ値d[j]よりも小さいので、記入項目1575cに対する索引が増分される。記入項目ejがNIL記入項目なので、記入項目1575cに対する索引cは増分されない。ステップ9では、順序要素が再び記入項目1581の深さ値d[j]よりも小さい。従って、索引jが増分される。記入項目ejが非NIL記入項目なので索引cが増分される。ステップ10では、非NIL記入項目1582の深さ値d[j]が現在順序要素b[k]に等しい。従って、索引kも増分される。
ステップ11では、第4の非NIL記入項目1583の深さ値d[j]が、第3の順序要素b[K]と比較される。同様に、その値が等しい(即ち、8=8)。索引k、j及びcが増分される。最後に、第5の記入項目1584の深さ値d[j]が、第4の順序要素b[k]と比較される。この深さ値d[j]は順序要素b[k]より小さく(即ち、6<9)、葉レベルが現在において探索されているので、探索キー10011001に対応する正しい記入項目が発見されている。
この点で、ステップ13で、ポインタ索引psがカウント索引cだけ増分される(即ち、19+4=23)。これは、記入項目1584に先立ち且つこれを含む非NIL記入項目の合計を与える。記憶コンテナ1539内の正しいデータ項目に対する参照可能索引(または、ポインタ)を含むポインタ記入項目1536a内の23番目の記入項目を選択するために、この23が使用される。
7)バルク処理手続き
図8と図9に示されるバッファ内で処理するための次のキーを得るバルク処理手続きが、図13に示されている。この手続きの目的は、メモリ8内のバッファ内で処理して以前のキーKと次のキーKiとの間の区別ビットを判定するために、次のキーKiをフェッチすることである。
この手続きは、上記バッファ内に更に別のキーが存在することを判定することである(700)。上記バッファ内に更に別のキーが存在する場合には、逐次処理するためのそのバッファ内の次のキーをKi内にフェッチする(702)。次に、以前のキーKと処理されるべき現在キーKiとが等しいかどうかに関する判定を行う(704)。逐次処理されるべき探査キーが上記バッファ内で辞書順にソートされるので、この好ましい実施様態は、複製キーが存在する時を判定し、この探索キーを処理しないことが可能である。従って、このステップがこれら2つのキーが互いに等しいと判定する場合に、ステップ700へのフィードバックループが行われる。これら2つのキーが互いに等しくない(NE)と判定される場合には、これら2つのキーの区別ビットが発見される(706)。その後で、好ましい実施様態が現在キーを設定する。言い換えれば、プログラムは、処理されるべき新たなキーKiを現在キー変数Kに移す(708)。
現在バッファ内に処理されるべきキーがもう存在しない場合には、区別ビットb′を0に設定し、これは根レベルに対する処理を終了させる(710)。これを行うことによって、特にステップ218、328、414、524、534において次のキーが現在索引ブロックのキー区間内にあるかどうかを判定する時に、上記プログラム構造の手続きは、バッファ内に処理すべきキーがもう存在しないと判定することが可能である。最後に、この手続きが、区別ビットb′と新たなキーKとを伴ってその呼出しルーチンに戻る(799)。
8)bKリセット機能
次に、図8、図9、図10、図11に示したbKリセット機能を、図14に詳細に示す。この手続きは、現在探索キーに関する逐次処理を再開するためにキービット位置bKを判定する。逐次処理された探索キーがバッファ内で辞書順であるので、この手続きは、キービット位置を判定することが可能である。順序付けられたシーケンスのこの特性は、この好ましい実施様態が設計通りに機能することを可能にする。この手続きは、最初に、現在記入項目ejに対する現在索引jが現在索引ブロック内で1番目であるかどうかを判定する(800)。そうである場合には、区別ビットb′を現在キービット位置bKと比較する(802)。区別ビットb′が少なくともキービット位置と同じ大きさである場合には、キービット位置bKを後続の変数diと区別ビットb′とに対して比較する(804)。
後続変数di、bKリセット機能に対する入力変数、及び、現在キービット位置bKに対して、区別ビットb′を比較する(806)。後続変数diが、現在キービット位置bKより小さい区別ビットb′よりも小さい場合には、キービット位置bKを、「後続変数di」+1に設定する(808)。
ステップ800が、深さ記入項目に対する現在索引jが1でない(NE)と判定する場合には、区別ビットb′が現在キービット位置bKより小さいかどうかに関する判定を行う(810)。そうである場合には、キービット位置bKを区別ビットb′の値に設定する(812)。いずれにしても、キービット位置bKの値を戻す(899)。
9)深さ追加手続き
葉挿入手続きからステップ320によって呼び出される深さ追加手続きを、図15に示す。この手続きの目的は、現在索引ブロックに記入項目を加えることによって、記入項目によって定義されたキー区間内に探索キーが属する位置指定記入項目に関連した現在探索キーの索引付け情報を記憶するための、索引記入項目の正しい配置を判定することである。現在探索キーと以前の探索キーの両方が同じキー区間内に属するので、これが生じる。
正しい配置を判定するために、このプログラムは、図2bに示される木1430のような概念0完全木内の位置指定記入項目と以前に位置指定されたキーとに関連付けられた葉ノードの深さを判定しなければならない。これはC0木表現の中に記録されていない。境界ノードの深さだけが記入項目内に記録されている。図2bに示す通りに、概念0完全木内の葉ノードの深さは、コンパクト0完全木の定義によって決定することが可能である。この手続きは、最初に、現在記入項目ejが索引ブロック内の1番目であるかどうかを判定する(900)。そうでない場合には、索引ブロック内の現在記入項目の深さd[j]を、以前の記入項目の深さd[j−1]と比較する(902)。この比較に基づいて、位置指定記入項目の深さが、LT以前の記入項目の深さよりも小さい場合には、概念0完全木内の葉ノードの深さliを索引ブロック内の以前の記入項目の深さd[j−1]に等しく設定する(908)。位置指定記入項目の深さがGTより大きい場合には、概念0完全木内の葉ノードの深さliを現在記入項目の深さd[j]に等しく設定する(906)。最後に、位置指定記入項目が索引ブロック内の1番目である場合には、概念0完全木内の葉ノードの実深さliを、親索引ブロックの以前の記入項目の深さ値である現在後続変数diに等しく設定する(904)。
その次に、索引変数iを、索引ブロック記入項目に対する現在索引jに設定し、処理されている現在キーKと位置指定記入項目によって索引付けられたキーKiとの区別ビットb′を判定する(910)。区別ビットb′が概念0完全木の葉ノードの実深さliより小さい場合(912)には、追加されるべき索引記入項目が前順シーケンス内の位置指定記入項目の後にくる。現在探索キーのアクセス経路と位置指定記入項目のキーのアクセス経路との間の区別を保存するために、更に別の記入項目を現在木構造に加えなければならない。概念木が依然として0完全であることを確保するために、表示子ビットが真に設定されるNIL記入項目を加えることが必要である可能性もある。
概念0完全木内の葉ノードの深さliに1を加えた値よりも大きい探索キーの順序要素b[k]が得られる。その後で、現在索引付き順序要素b[k]を、区別ビットb′と比較する(918)。これが、LT区別ビットb′よりも小さい場合には、現在索引付け記入項目eiの前に、記入項目を現在索引ブロック内に挿入する(924)。新たに挿入された索引付き記入項目eiの深さ値を、現在探索キーの現在索引付き順序位置b[k]に設定し、現在索引付き記入項目eiの表示子を、NIL記入項目を示すTに設定する(932)。現在探索キーの順序要素に対する索引kを増分する(938)。その次に、現在索引ブロックの記入項目に対する索引iを増分し(940)、ステップ918でループが継続する。処理されている現在キーKが、位置指定記入項目によって以前に索引付けられたキーKiより大きい場合(920)には、フラグfを1に設定する(922)。処理されている現在キーKが、位置指定記入項目によって以前に索引付けられたキーKiより小さい場合には、フラグfをゼロに設定する(926)。現在索引付け記入項目eiの前に記入項目を挿入する(930)。新たに挿入された索引付き記入項目eiの深さ値を区別ビットb′に設定し、現在索引付け記入項目の表示子を、非NIL即ち(F)に設定し(934)、この手続きがフラグfを呼出しルーチンに戻す。
10)分割ルーチン
次に、特に、索引ブロック内の記入項目の数が予め決められた最大索引ブロック数より大きいことを判定した後での索引ブロックの分割と、記入項目の数が閾値最大数よりの大きいことを判定した後のブロックの分割とに関して、索引ブロックを分割するための方法を説明する。
10a)根分割手続き
根分割手続きを図16aに示し、分割されている根ノードの例を図16bと図16cに示す。図16aのこの手続きの説明を参照しながら、図16bと図16cの例を更に詳細に説明する。この手続きの目的は、索引ブロックが予め決められた最大索引ブロック数に達した時に、または、索引ブロックが混入項目の最大閾値数THに達したとプログラムが判定する時に、根ノード及び索引ブロックを分割することである。この手続きの各ステップは次の通りである。
図16bに示す古い根ノードRを分割し、図16cの索引ブロックI′と部分木V′とを含む新たな根ノードR′を生じさせる。この古い根ノードは、新たな根ノードの部分木V′に依存する。新たな根ノードI′、V′を生じさせ(1000)、分割されるべき根索引ブロックI内の最小深さ値を有する深さ記入項目を判定するために、後述する図18の最小深さ手続きを呼び出す(1002)。新たな根索引ブロックI′の第1の記入項目e1の深さ値を、古い根ノードRの第1の索引ブロックIの判定された最小深さ値dminに設定し(1004)、図16bに示すように、第2の記入項目e2の深さ値を、古い根Rの索引ブロックIの最後の深さ値である0に設定する(1006)。新たな根R′の複合部分木V′を、分割されている古い根ノードRに連結させる(1008)。個々の部分木の各々に依存する非NIL記入項目の合計を判定し、カウント構造の記入項目c内に配置し、この場合には、第1の記入項目c[1]が第1の部分木V0に対応し(1010)、第2の記入項目c[2]が第2の部分木V1に対応する(1012)。しかし、上記古い根ノードRが現在は葉レベルである場合には、カウント構造記入項目c[1]及びc[2]が、その個々の索引ブロックI0及びI1内の非NIL記入項目の数を含む。後述するノード分割手続きが、古い根ノードI、Vを、2つのノードと2つの索引ブロックとに分割し、第2の索引ブロックI1内の記入項目の数に等しい値nを戻す(1014)。新たな根ノードR′に依存する2つの索引ブロックの子索引ブロック即ち第2の索引ブロックI1がオーバーフルである(即ち、n>TH)場合には(1016)、第2の子ノードを得て(1018)、この子ノードを分割する(1020)。
新たな根ノードR′の複合部分木V′に依存する第1の索引ブロックI0がオーバーフルである場合には(1022)、第1の子ノードが得られ(1024)、分割される(1026)。いずれにしても、この手続きから出る(1099)。図16bと図16cに示すように、以前には1つの索引ブロックIを有した古い根ノードRが、この時点では、部分木V0と部分木V1を各々に有する索引ブロックI0と索引ブロックI1に分割されている。
10b)子分割手続き
索引ブロックがオーバーフルであると判定される時に、子分割手続きが、ブロック1020とブロック1026とにおいて根分割手続きから呼び出され、ブロック1216において子分割手続きから呼び出され、ブロック522において枝挿入手続きから呼び出される。この手続きは図17に示されている。この手続きは、子ノードの索引ブロックがオーバーフルであると判定される限り、ノードとその個々の索引ブロックとを分割し続ける。この手続きの各ステップは次の通りである。
索引ブロックSPLITSの分割数のカウントをゼロに初期化する(1200)。現在索引ブロックの最小深さを、後述する最小深さ手続きを呼び出すことによって判定する(1202)。その次に、前述のノード分割手続きによって、j番目のノードの現在索引ブロックIjを索引ブロックIjと索引ブロックIj+1とに分割し、部分木Vjと部分Vj+1とに分割する(1204)。索引ブロックSPLITSの数のカウントを増分する(1206)。その次に、現在分割されている索引ブロックIjの親索引ブロック内に、記入項目ejの前に記入項目を挿入する(1208)。現在分割されている現在索引ブロックIjの親索引ブロックの記入項目ejは、(最小深さ手続きによって判定される)分割されている現在索引ブロックの最小深さdminに設定された深さ値と、非NIL(F)に設定されたその表示子とを有する(1210)。
現在索引ブロック内で分割が生じた後の記入項目の索引iminが、予め決められたオーバーフル索引ブロック数THより大きいかどうかに関する判定を行う(1212)。そうである場合には、j番目の子、即ち、現在の分割によって生じた2つのノードのうちの第1のノードを、部分木Vからフェッチし(1214)、分割する(1216)。分割数のカウントを、ステップ1216で子を分割するための呼出しの際に生じたj番目の子索引ブロック内のSPLITSの数1sだけ増分し(1218)、同様に、分割すべき子の索引jを増分する(1220)。
その後で、新たに生じた分割ブロック内の記入項目の数nが最大索引ブロック数THより小さいかどうかに関して判定を行う(1222)。そうでない場合には、分割されるべきノードと個々の索引ブロックの索引jを増分し(1226)、分割すべき新たなj番目の子ノードを、以前に分割したノードと個々の索引ブロックの親部分木からフェッチする(1228)。そうでなく、分割後に生じた新たな索引ブロック内の記入項目の数nが最大索引ブロック数THより小さい場合には、この手続きは分割数nを伴ってその呼出しルーチンに戻る(1299)。
10c)最小深さ手続き
1つの索引ブロック内の最小深さ値を得ることによって後で分割するための記入項目の索引を判定するために、ブロック1102における根分割手続きとブロック1202における子分割手続きとによって使用される最小深さ手続きは、図18に示す各ステップによって行われる。
最初に、現在記入項目に先行し且つこれを含む非NIL記入項目のカウントcntと、最小深さ記入項目に先行し且つこれを含む非NIL記入項目のカウントcとを初期化する。最小記入項目の索引iminと索引ブロックに対する索引jとを同様に1に設定する。索引ブロック内の最後の記入項目の索引ilastを、現在索引ブロック内の記入項目の数に設定する。最後に、現在索引ブロックの記入項目の深さ値の中間点の索引imidを、最後の記入項目の索引ilastの中間点ilast/2に設定する(1300)。最小深さ記入項目の深さ値diminを、探索キーの最大長さ+1(即ち、M+1)に設定する(1302)。現在記入項目の深さdjを割り当てる(1304)。その後で、現在記入項目ejの表示子が、NIL記入項目に対応するTであるかどうかに関して判定を行う(1306)。そうでない場合には、現在記入項目に先行し且つこれを含む非NIL記入項目のカウントcntを増分する(1308)。
現在記入項目の深さ値djが最小深さ記入項目の値dminより小さいかどうかに関する判定を行う(1310)。深さ値djが最小深さ記入項目の値dminより小さい場合には、現在索引ブロックに対する索引jが現在索引ブロックの深さ値の中間点の索引imidより大きいかどうかに関して判定を行う(1312)。現在索引ブロックに対する索引jが上記中間点の索引imidより小さいかまたはこれと等しい場合には、最小記入項目の索引iminを現在記入項目ejの索引jに設定し、現在索引ブロックの最小深さ記入項目に先行し且つこれを含む非NIL記入項目のカウントcを、現在記入項目に先行し且つこれを含む非NIL記入項目のカウントcntに設定する(1318)。最小深さ記入項目の深さ値dminを現在深さ値djに設定し(1320)、現在索引ブロック内の記入項目に対する索引jを増分する(1322)。
ステップ1312において、現在索引ブロック記入項目に対する索引jが現在索引ブロック内の中間点の索引imidより大きい場合には、中間点の索引imidから最小記入項目の索引iminをマイナスした値が、現在索引ブロック記入項目の索引jから現在索引ブロックの深さ値の中間点の索引imidをマイナスした値と少なくとも同じ大きさであるかどうかに関する判定を行う(1314)。少なくとも同じ大きさである場合には、最小記入項目の索引iminを、現在索引ブロック記入項目に対する索引jに設定し、最小深さ記入項目に先行し且つこれを含む非NIL記入項目のカウントcを、現在記入項目ejに先行し且つこれを含む非NIL記入項目のカウントcntに等しく設定する(1316)。
現在索引ブロック記入項目に対する索引jが現在索引ブロック内の最後の記入項目の索引ilastに等しいかどうかに関する判定を、ステップ1322で行う。この索引jが索引ilastよりも小さい場合には、ループがステップ1304に戻る。いずれにしても、この手続きは、最小深さ記入項目に先行し且つこれを含む非NIL記入項目のカウントcと、最小記入項目の索引iminと、最小深さ記入項目の値dminとを伴って、その呼出しルーチンに戻る(1399)。
10d)ノード分割手続き
ブロック1014における根分割手続きとブロック1204における子分割手続きとから呼び出されるノード分割手続きが、現在ノードと最小深さ値のその個々の索引ブロックを分割する。図19にこの手続きが示されている。各々が1つの索引ブロックを有する2つのノードが生じさせられる。第1のノードの索引ブロックIは、最小深さ記入項目までの分割索引ブロックの第1の記入項目を含み、第2のノードの索引ブロックIj+1が、分割された索引ブロックの最終記入項目までの最小深さ値の後で生じる記入項目を含む。
分割されるべきノードの索引ブロックIjと部分木Vjの後に、現在レベル内にノードIj+1、Vj+1を挿入する(1400)。その新たなノードの新たに生じさせられた索引ブロックIj+1は、分割されるべき索引ブロック内の最終記入項目eilastまでの最小深さ値の後に生じる記入項目eimin+1から開始する、分割されるべき索引ブロックIjからの記入項目を含むだろう(1402)。分割されるべき索引ブロックIjを、最小深さ値を含む記入項目eiminまでの以前の第1の記入項目を含むように更新する(1404)。新たに生じさせられた索引ブロックIj+1内の記入項目の数nを、分割すべき現在索引ブロックIj内の記入項目の数の索引ilastから後で分割するための最小深さ記入項目の索引iminをマイナスした値に設定する(1406)。
その後で、この手続きは、部分木Vjを検査することによって、分割されるべきノードが葉タイプであるかどうかを判定する(1408)。そうでなく、ノードタイプが内側タイプである場合には、分割されるべきノードの部分木Vj内のカウント要素を含むカウント構造cをフェッチする(1410)。最小深さ記入項目に先行し且つこれを含む非NIL記入項目の数cntを、後で分割するための記入項目の索引iminによって索引付けられたカウント構造の要素までのカウント構造cの第1の要素の合計に等しく設定する(1412)。新たに生じたノードの部分木Vj+1に関するカウント構造が、分割されている索引ブロック内の最後の記入項目の索引ilastまで、後で分割すべき記入項目の索引imin+1によって索引付けられた分割ノードのカウント構造の要素を含む(1414)。新たに生じさせられたノードの部分木Vj+1を、現時点で分割されているノードの索引ブロックIj内の記入項目の数の索引ilastまでの、後で分割すべき記入項目の索引imin+1によって索引付けられた分割ノードの部分木要素に設定する(1416)。
分割ノードの部分木Vjに関連付けられたカウント構造を、そこで分割すべきノードのiminによって索引付けられた要素全てに関して第1の要素を含むように調節する(1418)。更に、分割ノードのj番目のノードの部分木を、そこで分割すべき記入項目の索引iminまで第1の要素によって索引付けられた要素を含むように調節する(1420)。分割されるべきノードの現在レベルにおけるカウント構造をフェッチする(1422)。分割すべき部分木の索引jによって索引付けられた要素の後に、記入項目をカウント構造内に挿入する(1424)。この新たに生じた要素c[j+1]に、カウント構造の先行要素内の非NIL記入項目のカウントc[j]から最小深さ記入項目に先行し且つこれを含む非NIL記入項目の数cntをマイナスした値を割り当てる(1426)。分割すべき部分木の索引jによって索引付けられたカウント構造の要素c[j]に、最小深さ記入項目に先行し且つこれを含む非NIL記入項目の数cntを割り当てる(1428)。その後で、この手続きが、新たに生じさせられた索引ブロック内の記入項目の数nを戻す。
本発明の好ましい実施様態のプログラム構造を、適切な手続きを参照しながら上記で詳細に説明してきた。本発明を、その実施様態を参照しながら特定の形で示し説明してきたが、本発明の範囲と思想とから逸脱することなく、その形態と詳細とにおける上記変更と他の変更とを行うことが可能であることが、当業者には理解されるだろう。
Claims (29)
- 記憶手段と、前記記憶手段内の記憶データの検索のための動的データ構造とを有するコンピュータシステムであって、前記データ記憶手段が、
少なくとも1つのレベルで構成されている前記記憶手段内に記憶された階層木構造と、
前記木構造内で相互連結されている記入項目であって、前記記入項目の各々が、前記木構造内のそうした記入項目を索引付ける対応する深さ値要素と、対応するデータ有り表示子とを含み、前記少なくとも1つのレベルのうちの1つにおける前記記入項目の各データ有り表示子は、対応データ項目が前記記憶データに含まれており且つ前記少なくとも1つのレベルの一つにおける前記記入項目の対応する一つに関係付けられているかどうかを表示する
コンピュータシステム。 - 前記木構造が更に、前記記憶データ内の前記対応データ項目に関連付けられた幾つかの前記記入項目の記憶されたカウントも含む請求項1に記載のコンピュータシステム。
- 前記記憶データ内の前記対応データ項目が探索キーによって検索され、前記探索キーが前記記憶データの対応データ項目の記憶されたカウントも含む請求項1に記載のコンピュータシステム。
- 対応する前記データ項目が前記記憶データ内に含まれていることを表示する前記データ有り表示子を有する前記少なくとも1つのレベルの1つにおける前記記入項目の対応する一つを各対応データ項目に関連付けるためのポインタ構造を更に含む請求項1に記載のコンピュータシステム。
- 前記データ記憶構造が更に、前記木構造内のキー区間範囲を定義する少なくとも1つの前記記入項目を含む少なくとも1つの索引ブロックも含む請求項1に記載のコンピュータシステム。
- 前記少なくとも1つの索引ブロックが前記木構造内の少なくとも1つの更に別の索引ブロックとに連結されている根レベル索引ブロックを有し、前記更に別の索引ブロック内の前記記入項目の少なくとも一つが前記記憶データ内の対応データ項目に関連付けられている請求項5に記載のコンピュータシステム。
- 前記更に別の索引ブロック内の少なくとも1つの前記記入項目内の前記データ有り表示子が、前記記憶データ内の対応データ項目の存在を表示する請求項6に記載のコンピュータシステム。
- 根索引ブロックが、前記更に別の索引ブロック各々毎に少なくとも1つの前記記入項目を含み、前記根索引ブロックの各記入項目の深さ値要素が、前記対応する前記更に別の索引ブロック内の前記記入項目の深さ値要素によって表される最小値を表す請求項6に記載のコンピュータシステム。
- 前記記憶データ内の対応するデータ項目の存在を表示するデータ有り表示子を有する更に別の索引ブロック内の記入項目の数を表示するカウントを更に含む請求項7に記載のコンピュータシステム。
- 前記木構造が、前記少なくとも1つの索引ブロックの少なくとも1つを含む少なくとも1つの部分木から構成されている請求項5に記載のコンピュータシステム。
- 前記少なくとも1つのレベルの中の1つのレベルの記入項目以外の各々の記入項目が、前記木構造の前記少なくとも1つの部分木の中の1つの部分木の1つの索引ブロックに関係付けられている請求項10に記載のコンピュータシステム。
- 記憶手段と、前記記憶手段内の記憶データの検索のための木構造とを備え、該木構造は、深さ値とデータ有り表示子とを各々に含む少なくとも1つの記入項目を有する少なくとも1つの索引ブロックを含み、各々の索引ブロックがキー区間を定義するものであるコンピュータにおいて、複数の探索キーを逐次処理するための方法であって、
前記コンピュータ内のバッファの中に複数の探索キーをフェッチする段階、
前記コンピュータのバッファ内で前記複数の探索キーを辞書順にソートする段階、並びに、
現在索引ブロックを判定することと、事前定義された機能を行うことと、前記バッファ内の1つの探索キーの後に続く前記複数の探索キーのうちの別の探索キーが現在索引ブロックのキー区間内にあるかどうかを判定することとによって、前記複数の探索キーの各々を逐次処理する段階
を含む方法。 - 前記逐次処理段階が更に、別の探索キーを処理するためのキービット位置を判定する段階も含む請求項12に記載の方法。
- 事前定義された機能を行う前記段階が、前記1つの探索キーを位置指定する段階を含む請求項12に記載の方法。
- 記入項目の各々が別のキー区間を定義し、前記位置指定段階が、前記1つの探索キーに対応する木構造内の別のキー区間を位置指定する段階を含む請求項12に記載の方法。
- 事前定義された機能を行う前記段階が、前記木構造内の前記1つの探索キーに関する索引付け情報を挿入する段階を含む請求項12に記載の方法。
- 空ストリングを処理する段階を更に含む請求項12に記載の方法。
- 前記空ストリングを処理する段階が、
前記記憶手段内に記憶された記憶データの第1の項目が空ストリングを含むかどうかを判定する段階、
前記バッファの第1の位置が空ストリングを含むかどうかを判定する段階、及び、
前記記憶手段内に記憶された第1の要素が空ストリングを含まないと判定し、前記第1の位置が空ストリングを含むと判定した後に、前記記憶手段内の前記第1の記憶要素に前記空ストリングを記憶する段階
を含む請求項17に記載の方法。 - 前記逐次処理段階が更に、
現在索引ブロック内の記入項目の量を判定する段階、
予め決められた最大索引ブロック数より前記量が大きいかどうかを判定する段階、及び、
予め決められた最大索引ブロック数より前記量が大きいと判定し、別の探索キーが現在索引ブロックのキー区間内に存在しないと判定した後に、現在索引ブロックを分割する段階
も含む請求項12に記載の方法。 - 前記逐次処理段階が更に、
現在索引ブロック内の記入項目の量を判定する段階、
前記量が記入項目の最大数より大きいかどうかを判定する段階、及び、
前記量が前記最大数より大きいと判定した後に現在索引ブロックを分割する段階を含む請求項12に記載の方法。 - 記憶手段と、記憶データの検索のための木構造と、順序要素から構成されるシーケンスとを含み、前記木構造が少なくとも1つの記入項目を含み、且つ、前記記憶手段内の探索キーを表示するための深さ値とデータ有り表示子とを記入項目の各々が含むコンピュータにおける、前記木構造によって索引付けられた探索キーを位置指定するために前記コンピュータを使用する方法であって、
前記探索キーの各々の順序値を前記シーケンスの各順序要素の中にコンパイルする段階402、501)、
前記シーケンスの前記順序要素の1つに対する予め決められた関係を有する深さ値をどの記入項目が含むか判定する段階、
前記記憶データ内に含まれる対応データ項目を前記表示子が表示する記入項目の各々のカウントを判定する段階、及び、
前記カウントに基づいて前記木構造によって索引付けられた探索キーを位置指定する段階
を含む前記方法。 - 前記各順序要素の中にコンパイルする段階が更に、有限な2つのアルファベット文字から構成される探索キーの各順序値を判定する段階を含む請求項21に記載の方法。
- 前記各順序値を判定する段階が、2進表現から構成される探索キーの各順序値を判定する段階を含む請求項22に記載の方法。
- どの記入項目が深さ値を含むか判定する段階が、前記シーケンスの順序要素の1つよりも小さい深さ値をどの記入項目が含むか判定する段階を含む請求項21に記載の方法。
- 記憶手段と記憶データの検索のための木構造を含み、前記木構造が、各々が深さ値と表示子を含む少なくとも1つの記入項目を各々が有する少なくとも1つの索引ブロックを含み、且つ、前記記入項目の各々がキー区間を定義し、葉記入項目または非葉記入項目を更に含むコンピュータにおける、前記木構造内の探索キーに関する索引付け情報を記憶するための方法であって、
その葉記入項目によって定義されるキー区間内に探索キーが帰属する、葉記入項目を求めて木構造をくまなく探索する段階、
前記木構造内の前記葉記入項目に関係した探索キーの索引付け情報を記憶するための正しい配置を判定する段階、
正しい配置に対応する記入項目に対して前記記憶手段内の記憶要素を関連付ける段階、及び、
対応データ項目が前記記憶手段内に記憶されていることを表示するように前記記入項目の前記表示子を設定する段階
を含む前記方法。 - 索引ブロックの各々が更に、葉索引ブロックまたは非葉索引ブロックを含み、索引ブロックの各々が第2のキー区間を定義し、且つ、前記探索段階が、
前記葉索引ブロックによって定義された前記第2のキー区間内に前記探索キーが含まれる前記葉索引ブロックを求めて前記木構造をくまなく探索する段階、及び、
前記葉記入項目によって定義された前記キー区間内に前記探索キーが含まれる前記葉記入項目を求めて葉索引ブロックをくまなく探索する段階
を含む請求項25に記載の方法。 - 記憶手段と、前記記憶手段内での記憶データの検索のための木構造とを含み、前記木構造が、深さ値とデータ有り表示子とを各々が含む少なくとも1つの記入項目を各々が有する少なくとも1つの索引ブロックを含み、且つ、前記索引ブロックの各々がアクセス情報に関連付けられているコンピュータにおける、1つの索引ブロックを分割するための方法であって、
前記1つの索引ブロック内の最小深さ記入項目を判定する段階、
前記木構造内に新たな索引ブロックを生じさせる段階、
最小深さ記入項目と、前記1つの索引ブロック内の最小深さ記入項目に先行し且つこれを含む各記入項目とを、前記1つの索引ブロックに割り当てる段階、
前記1つの索引ブロック内の最小深さ記入項目に先行する各記入項目を前記新たな索引ブロックに割り当てる段階、
親索引ブロック内に前記1つの索引ブロックと前記新たな索引ブロックとに関連した情報を記憶する段階、及び、
前記1つの索引ブロックと前記新たな索引ブロックと親索引ブロックのアクセス情報を記憶する段階
を含む前記方法。 - 前記情報記憶段階が、親索引ブロック内に前記1つの索引ブロックと前記新たな索引ブロックとの最終深さ値を記憶する段階を含む請求項27に記載の方法。
- 各索引ブロックが、探索キーを索引付けるためのカウント構造の要素に関連付けられ、前記カウント構造が、前記記憶データ内の対応データ項目に連結した前記少なくとも1つの記入項目の幾つかを記憶することによって探索キーを索引付け、前記アクセス情報記憶段階が、前記1つの索引ブロックと前記新たな索引ブロックと前記親索引ブロックとに関連付けられた前記カウント構造の要素を更新する段階を含む請求項27に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/565,939 US5758353A (en) | 1995-12-01 | 1995-12-01 | Storage and retrieval of ordered sets of keys in a compact 0-complete tree |
US08/565,939 | 1995-12-01 | ||
PCT/US1996/018510 WO1997021178A1 (en) | 1995-12-01 | 1996-11-18 | Storage and retrieval of ordered sets of keys in a compact 0-complete tree |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000501861A JP2000501861A (ja) | 2000-02-15 |
JP3771271B2 true JP3771271B2 (ja) | 2006-04-26 |
Family
ID=24260732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP52129297A Expired - Fee Related JP3771271B2 (ja) | 1995-12-01 | 1996-11-18 | コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 |
Country Status (7)
Country | Link |
---|---|
US (2) | US5758353A (ja) |
EP (1) | EP0864130B1 (ja) |
JP (1) | JP3771271B2 (ja) |
AU (1) | AU707907B2 (ja) |
CA (1) | CA2237161C (ja) |
DE (1) | DE69636761T2 (ja) |
WO (1) | WO1997021178A1 (ja) |
Families Citing this family (87)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6427147B1 (en) * | 1995-12-01 | 2002-07-30 | Sand Technology Systems International | Deletion of ordered sets of keys in a compact O-complete tree |
JP2833580B2 (ja) * | 1996-04-19 | 1998-12-09 | 日本電気株式会社 | 全文インデックス作成装置および全文データベース検索装置 |
US5797008A (en) * | 1996-08-09 | 1998-08-18 | Digital Equipment Corporation | Memory storing an integrated index of database records |
US5978795A (en) * | 1997-01-14 | 1999-11-02 | Microsoft Corporation | Temporally ordered binary search method and system |
US5926820A (en) * | 1997-02-27 | 1999-07-20 | International Business Machines Corporation | Method and system for performing range max/min queries on a data cube |
US6061677A (en) * | 1997-06-09 | 2000-05-09 | Microsoft Corporation | Database query system and method |
US6052686A (en) * | 1997-07-11 | 2000-04-18 | At&T Corporation | Database processing using schemas |
JP3622443B2 (ja) * | 1997-09-22 | 2005-02-23 | 日本電信電話株式会社 | T木インデックス構築方法及び装置及びt木インデックス構築プログラムを格納した記憶媒体 |
SE513248C2 (sv) | 1997-12-19 | 2000-08-07 | Ericsson Telefon Ab L M | Metod för hantering av datastrukturer |
JPH11272688A (ja) * | 1998-03-19 | 1999-10-08 | Fujitsu Ltd | インデックスインジケータ、インデックス表示方法並びにインデックスインジケータプログラムを記録した記録媒体 |
US6070164A (en) * | 1998-05-09 | 2000-05-30 | Information Systems Corporation | Database method and apparatus using hierarchical bit vector index structure |
US6311179B1 (en) * | 1998-10-30 | 2001-10-30 | International Business Machines Corporation | System and method of generating associations |
US7966421B2 (en) * | 2000-06-21 | 2011-06-21 | SAtech Group, A.B. Limited Liability Company | Method and apparatus for logically expanding the length of a search key |
US6373012B1 (en) * | 2000-09-15 | 2002-04-16 | Lockheed Martin Corporation | Method and apparatus for facilitating custom sorting of mail items and improved search techniques usable therewith |
US6735595B2 (en) * | 2000-11-29 | 2004-05-11 | Hewlett-Packard Development Company, L.P. | Data structure and storage and retrieval method supporting ordinality based searching and data retrieval |
US20030222238A1 (en) * | 2001-02-07 | 2003-12-04 | Getzewich Lee A. | Bite valve for personal hydration devices and a method for making the same |
US6654760B2 (en) | 2001-06-04 | 2003-11-25 | Hewlett-Packard Development Company, L.P. | System and method of providing a cache-efficient, hybrid, compressed digital tree with wide dynamic ranges and simple interface requiring no configuration or tuning |
US6816856B2 (en) * | 2001-06-04 | 2004-11-09 | Hewlett-Packard Development Company, L.P. | System for and method of data compression in a valueless digital tree representing a bitset |
US6785687B2 (en) * | 2001-06-04 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | System for and method of efficient, expandable storage and retrieval of small datasets |
US6671694B2 (en) | 2001-06-04 | 2003-12-30 | Hewlett-Packard Development Company, L.P. | System for and method of cache-efficient digital tree with rich pointers |
EP1407386A2 (en) * | 2001-06-21 | 2004-04-14 | ISC, Inc. | Database indexing method and apparatus |
JP3772704B2 (ja) * | 2001-07-27 | 2006-05-10 | 富士通株式会社 | データソート方法、データソート装置およびデータソートプログラム |
DE10148008A1 (de) * | 2001-09-28 | 2003-04-24 | Siemens Ag | Verfahren und Anordnung zur Speicherung hierarchisch abhängiger Daten |
US7007040B1 (en) * | 2001-12-04 | 2006-02-28 | General Dynamics C4 Systems, Inc. | Method and apparatus for storing and updating information in a multi-cast system |
US7246102B2 (en) * | 2001-12-21 | 2007-07-17 | Agere Systems Inc. | Method of improving the lookup performance of three-type knowledge base searches |
US7340603B2 (en) * | 2002-01-30 | 2008-03-04 | Sony Corporation | Efficient revocation of receivers |
KR100484942B1 (ko) * | 2002-03-14 | 2005-04-25 | 한국전자통신연구원 | 대용량 파일시스템의 디렉토리 관리방법 |
US7080091B2 (en) * | 2002-05-09 | 2006-07-18 | Oracle International Corporation | Inverted index system and method for numeric attributes |
US20040133590A1 (en) * | 2002-08-08 | 2004-07-08 | Henderson Alex E. | Tree data structure with range-specifying keys and associated methods and apparatuses |
US7123774B2 (en) * | 2002-11-27 | 2006-10-17 | General Electric Company | System and method for coding data |
US7627585B2 (en) * | 2002-12-02 | 2009-12-01 | Sap Ag | Data structure mapping and packaging |
US7039646B2 (en) * | 2002-12-18 | 2006-05-02 | International Business Machines Corporation | Method and system for compressing varying-length columns during index high key generation |
US6961733B2 (en) * | 2003-03-10 | 2005-11-01 | Unisys Corporation | System and method for storing and accessing data in an interlocking trees datastore |
US7096235B2 (en) * | 2003-03-27 | 2006-08-22 | Sand Technology Systems International, Inc. | Computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data |
US7362909B2 (en) * | 2003-04-10 | 2008-04-22 | Sharp Kabushiki Kaisha | Coding device and method and decoding device and method |
US8516004B2 (en) * | 2003-09-19 | 2013-08-20 | Unisys Corporation | Method for processing K node count fields using an intensity variable |
US7340471B2 (en) | 2004-01-16 | 2008-03-04 | Unisys Corporation | Saving and restoring an interlocking trees datastore |
US8037102B2 (en) | 2004-02-09 | 2011-10-11 | Robert T. and Virginia T. Jenkins | Manipulating sets of hierarchical data |
US9646107B2 (en) * | 2004-05-28 | 2017-05-09 | Robert T. and Virginia T. Jenkins as Trustee of the Jenkins Family Trust | Method and/or system for simplifying tree expressions such as for query reduction |
US7593923B1 (en) | 2004-06-29 | 2009-09-22 | Unisys Corporation | Functional operations for accessing and/or building interlocking trees datastores to enable their use with applications software |
US7620632B2 (en) * | 2004-06-30 | 2009-11-17 | Skyler Technology, Inc. | Method and/or system for performing tree matching |
US7213041B2 (en) * | 2004-10-05 | 2007-05-01 | Unisys Corporation | Saving and restoring an interlocking trees datastore |
US7716241B1 (en) | 2004-10-27 | 2010-05-11 | Unisys Corporation | Storing the repository origin of data inputs within a knowledge store |
US7908240B1 (en) | 2004-10-28 | 2011-03-15 | Unisys Corporation | Facilitated use of column and field data for field record universe in a knowledge store |
US7627591B2 (en) | 2004-10-29 | 2009-12-01 | Skyler Technology, Inc. | Method and/or system for manipulating tree expressions |
US7801923B2 (en) * | 2004-10-29 | 2010-09-21 | Robert T. and Virginia T. Jenkins as Trustees of the Jenkins Family Trust | Method and/or system for tagging trees |
US20060100845A1 (en) * | 2004-11-08 | 2006-05-11 | Mazzagatti Jane C | Multiple stream real time data simulation adapted for a KStore data structure |
US20060101048A1 (en) * | 2004-11-08 | 2006-05-11 | Mazzagatti Jane C | KStore data analyzer |
US7499932B2 (en) * | 2004-11-08 | 2009-03-03 | Unisys Corporation | Accessing data in an interlocking trees data structure using an application programming interface |
US7348980B2 (en) * | 2004-11-08 | 2008-03-25 | Unisys Corporation | Method and apparatus for interface for graphic display of data from a Kstore |
US7418445B1 (en) | 2004-11-08 | 2008-08-26 | Unisys Corporation | Method for reducing the scope of the K node construction lock |
US7630995B2 (en) | 2004-11-30 | 2009-12-08 | Skyler Technology, Inc. | Method and/or system for transmitting and/or receiving data |
US7636727B2 (en) | 2004-12-06 | 2009-12-22 | Skyler Technology, Inc. | Enumeration of trees from finite number of nodes |
US8316059B1 (en) * | 2004-12-30 | 2012-11-20 | Robert T. and Virginia T. Jenkins | Enumeration of rooted partial subtrees |
US8615530B1 (en) | 2005-01-31 | 2013-12-24 | Robert T. and Virginia T. Jenkins as Trustees for the Jenkins Family Trust | Method and/or system for tree transformation |
US7681177B2 (en) | 2005-02-28 | 2010-03-16 | Skyler Technology, Inc. | Method and/or system for transforming between trees and strings |
US8356040B2 (en) | 2005-03-31 | 2013-01-15 | Robert T. and Virginia T. Jenkins | Method and/or system for transforming between trees and arrays |
US7409380B1 (en) | 2005-04-07 | 2008-08-05 | Unisys Corporation | Facilitated reuse of K locations in a knowledge store |
US7899821B1 (en) | 2005-04-29 | 2011-03-01 | Karl Schiffmann | Manipulation and/or analysis of hierarchical data |
US7389301B1 (en) | 2005-06-10 | 2008-06-17 | Unisys Corporation | Data aggregation user interface and analytic adapted for a KStore |
US7991758B2 (en) * | 2005-09-07 | 2011-08-02 | International Business Machines Corporation | System and method for performing a search operation within a sequential access data storage subsystem |
US20070214153A1 (en) * | 2006-03-10 | 2007-09-13 | Mazzagatti Jane C | Method for processing an input particle stream for creating upper levels of KStore |
US7461289B2 (en) * | 2006-03-16 | 2008-12-02 | Honeywell International Inc. | System and method for computer service security |
US7734571B2 (en) * | 2006-03-20 | 2010-06-08 | Unisys Corporation | Method for processing sensor data within a particle stream by a KStore |
US20070220069A1 (en) * | 2006-03-20 | 2007-09-20 | Mazzagatti Jane C | Method for processing an input particle stream for creating lower levels of a KStore |
US20080275842A1 (en) * | 2006-03-20 | 2008-11-06 | Jane Campbell Mazzagatti | Method for processing counts when an end node is encountered |
US7689571B1 (en) | 2006-03-24 | 2010-03-30 | Unisys Corporation | Optimizing the size of an interlocking tree datastore structure for KStore |
US8238351B2 (en) * | 2006-04-04 | 2012-08-07 | Unisys Corporation | Method for determining a most probable K location |
US20070276862A1 (en) * | 2006-04-27 | 2007-11-29 | Toutonghi Michael J | Organizing and sharing digital content |
US20070255676A1 (en) * | 2006-04-27 | 2007-11-01 | Brown David A | Methods and apparatus for performing tree-based processing using multi-level memory storage |
US7676330B1 (en) | 2006-05-16 | 2010-03-09 | Unisys Corporation | Method for processing a particle using a sensor structure |
US7730088B2 (en) * | 2006-09-14 | 2010-06-01 | International Business Machines Corporation | Queriable hierarchical text data |
EP1918822A1 (fr) * | 2006-10-31 | 2008-05-07 | Axalto SA | Système et procédé d'indexation de mémoire |
WO2008085989A1 (en) | 2007-01-10 | 2008-07-17 | Richard Garfinkle | A software method for data storage and retrieval |
JP4402120B2 (ja) * | 2007-01-24 | 2010-01-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
US20090150355A1 (en) * | 2007-11-28 | 2009-06-11 | Norton Garfinkle | Software method for data storage and retrieval |
US20120254251A1 (en) * | 2011-03-03 | 2012-10-04 | The Governors Of The University Of Alberta | SYSTEMS AND METHODS FOR EFFICIENT TOP-k APPROXIMATE SUBTREE MATCHING |
US8959118B2 (en) * | 2012-04-30 | 2015-02-17 | Hewlett-Packard Development Company, L. P. | File system management and balancing |
US9317511B2 (en) * | 2012-06-19 | 2016-04-19 | Infinidat Ltd. | System and method for managing filesystem objects |
KR101440475B1 (ko) * | 2012-10-17 | 2014-09-17 | 주식회사 리얼타임테크 | 혼합 질의 처리를 위한 색인 생성 방법, 혼합 질의 처리 방법 및 색인 자료구조를 기록한 기록 매체 |
JP6016215B2 (ja) * | 2013-12-20 | 2016-10-26 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | トライ木構造を有するレコード群を高い効率でマージソートする方法、装置及びコンピュータプログラム |
US9892158B2 (en) * | 2014-01-31 | 2018-02-13 | International Business Machines Corporation | Dynamically adjust duplicate skipping method for increased performance |
KR102192479B1 (ko) * | 2014-04-23 | 2020-12-17 | 삼성전자주식회사 | 전자 장치의 프로그램 코드 분석 방법 및 전자 장치 |
US10333696B2 (en) | 2015-01-12 | 2019-06-25 | X-Prime, Inc. | Systems and methods for implementing an efficient, scalable homomorphic transformation of encrypted data with minimal data expansion and improved processing efficiency |
US9916359B2 (en) * | 2015-06-01 | 2018-03-13 | Sap Se | Indexing dynamic hierarchical data |
US10438092B2 (en) * | 2018-01-31 | 2019-10-08 | Analytical Graphics, Inc. | Systems and methods for converting massive point cloud datasets to a hierarchical storage format |
US11036705B2 (en) | 2019-02-27 | 2021-06-15 | International Business Machines Corporation | Traversal of dispersed lockless concurrent index nodes |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3596257A (en) * | 1969-09-17 | 1971-07-27 | Burroughs Corp | Method and apparatus for allocating small memory spaces to a computer program |
US4468728A (en) * | 1981-06-25 | 1984-08-28 | At&T Bell Laboratories | Data structure and search method for a data base management system |
US4429385A (en) * | 1981-12-31 | 1984-01-31 | American Newspaper Publishers Association | Method and apparatus for digital serial scanning with hierarchical and relational access |
US4611272A (en) * | 1983-02-03 | 1986-09-09 | International Business Machines Corporation | Key-accessed file organization |
JPH0828053B2 (ja) * | 1983-08-08 | 1996-03-21 | 株式会社日立製作所 | データ記録方法 |
US4677550A (en) * | 1983-09-30 | 1987-06-30 | Amalgamated Software Of North America, Inc. | Method of compacting and searching a data index |
US5010478A (en) * | 1986-04-11 | 1991-04-23 | Deran Roger L | Entity-attribute value database system with inverse attribute for selectively relating two different entities |
US4774657A (en) * | 1986-06-06 | 1988-09-27 | International Business Machines Corporation | Index key range estimator |
US4945475A (en) * | 1986-10-30 | 1990-07-31 | Apple Computer, Inc. | Hierarchical file system to provide cataloging and retrieval of data |
JPS6410353A (en) * | 1987-07-03 | 1989-01-13 | Hitachi Ltd | Computer file system |
US5036457A (en) * | 1987-09-24 | 1991-07-30 | Nucleus International Corporation | Bit string compressor with boolean operation processing capability |
JPH02130647A (ja) * | 1988-11-11 | 1990-05-18 | Toshiba Corp | 索引木構造の更新方式 |
US5109336A (en) * | 1989-04-28 | 1992-04-28 | International Business Machines Corporation | Unified working storage management |
US5202986A (en) * | 1989-09-28 | 1993-04-13 | Bull Hn Information Systems Inc. | Prefix search tree partial key branching |
US5249265A (en) * | 1989-10-24 | 1993-09-28 | International Business Machines Corporation | Structure storage management in a graphics display device |
US5121493A (en) * | 1990-01-19 | 1992-06-09 | Amalgamated Software Of North America, Inc. | Data sorting method |
US5274805A (en) * | 1990-01-19 | 1993-12-28 | Amalgamated Software Of North America, Inc. | Method of sorting and compressing data |
US5257365A (en) * | 1990-03-16 | 1993-10-26 | Powers Frederick A | Database system with multi-dimensional summary search tree nodes for reducing the necessity to access records |
US5210870A (en) * | 1990-03-27 | 1993-05-11 | International Business Machines | Database sort and merge apparatus with multiple memory arrays having alternating access |
US5408652A (en) * | 1990-08-31 | 1995-04-18 | Fujitsu Limited | Method and apparatus for heterogenous database access by generating different access procedures for different database data structures |
US5555409A (en) * | 1990-12-04 | 1996-09-10 | Applied Technical Sysytem, Inc. | Data management systems and methods including creation of composite views of data |
US5303367A (en) * | 1990-12-04 | 1994-04-12 | Applied Technical Systems, Inc. | Computer driven systems and methods for managing data which use two generic data elements and a single ordered file |
US5339411A (en) * | 1990-12-21 | 1994-08-16 | Pitney Bowes Inc. | Method for managing allocation of memory space |
US5204958A (en) * | 1991-06-27 | 1993-04-20 | Digital Equipment Corporation | System and method for efficiently indexing and storing a large database with high data insertion frequency |
US5301314A (en) * | 1991-08-05 | 1994-04-05 | Answer Computer, Inc. | Computer-aided customer support system with bubble-up |
JPH0546447A (ja) * | 1991-08-08 | 1993-02-26 | Hitachi Ltd | 空き領域検索方法 |
US5293616A (en) * | 1991-10-22 | 1994-03-08 | Flint Orin O | Method and apparatus for representing and interrogating an index in a digital memory |
JPH06511582A (ja) * | 1992-07-24 | 1994-12-22 | マイクロソフト コーポレイション | メモリを割り当てそして解放するコンピュータ方法及びシステム |
US5561785A (en) * | 1992-10-29 | 1996-10-01 | International Business Machines Corporation | System for allocating and returning storage and collecting garbage using subpool of available blocks |
JP2583010B2 (ja) * | 1993-01-07 | 1997-02-19 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 多層インデックス構造におけるローカルインデックステーブル及び大域インデックステーブルの間の一貫性を維持する方法 |
US5497485A (en) * | 1993-05-21 | 1996-03-05 | Amalgamated Software Of North America, Inc. | Method and apparatus for implementing Q-trees |
US5557786A (en) * | 1994-01-24 | 1996-09-17 | Advanced Computer Applications, Inc. | Threaded, height-balanced binary tree data structure |
US5577243A (en) * | 1994-03-31 | 1996-11-19 | Lexmark International, Inc. | Reallocation of returned memory blocks sorted in predetermined sizes and addressed by pointer addresses in a free memory list |
-
1995
- 1995-12-01 US US08/565,939 patent/US5758353A/en not_active Expired - Lifetime
-
1996
- 1996-11-18 EP EP96940525A patent/EP0864130B1/en not_active Expired - Lifetime
- 1996-11-18 AU AU77385/96A patent/AU707907B2/en not_active Ceased
- 1996-11-18 DE DE69636761T patent/DE69636761T2/de not_active Expired - Lifetime
- 1996-11-18 CA CA002237161A patent/CA2237161C/en not_active Expired - Fee Related
- 1996-11-18 WO PCT/US1996/018510 patent/WO1997021178A1/en active IP Right Grant
- 1996-11-18 JP JP52129297A patent/JP3771271B2/ja not_active Expired - Fee Related
-
1998
- 1998-05-20 US US09/081,866 patent/US5930805A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CA2237161A1 (en) | 1997-06-12 |
AU7738596A (en) | 1997-06-27 |
US5930805A (en) | 1999-07-27 |
DE69636761D1 (de) | 2007-01-25 |
CA2237161C (en) | 2006-01-10 |
DE69636761T2 (de) | 2007-04-05 |
JP2000501861A (ja) | 2000-02-15 |
WO1997021178A1 (en) | 1997-06-12 |
EP0864130B1 (en) | 2006-12-13 |
AU707907B2 (en) | 1999-07-22 |
EP0864130A1 (en) | 1998-09-16 |
EP0864130A4 (en) | 2001-02-14 |
US5758353A (en) | 1998-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3771271B2 (ja) | コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法 | |
EP1066570B1 (en) | Fast string searching and indexing | |
US5202986A (en) | Prefix search tree partial key branching | |
US6427147B1 (en) | Deletion of ordered sets of keys in a compact O-complete tree | |
EP1393206B1 (en) | Data structure for information systems | |
US5488717A (en) | MTree data structure for storage, indexing and retrieval of information | |
US5497485A (en) | Method and apparatus for implementing Q-trees | |
US7096235B2 (en) | Computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data | |
WO2000003335A1 (en) | Value-instance-connectivity computer-implemented database | |
GB2407417A (en) | Index tree structure and key existence determination for a database | |
US20120209855A1 (en) | Bit-string key classification/distribution apparatus, classification/distribution method, and program | |
WO2001025962A1 (en) | Database organization for increasing performance by splitting tables | |
JP2675958B2 (ja) | 情報検索用計算機システム及びその記憶装置の動作方法 | |
Aoe | A fast digital search algorithm using a double‐array structure | |
JP2000090115A (ja) | インデクス作成方法および検索方法 | |
Shishibori et al. | Improvement of binary digital search trees using hierarchical structures | |
Tamassia et al. | Basic data structures | |
Shau-Yin et al. | Finding the maximum grid convex polygon for a convex region on the plane | |
Kumar et al. | Study on Sorting and Dictionaries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050802 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051102 |
|
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: 20060110 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060209 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100217 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100217 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110217 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130217 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140217 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |