JP2004362574A - Bツリーを使用した位置アクセス - Google Patents

Bツリーを使用した位置アクセス Download PDF

Info

Publication number
JP2004362574A
JP2004362574A JP2004162499A JP2004162499A JP2004362574A JP 2004362574 A JP2004362574 A JP 2004362574A JP 2004162499 A JP2004162499 A JP 2004162499A JP 2004162499 A JP2004162499 A JP 2004162499A JP 2004362574 A JP2004362574 A JP 2004362574A
Authority
JP
Japan
Prior art keywords
leaf
value
count
tree
leaf level
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.)
Pending
Application number
JP2004162499A
Other languages
English (en)
Inventor
Steven J Bailey
ジェイ.ベイリー スティーブン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2004362574A publication Critical patent/JP2004362574A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface

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)

Abstract

【課題】 Bツリーを使用した位置アクセスを提供すること。
【解決手段】 情報を格納しているbツリーが、bツリーのリーフに格納された要素の位置アクセスを容易にするために利用される。bツリーは、各非リーフレベル値について、カウントがすぐ左側に位置し、値がすぐ右側に位置するように構造化される。この左カウントおよび右カウントは、値のすぐ左側および値のすぐ右側のサブツリーのリーフに配置されたリーフレベル値の数を示す。左カウントおよび右カウントは、特定の位置のサーチにおいてbツリーを下降する際に辿るべきパスを決定するのに使用される。また、カウントは、bツリーのリーフレベルにある値の総数を特定するためにも利用することができる。
【選択図】 図4

Description

本発明は、一般に、データ処理に関し、より具体的には、bツリーにおける要素の位置アクセスに関する。
バランスツリー(bツリー)は、ソート順にデータを格納するのによく使用されるデータ構造である。bツリーは、ソート順の大量のデータへのアクセスが、通常、必要とされるデータベース操作に特に適用される。bツリーを使用してデータを格納することにより、bツリーのデータをソート順に容易に取り出すことができるようになる。また、ソート順を使用してソート順内での順序位置に基づいて、bツリーの個々のデータ項目(例えば、ソートされたデータセットの第n番の項目)にアクセスすることも可能である。このタイプのアクセスは、位置アクセスとして知られている。
bツリーを利用する位置アクセスは、従来、bツリーのデータ項目の位置を計算するか、または近似することを含む。例えば、bツリーがそのリーフに2n個の異なる値を格納する場合、bツリーが左から右までほぼ均等にデータを配分するという想定を使用して、第n番のソートされた項目はbツリーのリーフレベルのほぼ中間に現れるものと推定することができる。しかし、bツリーの正確なサイズ、およびbツリーにわたるデータの正確な配分は、サーチが開始される時点では、通常、分からない。つまり、bツリーのリーフノードの値の正確な数、ならびにどれだけ均等にそれらの値が配分されているかは、分からない場合ある。このように、探索される項目について分かっていることがソート順の第n番の項目であることだけである場合、その項目を正確に探し出すことは依然として困難である可能性がある。さらに、推定がどれだけ正確であるかを確認することさえ困難である。というのは、一般に、所与のデータ項目が第n番のデータ項目であるかどうかを判定することは、ツリーをそのリーフまで下にトラバースして、どれだけの数のデータ項目がこの所与のデータ項目に先行しているかを明らかにすることを伴うからである。それゆえ、上記の欠点を抱えていないbツリーを利用した位置アクセスのための技術が望まれる。
本発明によるbツリーは、特定の順序位置にある値またはデータ項目を探し出し易くしたり、または他の位置アクセス操作を実行したりするのに使用することができる情報を格納するように構成される。bツリーは、非リーフレベルノードにある各インデックス値が左カウントおよび右カウントに関連付けられるように構造化される。この左カウントおよび右カウントは、インデックス値のそれぞれすぐ左側およびすぐ右側のサブツリーで特定されるリーフレベル値の数を示す。左値および右値は、特定の順序位置を有するデータ項目のサーチにおいてbツリーを下降する際に辿るべきパスを判定するために使用される。
bツリーの所定の位置に配置された要素をサーチするための方法は、bツリーのルートノードにあるインデックス値を左から右に評価することを含む。探索されるデータ項目の順序位置が、遭遇した最初の左カウント以下である場合、ルートの最も左側のサブツリーが選択される。それ以外の場合、左カウントが実行カウント(running count)に加算される。探索されるデータ項目の順序位置が実行カウントと右カウントの合計以下である場合、現在のインデックス値のすぐ右側のサブツリーが選択される。しかし、探索されるデータ項目の順序位置が上記の合計より大きい場合、右カウントが実行カウントに加算され、インデックス値が左から右に検討され、探索データ項目の順序位置が新たな合計以下であるかどうかが判定される。実行カウントに各インデックス値の右カウントを加算し、探索される順序位置が実行カウントと現在のインデックス値の右カウントの合計以下であるかどうかを判定するプロセスは、その条件に合うインデックス値が見つかるまで繰り返される。その後、そのインデックス値のすぐ右側のサブツリーが選択される。
次に、選択されたサブツリーを下降し、このプロセスは、bツリーのリーフレベルに遭遇するまで再度繰り返される(実行カウントが、繰り返しの間、維持されている状態で)。実行カウントは、現在のノードの左側のリーフノードに格納されているデータ項目に対応する。このように、bツリーのリーフレベルにある要素の所定の位置は、探索されるデータ項目の順序位置から実行カウントを引き、その差を使用して現在のリーフレベルノード内の特定の項目を選択することによって探し出される。
本発明のその他の特徴を以下に説明する。
本発明の特徴および利点は、付随する図面と併せて以下の説明を検討するとよく理解されることになろう。
本明細書で説明するバランスツリー(「bツリー」)の要素の位置アクセスにより、bツリーベースのインデックスに関する効率的で正確な位置アクセス操作が提供される。本発明の一実施形態では、bツリーにおいて特定の要素を探し出すことなど、位置アクセス操作を効率的にサポートするために使用することができるカウント情報が、基礎となるbツリーデータ構造の中に格納される。bツリーの各非リーフレベルインデックス値について、カウントがインデックス値の左側と右側に格納される。これらの左カウントおよび右カウントは、それぞれ、左リーフカウント(または「左カウント」)および右リーフカウント(または「右カウント」)と呼ばれる。左リーフカウント要素は、インデックス値のすぐ左側のサブツリーのリーフレベルにおけるデータ項目の数を示す。右リーフカウント要素は、bツリーの右サブツリーのルートノードを示し、この右サブツリーのリーフレベルにおける値の数も示す。カウント情報は、所与のノードを検査することにより、ノードのどのサブツリーが特定の順序位置を有するデータ項目を収容するかを特定できるようにすることによって、位置アクセスを助ける。また、カウント情報は、ルートノードにおけるカウントのすべてを合計することにより、bツリーのリーフレベルにおける値あり要素の総数を判定するために使用することもできる。
(適したコンピューティングシステム環境の概要)
図1は、bツリーを使用した位置アクセスのための方法およびシステムを実施することができる適切なコンピューティングシステム環境100の一例を示している。コンピューティングシステム環境100は、適切なコンピューティング環境の一例に過ぎず、表示要素を動的にそして個々に制御するための方法およびシステムの用法または機能の範囲について何ら限定をも示唆するものではない。コンピューティング環境100が、例示的な動作環境100に示したコンポーネントの任意の1つ、または組み合わせに関していかなる依存関係または要件を有するものと解釈すべきでもない。
bツリーを使用した位置アクセスのための方法およびシステムは、数多くの他の汎用、または専用のコンピューティングシステム環境またはコンピューティングシステム構成で動作可能である。表示要素を動的にそして個々に制御するための方法およびシステムとともに使用するのに適する可能性がある周知のコンピューティングシステム、コンピューティング環境、および/またはコンピューティング構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、これらのシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、これらには限定されない。
bツリーを使用した位置アクセスのための方法およびシステムは、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストにおいて説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。bツリーを使用した位置アクセスのための方法およびシステムは、通信ネットワークまたは他のデータ伝送媒体を通してリンクされている遠隔の処理デバイスによってタスクが実行される分散コンピューティング環境において実施することもできる。分散コンピューティング環境では、プログラムモジュールおよびその他のデータは、メモリ記憶デバイスを含むローカルおよび遠隔の両方のコンピュータ記憶メディアに配置することができる。
図1を参照すると、bツリーを使用した位置アクセスのための方法およびシステムを実施するための例示的なシステムが、コンピュータ110の形態で汎用コンピューティングデバイスを含んでいる。コンピュータ110のコンポーネントには、処理ユニット120、システムメモリ130、ならびにシステムメモリ130を含む様々なシステムコンポーネントを処理ユニット120に結合するシステムバス121が含まれるが、これらには限定されない。システムバス121は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のいずれであってもよい。限定としてではなく、例として、そのようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、および(メザニン(Mezzanine)バスとしても知られる)PCI(Peripheral Component Interconnect)バスが含まれる。
コンピュータ110は、通常、様々なコンピュータ可読メディアを含む。コンピュータ可読メディアは、コンピュータ110によってアクセスすることができる任意の利用可能なメディアであることがあり、揮発性および不揮発性メディア、リムーバブルおよび非リムーバブルメディアがともに含まれる。限定としてではなく、例として、コンピュータ可読メディアは、コンピュータ記憶メディアおよび通信メディアを含むことがある。コンピュータ記憶メディアには、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の格納のための任意の方法または技術で実装された揮発性および不揮発性メディア、リムーバブルおよび非リムーバブルメディアがともに含まれる。コンピュータ記憶メディアには、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または所望の情報を格納するために使用することができ、コンピュータ110によってアクセスすることができる任意の他のメディアが含まれるが、これらには限定されない。通信メディアは、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構でコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実体化し、任意の情報配信メディアを含む。「変調されたデータ信号」という用語は、信号内に情報をエンコードするような仕方で特性の1つまたは複数が設定または変更された信号を意味する。限定としてではなく、例として、通信メディアには、有線ネットワークまたは直接配線接続などの有線メディア、ならびに音響、RF、赤外線、およびその他の無線メディアなどの無線メディアが含まれる。また、これらメディアのいずれかの組み合わせも、コンピュータ可読メディアの範囲内に含まれることを理解されたい。
システムメモリ130は、ROM131およびRAM132などの揮発性メモリおよび/または不揮発性メモリの形態のコンピュータ記憶メディアを含む。起動時などにコンピュータ110内の要素間で情報を転送する助けとなる基本ルーチンが入っている基本入出力システム133(BIOS)は、通常、ROM131に格納されている。RAM132は、通常、処理ユニット120によって即時にアクセス可能であり、そして/または現在、操作されているデータおよび/またはプログラムモジュールを収容する。限定としてではなく、例として、図1は、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136、およびプログラムデータ137を示している。
また、コンピュータ110は、他のリムーバブル/非リムーバブル、揮発性/不揮発性のコンピュータ記憶メディアを含むこともできる。単に例として、図1は、非リムーバブルで不揮発性の磁気メディアとの読み取りまたは書き込みを行うハードディスクドライブ141、リムーバブルで不揮発性の磁気ディスク152との読み取りまたは書き込みを行う磁気ディスクドライブ151、およびCD−ROM、CD−RWまたは他の光メディアなどのリムーバブルで不揮発性の光ディスク156との読み取りまたは書き込みを行う光ディスクドライブ155を示している。例示的な動作環境において使用することができる他のリムーバブル/非リムーバブル、揮発性/不揮発性のコンピュータ記憶メディアには、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、半導体RAM、半導体ROMなどが含まれるが、これらには限定されない。ハードディスクドライブ141は、通常、インターフェース140のような非リムーバブルメモリインターフェースを通してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インターフェース150のようなリムーバブルメモリインターフェースによってシステムバス121に接続される。
前述し、図1に示したドライブおよび関連するコンピュータ記憶メディアにより、コンピュータ110にコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータのストーレッジが提供される。図1では、例えば、ハードディスクドライブ141が、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147を格納しているのを示している。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同じであっても、異なっていてもよいことに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147に、ここでは、少なくともそれらが異なるコピーであることを示すために異なる符号を付けている。ユーザは、キーボード162や、マウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス161などの入力デバイスを通して、コマンドおよび情報をコンピュータ110に入力することができる。その他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナ等が含まれることがある。これらの入力デバイス、およびその他の入力デバイスは、システムバス121に結合されたユーザ入力インターフェース160を通して処理ユニット120に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェースおよびバス構造によって接続することもできる。また、モニタ191、または他のタイプのディスプレイデバイスも、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。モニタに加えて、コンピュータは、出力周辺インターフェース190を通して接続することができるスピーカ197やプリンタ196などの他の周辺出力デバイスを含むこともできる。
コンピュータ110は、遠隔コンピュータ180のような1つまたは複数の遠隔コンピュータに対する論理接続を使用してネットワーク化された環境において動作することができる。遠隔コンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、または他の一般的なネットワークノードであることができ、通常、コンピュータ110に関連して前述した要素の多く、またはすべてを含むが、メモリ記憶デバイス181だけを図1に示している。図1に示した論理接続は、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173を含むが、その他のネットワークを含むこともある。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットで一般的である。
LANネットワーキング環境で使用される場合、コンピュータ110は、ネットワークインターフェースまたはネットワークアダプタ170を通してLAN171に接続される。WANネットワーキング環境で使用される場合、コンピュータ110は、通常、インターネットなどのWAN173を介して通信を確立するためのモデム172、またはその他の手段を含む。内蔵であることも、外付けであることもあるモデム172は、ユーザ入力インターフェース160、またはその他の適切な機構を介してシステムバス121に接続することができる。ネットワーク化された環境では、コンピュータ110に関連して示したプログラムモジュール、またはその部分は、遠隔のメモリ記憶デバイスに格納されることがある。限定としてではなく、例として、図1は、遠隔のアプリケーションプログラム185がメモリデバイス181上に存在するように示している。図示したネットワーク接続は、例示であり、コンピュータ間で通信リンクを確立する他の手段を使用することができることが認められるであろう。
パーソナルコンピューティングおよびインターネットの収束に照らして、様々な分散コンピューティングフレームが開発済みであり、また開発中である。個人ユーザにもビジネスユーザにも等しく、アプリケーションおよびコンピューティングデバイスのためのシームレスな相互運用が可能なWeb対応のインターフェースが提供されており、コンピューティング活動がますますWebブラウザ指向またはネットワーク指向になっている。
例えば、マイクロソフト(登録商標)の.NETプラットフォームは、Webベースのデータストレージやダウンロード可能なデバイスソフトウェアなどのサーバ、ビルディングブロックサービスを含む。一般的に言って、.NETプラットフォームにより、(1)全範囲のコンピューティングデバイスを協働させ、すべてのコンピューティングデバイス上でユーザ情報を自動的に更新し、同期する能力、(2)HTMLではなくXMLのより大幅な使用により可能となるWebサイトのより高いインタラクティブな能力、(3)例えば、電子メールなどの様々なアプリケーション、またはOffice.NETのようなソフトウェアの管理のために中央の開始点からユーザに対する製品およびサービスのカスタマイズされたアクセスおよびデリバリを特徴とするオンラインサービス、(4)情報に対するアクセスの効率および容易さ、ならびにユーザ間およびデバイス間での情報の同期を高める集中データストレージ、(5)電子メール、ファックス、および電話などの様々な通信メディアを統合する能力、(6)開発者にとって、再使用可能なモジュールを作成し、これにより、生産性を高め、プログラミングエラーの数を減少させる能力、ならびに(7)他の多くのクロスプラットフォーム統合機能が提供される。
本明細書の例示的な実施形態は、コンピューティングデバイス上に存在するソフトウェアに関連して説明するが、表示要素を動的に、そして個々に制御するための方法およびシステムの1つまたは複数の部分を、.NETの言語およびサービスのすべて、同様に他の分散コンピューティングフレームワークにおいてサービスを実行し、サポートし、アクセスできるようにオペレーティングシステム、アプリケーションプログラムインターフェース(API)、またはコプロセッサと要求側オブジェクト間の「ミドルマン(middle man)」オブジェクトを介して実装することができる。
(カウント情報を使用したBツリーにおける位置アクセス)
bツリーは、ソート順で値の集合を保持するために使用されるデータ構造である。各値は、bツリーのリーフレベルにおける要素の中に格納されるか、または参照される。bツリーの各ノードは、通常、n個の値(例えば、n=4)に対する空間を収容する。値のいくつかは、未使用であるか、または「空」である場合がある。本明細書の用法では、値を含む空間または要素は、「値あり要素」と呼び、空である空間または要素は、「値なし要素」と呼ぶ。図2は、例示的なbツリー構造200を示している。bツリー200は、レベル12、14、および16で示すレベルを備える。最上レベル12は、ルートレベルと呼ばれる。最下レベル16は、リーフレベルと呼ばれる。リーフレベル16以外のどのレベルも、非リーフレベルと呼ばれる。レベル14は、非リーフレベルであり、ルートレベル12も同様である。ツリーは、多くの非リーフレベルを有することが可能である。bツリーは、1つだけのレベルを有することがある(それゆえ、これはルートレベルであり、リーフレベルである)。各レベルが1つまたは複数のノード21を有し、各ノード21が1つまたは複数の要素18を含むことができる。ルートレベル12は、ルートノードと呼ばれ、単一のノードだけを有する。リーフレベル16のノードはリーフノードと呼ばれ、非リーフレベルのノードは非リーフノードと呼ばれる。実際には、リーフレベルに格納された値は、アプリケーションによって探索することができる実際の値であり、非リーフレベルに格納された値は、実際の値がリーフレベルのどこに配置されているかを識別するのに使用される「インデックス値」である。(ただし、インデックス値と実際の値は、通常、同じドメインを有することを理解されたい。例えば、文字A〜Zを格納するのにツリーが使用されている場合、リーフレベルと非リーフレベルの要素の両方が、A〜Zの範囲の文字を格納するが、非リーフレベルにそのような文字を格納する目的は、通常、探索中の文字が非リーフレベルノードのどのサブツリーに収容されているかを識別するためである。)
例示的なツリー200は、3つの非リーフノードおよび6つのリーフノードを有する。ノードは、1つまたは複数の要素18を有することがある。明瞭にするために、ルートレベル12におけるルートノードの中の1つの要素18だけに要素18とマークを付けている。要素は、ツリー内で何らかの位置順序に配置されることが可能な値を収容する。各要素18は、図2に文字A、B、C、D、E、F、G、H、I、J、K、およびLで示す値を収容することができる。図2の例では、要素18は、値なし要素であり(値が入っていないため)、ノード21の左端の要素は、値あり要素である(値Gが入っているため)。ツリー構造は、値の編成を表しており、このため、そのような値が文字どおり一緒に格納される必要はなく、単にツリー構造200と整合する形で論理的に関連付けられているだけであることを理解されたい。このように、ツリーに「含まれる」値または「格納されている」値という言い方は、ツリー構造に従って値が互いに関連付けられているか、または編成されているどのような状況をも表すものと理解されたい。
例示的なbツリー200は、値「G」を含む(レベル12における)ルートノードから始まる。非リーフノードに格納された5つの値(G、C、E、I、およびK)と、リーフノードに格納された12の値(A、B、C、D、E、F、G、H、I、J、K、およびL)とが存在する。非リーフノードおよび値は、特定の値または位置を探す際にリーフノードに対するサーチを容易にするディレクトリとして使用される。bツリーを使用するほとんどのサーチアルゴリズムは、探索される値を見つけるためにツリーをリーフに至るまで下降することを要求するが、他のタイプのサーチ技術はbツリーのすべてのレベルにおける値を利用して、マッチが見つかった場合、探索を完了し、リーフノードに到達する前に終了することができるようにすることができる。
Bツリーを使用して様々なアプリケーションについての位置アクセスを実行することができる。位置ベースの操作には、次の操作が含まれる。すなわち、指定された順序位置における値を探し出すこと、新しい値を挿入した際にその値が挿入された位置を獲得すること、および値を削除した際に値が削除された位置を獲得することである。指定された位置で値を探し出すことの例には、特定の順序位置で単一の項目(例えば、ソートされたセットの第n番の項目)を探し出すこと、または多数の順序付けされた項目が入っているリストの中で項目のサブシーケンス(例えば、何らかの順序にソートされた多数の電子メールが入っているリストの中のmからnの番号が付けられた電子メール)を探し出すことが含まれる。図3は、大きな値のリスト26から小さいグループの項目、グループ22および24が何らかのアプリケーション(例えば、電子メールアプリケーション)によってディスプレイ28上に表示されることを示す図である。この例示的なアプリケーションは、ディスプレイ28上に電子メールメッセージのリスト26などの値リストを表示することを含む。例えば、リスト26の中の項目のそれぞれが、電子メールメッセージの要約であることができ、グループ22および24がそれぞれ、ディスプレイウインドウに収まること電子メールメッセージの要約を収容することができる。このタイプのリストが、極めて大きい(例えば、10000個の値より多い)ことも珍しくない。パフォーマンス上の悪影響を緩和し、利用されるメモリの量を少なくするため、リスト全体26を一度にメモリにロードして表示することはしない。むしろ、リストの部分をメモリにロードして表示する。図3に示したとおり、ディスプレイ28は、どの時点においてもリスト26から4つの項目だけを表示する。この例では、リスト26の4つの値だけが、一度にメモリに格納され、そして/または表示される。2つのグループの項目22および24により、ユーザが最初にグループ22を見て、次にリスト26を2項目だけ前にスクロールした場合にユーザが見ることができるものが示されている。最初、グループの項目22が表示され、続いて、グループの項目24が表示される。グループの項目22は、位置0に関連する値A、位置1に関連する値B、位置2に関連する値C、および位置3に関連する値Dを含む。グループの項目24は、位置2に関連する値C、位置3に関連する値D、位置4に関連する値E、および位置5に関連する値Fを含む。位置アクセスを利用する前述のアプリケーションは、単に例示であり、位置アクセスを利用したアプリケーションの他のいくつかの例も想像できることを理解されたい。
図4は、本発明の例示的な実施形態によるリーフレベルカウント要素をからなるbツリーを示す図である。これらのリーフレベルカウント要素は、図5に関連して以下に説明する技術を使用して、要素をその順序位置で識別するために使用することができる。リーフレベルカウント要素(例えば、38および40)の形で情報が基礎となるbツリーデータ構造に格納される。リーフレベルカウント要素は、非リーフの各値あり要素の左右に配置される。(ツリーは、通常、論理的な左右の編成を有するものとみなされ、要素の「左」および「右」へのカウント要素の配置は、この論理的な左右の編成に対応しているものと理解されるべきである。つまり、本発明は、データの物理的な左右の編成を必要としない。)図4に示すとおり、左リーフカウント38は、値あり要素30(値G)に隣接して左側に位置するように示されている。右リーフレベルカウント要素40は、値あり要素30に隣接して右側に位置するように示されている。(本発明は、各値あり要素30が左カウントおよび右カウントを有する限り、左カウントおよび右カウントが値あり要素に「隣接して」配置されることを必要としないことが理解されるであろう。)通常、リーフレベルカウント要素(左端のカウントおよび右端のカウント以外)は、ある値あり要素の左カウントとしても、別の値あり要素の右カウントとしても機能する。例えば、リーフレベルカウント46は、値あり要素43の右リーフレベルカウント要素としても、値あり要素45の左リーフレベルカウント要素としても機能する。リーフレベルカウントは、他の様々なやり方で実施することもできる。
各リーフレベルカウント要素は、ノードのサブツリーの内の1つのリーフレベルにおけるデータ項目の総数を示す値を備える。詳細には、値あり要素の左カウントおよび右カウントがそれぞれ、nおよびmである場合、その値あり要素のすぐ左側のサブツリーは、そのリーフレベルにおいてn個のデータ項目を収容し、その値あり要素のすぐ右側のサブツリーは、そのリーフレベルにおいてm個の要素を収容する。例えば、左リーフカウント38は、ルートノード44を有するサブツリー42に対応する。また、左リーフカウント要素38は、サブツリー42のリーフレベルにおけるデータ項目(例えば、値あり要素)の数を示す値6を収容する。図4に示すとおり、サブツリー42は、リーフレベルにおいて6つの値あり要素(A、B、C、D、E、およびF)を有し、これは、左リーフカウント38に配置された値と一致する。このサブツリーは、リーフレベルにおけるすべてのノードを含み、bツリーのリーフレベルに至るまで分岐するすべての要素を含んでいる。図4で見て取ることができるように、各リーフレベルカウント要素(「0」とマーク付けされたもの以外)が、それぞれのサブツリーに対応する。例えば、左リーフレベルカウント要素41は、2つの値あり要素(値AおよびB)および2つの値なし要素からなるノードだけを収容するサブツリー47をポイントする。図4では明瞭にするため、すべてのサブツリーにはサブツリーとしてのラベルを付けていない。
図5は、bツリーのリーフレベル上の所定の順序位置に配置された要素を特定するための例示的なプロセスの流れ図である。一般に、左リーフレベルカウント要素および右リーフレベルカウント要素は、bツリーを下降するのにどのパスを辿るかを決定するためと、現在位置の左側にどれだけの数の値が現れるかを判定するために用いられる。bツリーのリーフレベルに達すると、(a)現在のリーフノードの左側のリーフレベル値の数と、(b)探索されている順序位置との差を使用して所定の位置を探し出す。bツリーは、通常、左から右にトラバース(traverse)されるが、図5に示したプロセスの向きを逆にして、プロセスを右から左に実行してもよいことを理解されたい。左から右への向きは、論理的であり、物理的ではないことをさらに想い起こされたい。このように、何をもって「左」および「右」とするかは、ツリーの設計者の定義による。(通常、ツリーは、論理的に「左」の値が、論理的に「右」の値に先行するように構成される。)図5に示したプロセスの以下の説明は、図4の例が含まれており、図4を参照してより容易に理解することができる。以下の省略形を図5で使用している。
PP−探索されるデータ項目の所定の順序位置
LL−左リーフカウント要素値
RL−右リーフカウント要素値
VE−値あり要素
bツリーのトラバースを開始する前に、所定の順序位置が範囲内にある、すなわち、bツリーのリーフレベルにおける値あり要素の数を越えていないことを確認することができる。オプションのステップ50で、所定の位置の値がbツリーのルートノードにあるリーフレベルカウント要素の値の合計より大きいかどうかが判定される。bツリーのルートノードのすべてのリーフレベルカウント要素の値の合計は、bツリーのリーフレベルの値あり要素の総数に等しいため、所定の位置がこの合計より大きい場合、その所定の順序位置は範囲外である。所定の順序位置がこの合計より大きい場合(ステップ50)、サーチはステップ54で終了することができ、所定の位置が範囲外であるという指示を与えることができる。ステップ60で、スキップカウント(SkipCount)というカウンタが初期化される。このカウンタは、ゼロなどの適切な値に初期化することができる。スキップカウントは、bツリーのトラバース中にスキップされたリーフの値あり要素(すなわち、現在のノードの左側にあることが分かっている要素)の値を累計するカウンタである。bツリーのリーフレベルに到達すると、この累計値を使用して所定の位置を探し出す。
bツリーのルートノードの左端の値あり要素(例えば、図4の値あり要素30)から開始して、ステップ52で、ルートノードが左から右に調べられる。所定の位置が、現在の値あり要素(例えば、30)に隣接して右側に位置する左リーフカウント要素(例えば、値あり要素30)の値(例えば、6)と現在のスキップカウント値との合計と比較される。所定の位置の順序番号がこの合計以下である場合、ステップ76で、左リーフレベルカウント要素(例えば、38)によって参照されるノードまでbツリーをトラバースする。このノードは、bツリーの次に低いレベルにおいて見出される。ステップ66で、現在のレベルがリーフレベルであるかどうかが判定される。現在のレベルがリーフレベルである場合、ステップ68で、所定の位置からスキップカウント値を引いた差が算出される。探索される所定の位置は、リーフレベルにおける左端の値あり要素から開始して、この差に等しい数の値あり要素だけ右に移動することによって見出される。ステップ66で、現在のレベルがリーフレベルではない場合、現在のレベルの左端の値あり要素からトラバースプロセスが再び開始される(ステップ52)。
ステップ58に戻ると、所定の位置が左リーフレベルカウント要素値とカウンタスキップカウントの合計より大きいと判定された場合、ステップ56で、左リーフレベルカウント要素の値だけスキップカウントが増分される。このように左から右に各左リーフレベルカウント要素と遭遇するにつれ、スキップカウントは、遭遇した左リーフレベルカウント要素値の移動合計(running sum)(累積値)を保持し、これによりツリーの特定のブランチをトラバースすることによって「スキップ」されたリーフレベル値要素の総数が表される。ステップ62で、所定の位置が右リーフレベルカウント要素値にスキップカウント値を足した合計以下であるかどうかが判定される。この合計以下である場合、ステップ64で、右リーフレベルカウント要素によって参照されるノードまでbツリーをトラバースする。ステップ66で、現在のレベルがリーフレベルであるかどうかが判定される。このステップ(66)以降、プロセスは、前述したとおりである。ステップ62で、所定の位置が右リーフレベルカウント要素値より大きい場合、ステップ73で、現在の右リーフカウント要素の値だけスキップカウントが増分され、ステップ74で、次の値あり要素まで右から左に現在のノードレベルをトラバースする。プロセスは、ステップ62に進み、前述したとおり継続される。
サーチプロセス例を図4と5の両方を参照して以下に説明する。この例では、探索されているデータは、bツリーのリーフに格納されたすべてのソートされたデータの第10番の順序位置に現れるものと想定し、これは、図4の値Jに相当する。最初、値10が、6+6の合計と比較される(ステップ50)。6+6=12であり、10より大きいため、カウンタ、スキップカウントが、0に初期化され、プロセスは、ステップ52に進み、そこでサーチプロセスが値あり要素30から開始される。ステップ58で、値10が6(すなわち、値あり要素30の左側に現れるカウント)と比較される。10は6より大きいので、プロセスは、ステップ56に進み、カウンタ、スキップカウントが、6だけ増分され、スキップカウントが6に等しくなる。次に、ステップ62で、値10が値6+6と比較される。10は12より小さいため、プロセスは、ステップ64に進む。次に、リーフレベルカウント40によって参照されるノードから開始してbツリーがトラバースされ(ステップ64)、このノードは、非リーフレベル34における右端のノード(値IおよびKが入っているノード)である。現在のレベル(レベル34)はリーフレベルではないため(ステップ66)、プロセスは、ステップ52に進む。値Iが入っている値あり要素から開始して(ステップ52)、値10が、値2+6=8と比較される(ステップ58)。10は8より大きいため、ステップ56で、スキップカウントが、6+2=8に増分される。ステップ62で、値10が、2(右リーフレベルカウント値)+8(スキップカウントの現在値)の合計と比較される。10(合計)は10(探索される所定の位置の順序番号)と等しいため、プロセスは、ステップ64に進み、リーフレベル36におけるリーフノード(IおよびJが入っている)から開始してbツリーがトラバースされる。これはリーフレベルであるため(ステップ66)、スキップカウントの値(8)が、所定の位置の値(10)から引かれて、2がもたらされる(ステップ68)。ステップ68によれば、サーチプロセスは、次に、現在のリーフノードの中の左端の値あり要素(値I)に進み、計算された差の数(2)を左から右にカウントする。これにより、値Jが入っている値あり要素にある所定の位置が探し出されることになる。
別の実施形態では、本明細書で説明するbツリーのルートノードに左リーフカウント要素および右リーフカウント要素が入っているbツリーにより、bツリーのリーフレベルにある値あり要素の総数を算出する能力が提供される。これは、bツリーのルートノードに位置する左リーフレベルカウント要素の値と右リーフレベルカウント要素の値とを合計することによって達成される。
前述したとおり、位置ベースの操作には、指定された位置における値を探し出すこと、新しい値が挿入された際にその値が挿入された位置を獲得すること、値が削除された際にその値が削除された位置を獲得することが含まれる。値あり要素が挿入された場合、および/または削除された場合、すべての適切なレベルにおいて適切な左リーフレベルカウント要素および右リーフレベルカウント要素の中の値を更新することによってbツリーが更新される。リーフレベルカウント要素値の実際の変更は、bツリーを更新するための任意の適切な手段によって達成することができる。リーフレベルカウント要素値は、bツリーの要素値が更新されるのと同時に更新することができる。
値あり要素が追加され、そして/または削除されるのにつれ、bツリーが拡大し、そして/または縮小することがある。bツリーは、通常、レベルを分割し、より多くのノードを有することにより拡大する。bツリーは、通常、ノードを結合することにより縮小する。bツリーにおけるノードは、ノード中の値の数が指定された閾値(多くの場合、分割閾値と呼ばれる)を超えた場合に分割される。bツリーにおけるノードは、ノード中の値の数が指定された閾値(多くの場合、縮小閾値と呼ばれる)を下回った場合に縮小される。通常、ノードがその縮小閾値に達した場合、ノードをそのノードの左または右の兄弟と結合しようとする試みがまず行われる。しかし、ノードを兄弟と結合することができない場合、値が左または右の兄弟から再配分される。挿入された要素および削除された要素を有するbツリーの例を以下に説明する。これらの例には、リーフレベルのルートノードを分割すること、非リーフレベルのルートノードを分割すること、リーフレベルノードを左の兄弟ノードと結合すること、非リーフレベルノードを左の兄弟ノードと結合すること、リーフレベルノードから値を再配分すること、および非リーフレベルノードから値を再配分することが含まれる。実際には、bツリーを分割したり、縮小したりするためのアルゴリズムは、使用されるbツリー構造の特定のタイプに応じて多種多様である。
図6は、リーフレベルルートノード69が、値「E」を有する値あり要素を挿入して、リーフレベルノード70および71、ならびに非リーフレベルノード72をもたらすように分割されることを示す図である。値「E」を挿入しようとする試みがいっぱいのノード69に対して行われる。図6に示すとおり、2つの新たなリーフノード70および71が割り振られ、これら2つの新たなリーフノード70および71の間で均等に値が配分される。中央値「C」は、新たなルートノード72の中に昇格され、左リーフカウント61の値および右リーフカウント63の値が、それに応じて更新されて、「C」の左側に2つのリーフレベル値と、「C」の右側に3つのリーフレベル値とがあることが反映される(リーフレベル値「C」は、ルートノードの「C」の右側にあるサブツリーに格納され、慣例により、インデックス以上である値は、右側に格納される)。図6に示すとおり、更新済みのbツリー構造は、リーフノードにある値の数を示す左カウント値および右カウント値を備え、各左/右のリーフカウント値は、サブツリーのルートノードを表すか、または示す。例えば、ノード72は2および3のリーフカウント値を備え、それぞれABおよびCDEの値あり要素を有するノードを示している。
図7は、非リーフレベルルートノード75が、bツリーのリーフレベルに値「M」を挿入するために2つのノード76および77に分割されることを示す図である。図7に示したbツリーは、最初、2レベルの深さである。ルートノード75はいっぱいであり、「M」という新しい値が挿入されることになるリーフノード78もいっぱいである。このbツリーに「M」を挿入することにより、2つのノード分割がもたらされる。ルートノード75がノード76および77に分割され、ノード78がノード79および80に分割される。いっぱいのルートノード75からの値は、2つの新しいノード76と77の間で均等に配分され、ノード76および77はそれぞれ、この時点で、「C」、「E」、および「I」、「K」を収容する。値「G」は、新しいルートノード81の中に昇格される。ルートノード81に格納されたリーフレベルカウント要素値は、リーフノードにある値の数を表す。「M」が挿入されることになる所望のリーフノードは、いっぱいである。新しいノード80が作成される。値「I」、「J」、「K」、「L」、および「M」が、2つのノード79および80に均等に配分される。中央値「K」は、親ノード77の中に昇格され、親ノード77のリーフカウントが、例えば、図12に関連して以下に説明するプロセスにより、この分割を反映するように更新される。図7に示すとおり、更新済みbツリー構造は、リーフノードにある値の数を示す左リーフカウント値および右リーフカウント値を備え、各左/右のリーフカウント値は、サブツリーのルートノードを表すか、または示す。例えば、ノード76は2、2、および2のリーフカウント値を備え、それぞれがAB、CD、およびEFの2つの値を有する要素を有するノードを示している。
図8は、リーフノード82と83をノード82に結合して、それに応じてリーフレベルカウント要素値を更新することを示す図である。ノードを結合することは、ノードの値をそのノードの左または右の兄弟に移動することができる場合(例えば、左または右の兄弟に十分な空き空間が存在する場合)、適切である。以下の例は、ノードを左の兄弟ノードと結合することを表現している。ノードを右の兄弟ノードと結合することは、ノードを左の兄弟ノードと結合することと同様であり、以下に説明することはしない。図8に示すとおり、ノード83を右の兄弟と結合することはできない。というのは、右の兄弟にはスペースが全くないからである。値「C」を、左の兄弟ノード82の中に移動し、そしてノード83を削除する。親ノードの中のそのノード(83)の参照項目が削除される(例えば、値「C」を有する項目が親ノードから削除される)。最後に、ノード84の左リーフカウントおよび右リーフカウントが、例えば、図12で以下に説明するプロセスによって、更新される。図8に示すとおり、更新済みのbツリー構造は、リーフノードにある値の数を示す左リーフカウント値および右リーフカウント値を備え、各左/右のリーフカウント値は、サブツリーのルートノードを表すか、または示す。例えば、ノード84は2および4のリーフカウント値を備え、それぞれがABCの値を有する要素を有するノード、およびEFGHの値を有する要素を有するノードを示している。
図9は、非リーフノード86をその左の兄弟85と結合して結合ノード87を形成することを示す図である。値「I」が入っているノード86は、右の兄弟を有さず、そのため、左の兄弟ノード85と結合される。値「G」が、ルートノードから左の兄弟ノード85の中に降格され、値「I」が左の兄弟ノード85に付加され、「G」、「H」、および「I」、「J」を含む子ノードに対するポインタが、左の兄弟ノード85の中に移動される。値「G」がルートノードから削除されたので、ルートノードは、この時点で空であり、削除される。元の左の兄弟ノード85は、ツリーの新しいルートノード87になる。ルートをつぶすことは、ルートノードにもはや値が存在しない場合に適切である。図9に示すとおり、更新済みbツリー構造は、リーフノードにある値の数を示す左リーフカウント値および右リーフカウント値を備え、各左/右のリーフカウント値は、サブツリーのルートノードを表すか、または示す。例えば、ノード87は2、2、2、2、および2というリーフカウント値を備え、それぞれが値ABを有する要素を有するノード、値CDを有する要素を有するノード、値EFを有する要素を有するノード、値GHを有する要素を有するノード、および値IJを有する要素を有するノードを示している。
ノードの値を再配分する2つの例を以下に説明する。ノードとノードの兄弟の間で値を再配分する多くのやり方が存在する。左の兄弟だけからいくつかの値を移動するか、または右の兄弟だけからいくつかの値を移動するか、あるいは両方の兄弟から値を移動することができる。以下の2つの例は、兄弟からの1つの値の再配分を説明し、提示されるプロセスは、複数の値の配分を実行するように一般化することができるものと理解されるであろう。
図10は、リーフレベルノードに値を再配分することを示す図である。リーフレベルノード88は、1つの値「E」を有する。ノード88がその縮小閾値(例えば、1つの値)に達したものと想定し、ノード88が縮小される。ノード88の兄弟は両方ともいっぱいであるため、ノード兄弟の一方から値が再配分される。この例では、左の兄弟と値が共有されるが、それが右の兄弟であることも同じく容易である。値を再配分するために、値「D」が、左の兄弟からシフトされ、値「E」を収容するノードの中に挿入される。次に、親ノードの値が値「D」により更新されて、値の正しいシフトを反映する。これにより、親ノードがリーフノードの中の正しいソート順を反映するようになる。最後に、親/ルートノードのリーフカウントが更新される。図10に示すとおり、更新済みbツリー構造は、リーフノードにある値の数を示す左リーフカウント値および右リーフカウント値を備え、各左/右のリーフカウント値は、サブツリーのルートノードを表すか、または示す。例えば、再分配済みのbツリーのルートノードは3、2、および4というリーフカウント値を備え、それぞれが値ABCを有する要素を有するノード、値DEを有する要素を有するノード、および値FGHIを有する要素を有するノードを示している。
図11は、非リーフレベルノードから値を再配分することを示す図である。非リーフレベルノード89が、1つの値「M」を有する。このノード89がその縮小閾値に達しているものと想定し、ノード89は左の兄弟と結合することができず、右の兄弟が存在しないため、左の非リーフ兄弟から値が再配分される。値「K」が、ルートノードから「M」を収容する非リーフノード89の中に降格される。次に、左の兄弟の最後の値「I」が、ルートノードの中に昇格される。最後に、「K」および「M」を収容するノードの中で子ノードポインタが更新され、影響を受けるノードのすべてにおいてリーフカウントのすべてが更新される。図11に示すとおり、更新済みbツリー構造は、リーフノードにある値の数を示す左リーフカウント値および右リーフカウント値を備え、各左/右のリーフカウント値は、サブツリーのルートノードを表すか、または示す。例えば、ノード1101は2、2、2、および2というリーフカウント値を備え、それぞれが値ABを有する要素を有するノード、値CDを有する要素を有するノード、値EFを有する要素を有するノード、および値GHを有する要素を有するノードを示している。
図12は、bツリーにおけるリーフレベルカウント要素の中の値を更新するための例示的なプロセスの流れ図である。図12に示したプロセスは、値あり要素が既に挿入されたか、または削除されており、前述したように左カウントおよび右カウントを収容するbツリーに適用される。ステップ90で、値あり要素が追加されるか、または削除される。そして、ステップ91で、すぐ上の親リーフレベルカウント要素に戻るようにbツリーがトラバースされる。つまり、プロセスは、値あり要素が削除されたか、または追加された現在のノードを参照するリーフレベルカウント要素に進む。ステップ92で、値あり要素が追加されたか、あるいは削除されたかが判定される。値あり要素が追加されている場合、ステップ93で、現在のリーフカウントの値を1だけ増分する。ステップ93および94で参照される現在のリーフカウントは、ステップ91で参照されるすぐ上の親リーフレベルカウント要素であることに留意されたい。値あり要素が削除されている場合、ステップ94で、現在のリーフカウント要素を1だけ減分する。次に、ステップ95で、上位のノードが存在するかどうかが判定される。つまり、現在のリーフレベルカウント要素が、親リーフレベルカウント要素によって参照されているかどうかが判定される。参照されている場合、プロセスは、ステップ91に進み、前述したように実行される。上位のノードが存在しない場合、プロセスは、ステップ96で完了する。
本明細書で説明したbツリーの位置アクセスのための方法は、コンピュータに実装したプロセス、およびそのプロセスを実施するためのシステムの形態で実現することができる。また、本明細書で説明したbツリーの位置アクセスのための方法は、フロッピー(登録商標)ディスケット、読み取り専用メモリ(ROM)、CD−ROM、ハードドライブ、高密度ディスク、または任意の他のコンピュータ可読記憶媒体などの実体のあるメディアに実施されたコンピュータプログラムコードの形態で実現してもよく、このコンピュータプログラムコードがコンピュータにロードされ、実行されると、コンピュータが本発明を実施するためのシステムとなる。また、本明細書で説明したbツリーの位置アクセスのための方法は、例えば、記憶媒体に格納されるか、コンピュータにロードされ、そして/または実行されるか、あるいは電気配線もしくはケーブル配線、光ファイバ、または電磁放射を介してなど、何らかの伝送媒体を介して伝送されるかに関わらず、コンピュータプログラムコードの形態で実現されてもよく、このコンピュータプログラムコードがコンピュータにロードされ、実行されると、コンピュータが本発明を実施するためのシステムとなる。汎用プロセッサ上に実装される場合、コンピュータプログラムコードセグメントによりプロセッサが設定構成されて、特定の論理回路を作成する。
本明細書で説明した様々な技術は、ハードウェアまたはソフトウェアに関連して実装することができ、適切な場合、ハードウェアとソフトウェアの組み合わせで実装することができる。このように、本発明の方法および装置、または本発明のいくつかの態様または部分は、フロッピー(登録商標)ディスケット、CD−ROM、ハードドライブ、または任意の他のコンピュータ可読記憶媒体などの実体のあるメディアに実施されたプログラムコード(すなわち、命令)の形態をとることが可能であり、このプログラムコードがコンピュータなどのマシンにロードされ、実行されると、そのマシンが本発明を実施するための装置となる。プログラム可能なコンピュータ上のプログラムコード実行の場合、コンピューティングデバイスは、一般に、プロセッサ、プロセッサによって読み取り可能な記憶媒体(揮発性および不揮発性のメモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含む。例えば、データ処理APIなどの使用を通じて、本発明の信号処理サービスを利用することができる1つまたは複数のプログラムが、好ましくは、ハイレベルの手続きプログラミング言語またはオブジェクト指向プログラミング言語で実装されてコンピュータと通信する。ただし、プログラムは、所望される場合、アセンブリ言語または機械語で実装することもできる。いずれにしても、言語は、コンパイルされた言語、またはインタープリートされた言語である場合があり、ハードウェア実装と組み合わせる場合がある。
また、本発明の方法および装置は、電気配線もしくはケーブル配線、光ファイバ、または任意の他の形態の伝送を介するなど、何らかの伝送媒体を介して伝送されるプログラムコードの形態で実現される通信を介して実施することもでき、このプログラムコードが、EPROM、ゲートアレイ、プログラマブル論理デバイス(PLD)、クライアントコンピュータ、ビデオレコーダもしくは同類のもの、または例示的な実施形態で前述した信号処理能力を有する受信側マシンなどのマシンによって受信され、ロードされ、実行されると、本発明を実施するための装置となる。汎用プロセッサ上に実装された場合、プログラムコードはプロセッサと一体になって、本発明の機能を呼び出すように動作する固有の装置を提供する。さらに、本発明に関連して使用されるいかなる記憶技術も、常に、ハードウェアとソフトウェアの組み合わせである。
本発明の実施形態を様々な図の好ましい実施形態に関連して説明してきたが、本発明から逸脱することなく、本発明と同じ機能を実行するために、他の同様の実施形態を使用したり、または説明した実施形態に変更または追加したりすることが可能であることが理解されるべきである。さらに、特に数多くの無線でネットワーク化されたデバイスが普及しつづけている中で、ハンドヘルドデバイスのオペレーティングシステム、およびその他のアプリケーション特有のオペレーティングシステムを含め、様々なコンピュータプラットフォームが企図されていることを強調しておかなければならない。それゆえ、本発明は、いずれの単独の実施形態に限定されるものではなく、むしろ添付の特許請求の範囲の広がりおよび範囲において解釈されなければならない。
本発明の一例によるbツリーを使用した位置アクセスのための方法およびシステムを実施することができる適切なコンピューティングシステム環境の一例を示す図である。 例示的なbツリー構造を示す図である。 本発明の例示的な実施形態によるbツリーの位置アクセスを利用して比較的小さいグループの項目が選択される比較的大きい項目リストを示す図である。 本発明の例示的な実施形態による左および右のリーフレベルカウント要素からなるbツリーの図である。 本発明の例示的な実施形態によるbツリーの所定の位置に配置された要素を探し出すための例示的なプロセスの流れ図である。 本発明の例示的な実施形態により、リーフレベルのルートノードを分割して値あり要素を挿入し、リーフレベルカウント要素を更新することを示す図である。 本発明の例示的な実施形態により、非リーフレベルのルートノードを2つのノードに分割して値を挿入し、リーフレベルカウント要素を更新することを示す図である。 本発明の例示的な実施形態により、リーフノードを結合し、リーフレベルカウント要素値を更新することを示す図である。 本発明の例示的な実施形態により、非リーフノードをその左の兄弟と結合して結合ノードを形成し、リーフレベルカウント要素を更新することを示す図である。 本発明の一例により、リーフレベルノードに対して値を再配分し、リーフレベルカウント要素を更新することを示す図である。 本発明の例示的な実施形態により、非リーフレベルノードからの値を再配分し、リーフレベルカウント要素を更新することを示す図である。 本発明の例示的な実施形態により、bツリーのリーフレベルカウント要素の中の値を更新することについての流れ図である。
符号の説明
12 ルートレベル
14、34 レベル
16、36 リーフレベル
18 要素
21、69 ノード
22、24 グループの項目
26 リスト
28 ディスプレイ
30、43、45 値あり要素
38、41、61 左リーフカウント
40、46、63 右リーフカウント
42、47 サブツリー
44、75 ルートノード
70、71、78、82、83 リーフノード
72、81 ルートノード
76、77、79、80、84、85、86、87、88、89、1101 ノード
200 bツリー

Claims (22)

  1. 所定の順序位置に配置された要素についてバランスツリー(bツリー)をサーチするための方法であって、
    前記bツリーのルートノードの要素を左から右に評価する動作と、
    前記ルートノードのサブツリーのそれぞれに収容されたリーフレベル要素の数を示すリーフレベルカウントに基づいて前記サブツリーを選択し、前記選択したサブツリーの前記ルートノードまで下降する動作と、
    評価する前記動作、選択する前記動作、および下降する前記動作を、前記bツリーのリーフノードに遭遇するまで繰り返す動作と、
    前記リーフノード内の要素の相対位置、および前記リーフノードに先行する他のリーフノードに格納された要素の総数に従って、前記リーフノードにおいて、前記所定の順序位置にある前記要素を探し出す動作と
    を備えることを特徴とする方法。
  2. 前記所定の順序位置を表す数が前記bツリーの前記ルートノードの中のすべてのリーフレベルカウントの合計より大きいかどうかを判定する動作と、
    前記所定の位置の前記値が前記合計より大きい場合、前記所定の位置の値が範囲外であることを示す動作と
    をさらに備えることを特徴とする請求項1に記載の方法。
  3. 選択する前記動作は、
    前記ルートノードの要素毎に、前記所定の順序位置を表す数が、
    前記遭遇した値あり要素に隣接して左側に位置するリーフレベルカウントの値と、
    すべての以前に遭遇した右リーフレベルカウントおよび左リーフレベルカウントの累積値を示すスキップカウントカウンタの値と
    の第1の合計以下であるかどうかを判定する動作と、
    前記数が前記第1の合計以下である場合、サブツリーを選択する動作と、
    前記数が前記第1の合計より大きい場合、
    最も最近遭遇した左リーフレベルカウントの値だけ前記スキップカウント値を増分する動作と、
    前記数が、
    前記遭遇した値あり要素に隣接して右側に位置する右リーフレベルカウントの値と、
    前記スキップカウント値と
    の第2の合計以下であるかどうかを判定する動作と、
    前記数が、前記第2の合計より大きい場合、
    最も最近トラバースした右リーフレベルカウントの値だけ前記スキップカウント値を増分する動作と、
    次に遭遇する値あり要素まで左から右に移動する動作と、
    前記数が前記第2の合計以下であるかどうかを判定する前記動作を繰り返す動作と、
    前記数が前記第2の合計以下である場合、サブツリーを選択する動作と
    を備えることを特徴とする請求項1に記載の方法。
  4. 前記数が前記第1の合計以下である場合、前記遭遇した値あり要素に隣接して左側に位置するリーフレベルカウントに対応するサブツリーが選択され、
    前記数が前記第1の合計より大きい場合、前記遭遇した値あり要素に隣接して右側に位置するリーフレベルカウントに対応するサブツリーが選択される
    ことを特徴とする請求項3に記載の方法。
  5. 前記bツリーの前記リーフレベルにおいて前記要素の前記所定の位置を探し出す前記動作は、
    前記所定の順序位置を表す数と、すべてのトラバースしたリーフレベルカウントの値の合計との差を算出する動作
    を備えることを特徴とする請求項1に記載の方法。
  6. 前記bツリーの非リーフレベルにおけるノードの各値あり要素について、左リーフレベルカウント要素は、非リーフレベルの各値あり要素に隣接して右側に位置し、
    前記左リーフレベルカウントのそれぞれは、
    前記bツリーの左サブツリーのリーフレベルにある値あり要素の総数と、
    前記左サブツリーのそれぞれのルートノードを示し、
    右リーフレベルカウント要素は、非リーフレベルの各値あり要素に隣接して左側に位置し、
    各右リーフレベルカウント要素は、
    前記bツリーの右サブツリーのリーフレベルにある値あり要素の総数と、
    前記右サブツリーのそれぞれのルートノードを示す
    ことを特徴とする請求項1に記載の方法。
  7. 各左サブツリーは、前記左リーフレベルカウント要素によって示されるそれぞれのルートノードから開始して前記bツリーから分岐するすべての要素を備え、
    各右サブツリーは、前記右リーフレベルカウント要素によって示されるそれぞれのルートノードから開始して前記bツリーから分岐するすべての要素を備える
    ことを特徴とする請求項6に記載の方法。
  8. 前記bツリーは、
    前記bツリーの前記リーフレベルにおいて各値あり要素に隣接して左側に位置する左リーフレベルカウント要素と、
    前記bツリーの前記リーフレベルにおいて各値あり要素に隣接して右側に位置する右リーフレベルカウント要素と
    をさらに備えることを特徴とする請求項1に記載の方法。
  9. 前記ルートノードの各要素は、第1のリーフレベルカウントおよび第2のリーフレベルカウントに関連し、前記第1のリーフレベルカウントは、前記要素のすぐ左側のサブツリーを下降することによって到達可能なリーフレベルの値あり要素の数を示し、前記第2のリーフレベルカウントは、前記要素のすぐ右側のサブツリーを下降することによって到達可能なリーフレベルの値あり要素の数を示すことを特徴とする請求項1に記載の方法。
  10. 前記選択する動作は、
    (i)カウンタを初期化する動作と、
    (ii)前記ルートノードの左端の要素から開始して、(a)前記要素の第1のカウントと(b)前記カウンタの合計が、前記所定の順序位置を表す数より大きいかどうかを判定する動作と、
    (iii)前記第1のカウントが前記数より大きい場合、前記要素のすぐ左側のサブツリーを下降する動作と、
    (iv)前記第1のカウントが前記数より大きくない場合、前記第1のカウントを前記カウンタに加算し、前記ルートノードの次の要素まで右側に移動する動作と、
    (v)前記ルートノードの右端の要素に到達するまで、またはサブツリーを下降しきるまで、前記ルートノードの各要素について動作(ii)、(iii)、および(iv)を繰り返す動作と、
    (vi)サブツリーを下降しきることなく前記ルートノードの右端の要素に到達した場合、前記ルートノードの右端の要素のすぐ右側のサブツリーを下降する動作と
    を備えることを特徴とする請求項9に記載の方法。
  11. 前記探し出す動作は、
    前記数から前記カウンタを引いて差を算出する動作と、
    前記リーフノードの左端の要素から前記差に等しい数の位置だけ右側に現れる要素を前記リーフノードにおいて探し出す動作と
    を備えることを特徴とする請求項10に記載の方法。
  12. 1つまたは複数の非リーフノードと
    1つまたは複数のリーフノードと
    を備えているbツリーデータ構造を格納したコンピュータ可読媒体であって、
    前記リーフノードのそれぞれは、
    複数の順序付け可能な値の1つまたは複数を格納しているか、または関連付けらており、
    前記非リーフノードのそれぞれは、
    前記複数の順序付け可能な値の1つまたは複数と、
    リーフノードまたは他の非リーフノードに対する1つまたは複数の参照と、
    1つまたは複数のカウントデータであって、該カウントデータのそれぞれが前記参照の1つに対応し、該対応する参照を辿ることによって到達可能なリーフノードに格納されるか、または関連する値の数をそれぞれが示す1つまたは複数のカウントデータと
    を格納するか、または関連付けられた
    ことを特徴とするコンピュータ可読媒体。
  13. 各リーフノードの前記順序付け可能な値は、順序に従って編成され、
    各非リーフノードの前記順序付け可能な値は、前記順序に従って編成され、
    各非リーフノードの前記参照は、前記順序で編成され、所与の参照から到達可能なノードに格納されるか、または関連付けられている前記所与の参照内のすべての値が、前記順序で前記所与の参照の後に続くすべての参照から到達可能なノードに格納された値に先行するように編成された
    ことを特徴とする請求項12に記載のコンピュータ可読媒体。
  14. 非リーフノードの前記順序付け可能な値のそれぞれは、前記非リーフノードの前記参照の第1の参照および第2の参照に関連づけられ、
    前記順序において前記順序付け可能な値に先行する値だけが前記第1の参照から到達可能であり、
    前記順序において前記順序付け可能な値に進むか、または前記順序において前記順序付け可能な値と同じ位置にある値だけが前記第2の参照から到達可能であるように
    関連付けられたことを特徴とする請求項13に記載のコンピュータ可読媒体。
  15. バランスツリー(bツリー)の所定の位置に配置された要素を探し出すようにコンピュータプロセッサに指示するためのコンピュータプログラムコードでエンコードされたコンピュータ可読媒体であって、前記プログラムコードは、
    前記コンピュータプロセッサに前記bツリーのルートノードの要素を左から右にトラバースさせるためのトラバースbツリーコードセグメントと、
    前記コンピュータプロセッサに値を有するそれぞれの遭遇した要素(値あり要素)において、前記所定の位置の値を左リーフカウント要素によって示される値および右リーフカウント要素によって示される値と比較させるための比較コードセグメントと、
    前記コンピュータプロセッサに比較する前記動作の結果に従って前記bツリーのサブツリーを選択させるための選択コードセグメントと、
    前記コンピュータプロセッサに前記選択したサブツリーのルートノードの要素を左から右にトラバースさせるためのトラバースサブツリーコードセグメントと、
    前記コンピュータプロセッサに前記bツリーの前記リーフレベルに遭遇するまで、比較する前記動作、選択する前記動作、および選択したサブツリーのルートノードの要素をトラバースする前記動作を繰り返させるための繰り返しコードセグメントと、
    前記コンピュータプロセッサに前記所定の位置の前記値と、
    トラバースした左リーフカウント要素と
    に従って前記bツリーの前記リーフレベルにおける前記要素の前記所定の位置を探し出させるための探索コードセグメントと
    を備えたことを特徴とするコンピュータ可読媒体。
  16. 前記プログラムコードは、
    前記コンピュータプロセッサに前記所定の位置の前記値が前記bツリーの前記ルートノードのすべての左リーフレベルカウント要素値と前記bツリーの前記ルートノードのすべての右リーフレベルカウント値との合計より大きいかどうかを判定させるための判定コードセグメントと、
    前記コンピュータプロセッサに前記所定の位置の前記値が前記合計より大きい場合、前記所定の位置の値が範囲外であることを示させるための指示コードセグメントと
    をさらに備えたことを特徴とする請求項15に記載のコンピュータ可読媒体。
  17. 比較する前記動作は、
    前記所定の位置の値が、
    前記遭遇した値あり要素に隣接して左側に位置する左リーフレベルカウント要素の値と、
    すべての以前にトラバースした右リーフレベルカウント要素および左リーフレベルカウント要素の累計値を示すスキップカウントカウンタの値であって、左リーフレベルカウント要素の最初のトラバースに先立ってゼロに初期化されるスキップカウントカウンタの値と
    の第1の合計以下であるかどうかを判定する動作と、
    前記所定の位置値が前記第1の合計以下である場合、サブツリーを選択する動作と、
    前記所定の位置値が前記第1の合計より大きい場合、
    最も最近トラバースした左リーフレベルカウント要素の値だけ前記スキップカウント値を増分する動作と、
    前記所定の位置の値が、
    前記遭遇した値あり要素に隣接して右側に位置する右リーフレベルカウント要素の値と
    前記スキップカウント値と
    の第2の合計以下であるかどうかを判定する動作と、
    前記所定の位置の値が前記前記第2の合計以下である場合、
    最も最近トラバースした右リーフレベルカウント要素の値だけ前記スキップカウント値を増分する動作と、
    次に遭遇する値あり要素まで左から右にトラバースする動作と、
    前記所定の位置の値が前記第2の合計以下であるかどうかを判定する前記動作から開始して比較する前記動作を繰り返す動作と
    を備えたことを特徴とする請求項15に記載のコンピュータ可読媒体。
  18. 選択する前記動作は、
    前記所定の位置の値が前記第1の合計以下である場合、前記遭遇した値あり要素に隣接して左側に位置する左リーフレベルカウント要素によって示されるサブツリーを選択する動作と、
    前記所定の位置の値が前記第2の合計より大きい場合、前記遭遇した値あり要素に隣接して右側に位置する右リーフレベルカウント要素によって示されるサブツリーを選択する動作と
    を備えたことを特徴とする請求項17に記載のコンピュータ可読媒体。
  19. 前記bツリーの前記リーフレベルにおいて前記要素の前記所定の位置を探し出す前記動作は、
    前記所定の位置の値と、すべてのトラバースした左リーフレベルカウント要素の値の合計との差を算出する動作
    を備えたことを特徴とする請求項15に記載のコンピュータ可読媒体。
  20. 前記bツリーの非リーフレベルにおけるノードの各値あり要素について、左リーフレベルカウント要素は、非リーフレベルの各値あり要素に隣接して右側に位置し、
    各左リーフレベルカウント要素は、
    前記bツリーの左サブツリーのリーフレベルにある値あり要素の総数と、
    前記左サブツリーのそれぞれのルートノードを示し、
    右リーフレベルカウント要素は、非リーフレベルの各値あり要素に隣接して左側に位置し、
    各右リーフレベルカウント要素は、
    前記bツリーの右サブツリーのリーフレベルにある値あり要素の総数と、
    前記右サブツリーのそれぞれのルートノードを示す
    ことを特徴とする請求項15に記載のコンピュータ可読媒体。
  21. 各左サブツリーは、前記左リーフレベルカウント要素によって示されるそれぞれのルートノードから開始して前記bツリーから分岐するすべての要素を備え、
    各右サブツリーは、前記右リーフレベルカウント要素によって示されるそれぞれのルートノードから開始して前記bツリーから分岐するすべての要素を備えた
    ことを特徴とする請求項15に記載のコンピュータ可読媒体。
  22. 前記bツリーは、
    前記bツリーの前記リーフレベルにおいて各値あり要素に隣接して左側に位置する左リーフレベルカウント要素と、
    前記bツリーの前記リーフレベルにおいて各値あり要素に隣接して右側に位置する右リーフレベルカウント要素と
    をさらに備えたことを特徴とする請求項15に記載のコンピュータ可読媒体。
JP2004162499A 2003-05-30 2004-05-31 Bツリーを使用した位置アクセス Pending JP2004362574A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/448,584 US7120637B2 (en) 2003-05-30 2003-05-30 Positional access using a b-tree

Publications (1)

Publication Number Publication Date
JP2004362574A true JP2004362574A (ja) 2004-12-24

Family

ID=33131612

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004162499A Pending JP2004362574A (ja) 2003-05-30 2004-05-31 Bツリーを使用した位置アクセス

Country Status (5)

Country Link
US (2) US7120637B2 (ja)
EP (1) EP1482421A3 (ja)
JP (1) JP2004362574A (ja)
KR (1) KR20040103495A (ja)
CN (1) CN1573746A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015029969A1 (ja) * 2013-08-28 2015-03-05 三菱電機株式会社 データ処理装置及びデータ処理方法及びプログラム

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8250093B2 (en) 2003-08-25 2012-08-21 International Business Machines Corporation Method and system for utilizing a cache for path-level access control to structured documents stored in a database
US7519574B2 (en) * 2003-08-25 2009-04-14 International Business Machines Corporation Associating information related to components in structured documents stored in their native format in a database
US8150818B2 (en) * 2003-08-25 2012-04-03 International Business Machines Corporation Method and system for storing structured documents in their native format in a database
US7792866B2 (en) * 2003-08-25 2010-09-07 International Business Machines Corporation Method and system for querying structured documents stored in their native format in a database
US8775468B2 (en) 2003-08-29 2014-07-08 International Business Machines Corporation Method and system for providing path-level access control for structured documents stored in a database
US8516004B2 (en) * 2003-09-19 2013-08-20 Unisys Corporation Method for processing K node count fields using an intensity variable
US7363284B1 (en) * 2004-04-30 2008-04-22 Unisys Corporation System and method for building a balanced B-tree
US20070162508A1 (en) * 2004-11-08 2007-07-12 Mazzagatti Jane C Updating information in an interlocking trees datastore
CN100452722C (zh) * 2006-02-21 2009-01-14 南京中兴软创科技有限责任公司 一种在资源树中实现对通信资源快速定位的方法
US8195683B2 (en) * 2006-02-28 2012-06-05 Ebay Inc. Expansion of database search queries
JP4956757B2 (ja) * 2006-03-15 2012-06-20 国立大学法人大阪大学 数式記述構造化言語オブジェクト検索システムおよび検索方法
US8190649B2 (en) * 2006-04-25 2012-05-29 Google Inc. Ranking and clustering of geo-located objects
US7765494B2 (en) * 2006-05-24 2010-07-27 Sap Ag Harmonized theme definition language
KR100922389B1 (ko) * 2007-07-04 2009-10-19 삼성전자주식회사 플래시 메모리를 위한 색인 스킴
US20100235208A1 (en) * 2009-03-12 2010-09-16 Naim Valensi System and methods for balancing binary trees
CN101515298B (zh) * 2009-03-30 2013-09-25 华为技术有限公司 基于树形数据结构节点的插入的方法和存储装置
US8209353B2 (en) * 2009-03-31 2012-06-26 Oracle International Corporation Storing hierarchical data to enable paging
US8914731B2 (en) * 2009-03-31 2014-12-16 Oracle International Corporation Analyzing user behavior to enhance data display
US8996453B2 (en) 2009-09-30 2015-03-31 Red Hat, Inc. Distribution of data in a lattice-based database via placeholder nodes
US20110078199A1 (en) * 2009-09-30 2011-03-31 Eric Williamson Systems and methods for the distribution of data in a hierarchical database via placeholder nodes
US9031987B2 (en) * 2009-09-30 2015-05-12 Red Hat, Inc. Propagation of data changes in distribution operations in hierarchical database
US8984013B2 (en) * 2009-09-30 2015-03-17 Red Hat, Inc. Conditioning the distribution of data in a hierarchical database
US8589344B2 (en) * 2009-11-30 2013-11-19 Red Hat, Inc. Systems and methods for generating iterated distributions of data in a hierarchical database
US8396880B2 (en) * 2009-11-30 2013-03-12 Red Hat, Inc. Systems and methods for generating an optimized output range for a data distribution in a hierarchical database
US8412881B2 (en) * 2009-12-22 2013-04-02 Intel Corporation Modified B+ tree to store NAND memory indirection maps
US8315174B2 (en) * 2009-12-31 2012-11-20 Red Hat, Inc. Systems and methods for generating a push-up alert of fault conditions in the distribution of data in a hierarchical database
CN103229070B (zh) * 2010-07-15 2016-10-12 泽布拉企业解决方案公司 用于确定系统节点位置并且执行温度补偿的方法和装置
US9155320B2 (en) * 2011-07-06 2015-10-13 International Business Machines Corporation Prefix-based leaf node storage for database system
US9720927B2 (en) * 2011-07-12 2017-08-01 The Board Of Trustees Of The Leland Stanford Junior University Method and system for database storage management
US8856138B1 (en) * 2012-08-09 2014-10-07 Google Inc. Faster substring searching using hybrid range query data structures
CN103870456B (zh) * 2012-12-07 2017-03-29 华东师范大学 一种面向大规模数据的索引方法及其系统
CN104424204B (zh) * 2013-08-21 2017-08-11 华为技术有限公司 索引机制合并方法、搜索方法、装置及设备
EP2849099B1 (en) * 2013-09-11 2021-07-28 Dassault Systèmes A computer-implemented method for designing an industrial product modeled with a binary tree.
KR101587158B1 (ko) * 2014-02-10 2016-01-20 주식회사 티맥스데이터 트리 인덱스를 이용하는 노드 탐색 방법 및 장치
US10146806B2 (en) * 2015-02-12 2018-12-04 Oracle International Corporation Adaptive resolution hsitogram
SG10201503755QA (en) * 2015-05-13 2016-12-29 Dataesp Private Ltd Searching large data space for statistically significant patterns
KR20170073944A (ko) * 2015-12-21 2017-06-29 에스케이하이닉스 주식회사 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법
US10706106B2 (en) * 2017-02-09 2020-07-07 Micron Technology, Inc. Merge tree modifications for maintenance operations
US10621271B2 (en) * 2017-05-25 2020-04-14 Microsoft Technology Licensing, Llc Reordering a multi-level layout using a hierarchical tree
US11048679B2 (en) 2017-10-31 2021-06-29 Oracle International Corporation Adaptive resolution histogram on complex datatypes
KR102057055B1 (ko) 2018-06-27 2019-12-18 주식회사 티맥스데이터 인덱스 관리 방법
US10915546B2 (en) 2018-10-10 2021-02-09 Micron Technology, Inc. Counter-based compaction of key-value store tree data block
US11100071B2 (en) 2018-10-10 2021-08-24 Micron Technology, Inc. Key-value store tree data block spill with compaction
US10852978B2 (en) 2018-12-14 2020-12-01 Micron Technology, Inc. Key-value store using journaling with selective data storage format
US10936661B2 (en) 2018-12-26 2021-03-02 Micron Technology, Inc. Data tree with order-based node traversal
CN111385111B (zh) * 2018-12-28 2023-03-24 中国电信股份有限公司 告警方法、装置、系统及计算机可读存储介质
KR102195836B1 (ko) 2019-02-07 2020-12-28 주식회사 티맥스티베로 인덱스 관리 방법
CN110162525B (zh) * 2019-04-17 2023-09-26 平安科技(深圳)有限公司 基于b+树的读写冲突解决方法、装置及存储介质
CN112446594B (zh) * 2020-11-12 2023-07-21 书丸子科技(云南)有限公司 一种用于学前儿童综合能力分析的多层级可量化计算方法
CN117472852A (zh) * 2022-07-20 2024-01-30 腾讯科技(成都)有限公司 日志数据查询方法、装置、设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11212980A (ja) * 1998-01-23 1999-08-06 Fuji Xerox Co Ltd インデクス作成方法および検索方法
EP1211612A2 (en) * 2000-11-29 2002-06-05 Hewlett-Packard Company (a Delaware corporation) A data structure and storage and retrieval method supporting ordinality based searching and data retrieval
JP2004110216A (ja) * 2002-09-17 2004-04-08 Fuji Xerox Co Ltd 検索装置および方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5371885A (en) * 1989-08-29 1994-12-06 Microsoft Corporation High performance file system
US5355473A (en) * 1991-06-20 1994-10-11 Lawrence Au Indexed record locating and counting mechanism
US5613105A (en) 1993-06-30 1997-03-18 Microsoft Corporation Efficient storage of objects in a file system
US5878410A (en) 1996-09-13 1999-03-02 Microsoft Corporation File system sort order indexes
KR100256686B1 (ko) * 1997-11-26 2000-05-15 이계철 다중 균형 트리 구조를 이용한 관리정보 트리에서의 노드 검색,생성 및 삭제 방법
US6711562B1 (en) * 1999-12-01 2004-03-23 The Trustees Of Columbia University In The City Of New York Cache sensitive search (CSS) tree indexing system and method
US6553370B1 (en) * 2000-10-04 2003-04-22 Lsi Logic Corporation Flexible search engine having sorted binary search tree for perfect match
KR100420957B1 (ko) * 2002-03-15 2004-03-02 한국전자통신연구원 클래스 분할 기법을 이용한 라우팅 테이블 자료구조,라우팅 테이블을 이용한 라우팅 경로 검색방법 및 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11212980A (ja) * 1998-01-23 1999-08-06 Fuji Xerox Co Ltd インデクス作成方法および検索方法
EP1211612A2 (en) * 2000-11-29 2002-06-05 Hewlett-Packard Company (a Delaware corporation) A data structure and storage and retrieval method supporting ordinality based searching and data retrieval
JP2004110216A (ja) * 2002-09-17 2004-04-08 Fuji Xerox Co Ltd 検索装置および方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015029969A1 (ja) * 2013-08-28 2015-03-05 三菱電機株式会社 データ処理装置及びデータ処理方法及びプログラム
CN105493050A (zh) * 2013-08-28 2016-04-13 三菱电机株式会社 数据处理装置、数据处理方法及程序
JP5972472B2 (ja) * 2013-08-28 2016-08-17 三菱電機株式会社 データ処理装置及びデータ処理方法及びプログラム

Also Published As

Publication number Publication date
US7657556B2 (en) 2010-02-02
EP1482421A3 (en) 2006-05-24
US7120637B2 (en) 2006-10-10
US20060122996A1 (en) 2006-06-08
EP1482421A2 (en) 2004-12-01
KR20040103495A (ko) 2004-12-08
US20040243553A1 (en) 2004-12-02
CN1573746A (zh) 2005-02-02

Similar Documents

Publication Publication Date Title
JP2004362574A (ja) Bツリーを使用した位置アクセス
JP4879580B2 (ja) ユーザ・インタフェースに自動探索メニューを与えるシステムおよび方法
US10095734B2 (en) Source code search engine
US11755825B2 (en) Method, system, and computing device for facilitating private drafting
JP4526876B2 (ja) データベースオブジェクトスクリプト生成方法およびシステム
US10095698B2 (en) Managing changes to one or more files via linked mapping records
US7469235B2 (en) System, method and program to estimate cost of a product and/or service
US10909484B2 (en) Dynamic directed graph workflows
US20090138500A1 (en) Method of compact display combined with property-table-view for a complex relational data structure
JP2006012146A (ja) 影響分析のためのシステムおよび方法
US8364723B1 (en) Apparatus and method for realizing big data into a big object and non-transitory tangible machine-readable medium thereof
EP3667493B1 (en) A method for a software development system
JP2015064876A (ja) 二分木を用いてモデル化される工業製品を設計するためのコンピュータ実装方法
EP1265155A2 (en) File tree comparator
Briot et al. High responsiveness for group editing crdts
US20110106724A1 (en) Entity morphing in metamodel-based tools
CN110569494A (zh) 用于生成信息的方法和装置
JP2005018778A (ja) ディメンジョン属性およびディメンジョン当たり複数の階層を使用するオンライン分析処理のためのシステムおよび方法
EP1050829A2 (en) Visualization of graph-structured name spaces
CN112783447A (zh) 用于处理快照的方法、装置、设备、介质和产品
CN113590543A (zh) 信息处理的方法、设备和计算机程序产品
US9047277B2 (en) Systems and methods for synchronizing hierarchical repositories
US11947958B2 (en) Method, device, and program product for managing object in software development project
US20220327160A1 (en) Delta-based conflict-free replicated data type arrays using dot stores that map dots to dot stores
CN114841130A (zh) 分表的数据合并方法、装置及电子设备及计算机可读介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070530

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100406

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101001