JPH06266781A - ナビゲート可能な形式でのツリーの格納 - Google Patents

ナビゲート可能な形式でのツリーの格納

Info

Publication number
JPH06266781A
JPH06266781A JP5195029A JP19502993A JPH06266781A JP H06266781 A JPH06266781 A JP H06266781A JP 5195029 A JP5195029 A JP 5195029A JP 19502993 A JP19502993 A JP 19502993A JP H06266781 A JPH06266781 A JP H06266781A
Authority
JP
Japan
Prior art keywords
list
node
tree
entry
subtree
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
JP5195029A
Other languages
English (en)
Inventor
Andrew R Koenig
リチャード コーニグ アンドリュー
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.)
AT&T Corp
Original Assignee
American Telephone and Telegraph Co Inc
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 American Telephone and Telegraph Co Inc filed Critical American Telephone and Telegraph Co Inc
Publication of JPH06266781A publication Critical patent/JPH06266781A/ja
Pending legal-status Critical Current

Links

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
    • 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/904Browsing; Visualisation therefor

Landscapes

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

Abstract

(57)【要約】 (修正有) 【目的】 ツリーデータ構造をコンパクトな表現及びこ
のコンパクトな表現をナビゲートするための技法に関す
る。 【構成】 このコンパクトな表現はリストである。この
リストの各要素はツリーのノードを表わし、このリスト
はツリーのプレオーダ横断に従って編成される。各リス
ト要素はそのリスト要素に対応するノードによって表わ
されるタイプのアイテムに対するデータ辞書エントリの
インデックス303のみを含む。このナビゲーション技
法は与えられたリスト要素に対応するノードの孫に対す
るリスト要素の位置、と、親に対するリスト要素の位
置、及び親ノードの場合は、その親の任意の子供に対す
るリスト要素の位置を見つけるのを助け、更にサブツリ
ーに対するリスト要素を見つけることによって機能す
る。ある与えられたノードの子供の数はデータ辞書エン
トリのインデックスをその引き数として取る数価ファン
クションによって決定される。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は一般的にはコンピュータ
及びデータ処理システム、より詳細には、コンピュータ
システムのメモリ内へのツリーデータ構造の格納に関す
る。
【0002】
【従来の技術】ツリーはデータアイテム間の関係を表わ
すためにコンピュータシステム内においてしばしば使用
されている。例えば、コンパイラは以下を含むプログラ
ムに対するソースファイルを処理することが要求され
る。
【数1】 ステートメントproduct := a* b; はコンパイラに変数
a及びbの積を変数product に割り当てる実行可能なコ
ードを生成するように指令する。コンパイラがソースコ
ードに関して動作しているとき、これはこのステートメ
ントをツリーとして表わす。図1にはこのツリーが示さ
れる。ツリー101は図1内に円によって示されるノー
ドから構成される。ある与えられたノードはそのツリー
内においてその与えられたノードよりも低い子孫ノード
(descendant nodes)及びこれより高い先祖ノード(an
cestor nodes)を持つ。こうして、ノード111の先祖
はノード107及び103であり、ノード103の子孫
はノード105、107、109、及び111である。
あるノードの最も近い先祖はその親(parent)であり、
そのノードの最も近い子孫はその子供(children)であ
る。同一の親の子供は孫(siblings)である。こうし
て、ノード107はノード103をその親として持ち、
ノード109及び111をその子供として持ち、そして
ノード105をその孫として持つ。ツリー内の最も上の
ノード、つまりこのケースにおいてはノード103はツ
リーの根ノード(root node )と呼ばれ、子供を持たな
いノードは葉ノード(leaf nodes)と呼ばれる。ツリー
101内において、ノード105、109、及び111
は葉ノードである。サブツリー(subtree )は一つのノ
ード及びその子孫の全てである。従って、ノード10
7、109、及び111はツリー101のサブツリーで
あり、そしてノード109はツリー101及びノード1
07、109、及び111から構成されるサブツリーの
両方のサブツリーである。その根がある与えられたノー
ドであるサブツリーはそのノード内に根を持つといわれ
る。従って、サブツリー107、109、及び111は
ノード107に根を持つ。
【0003】ツリー101によって表わされるソースコ
ードの部分は値に関して遂行されるべき動作を示す演算
子(operators )、及びそれに関して動作が遂行される
べき値を示すオペランド(operands)を含む。これら演
算子には乗算を示す*、及び割り当てを示す:=があ
る。オペランドについては、a及びbは*のオペランド
であり、そして:=のオペランドはproduct 及びa*b
である。ツリー101内において、演算子のオペランド
を表わすサブツリーは演算子を表わすノードの子供内に
ルートする。こうして、:=演算子を表わすノード10
3はその子供として、その中に左側のオペランドを表わ
すオペランドが根を持つノード105、及びその中に右
側のオペランドを表わすサブツリーが根を持つノード1
07を持つ。
【0004】ツリーに関してプログラムが遂行する動作
には横断(traversal )が含まれるが、ここでは、根か
ら始まって、ツリーの各ノードがある順番に訪問され;
ある与えられたノードの親の位置が見つけられ;ある与
えられたノードの特定の子供の位置が見つけられ;そし
てある横断の進路内で訪問されるべき次のノードへと移
動する。横断の二つの重要なタイプはプレオーダ(preo
rder)横断及びポストオーダ(postorder )横断であ
る。ツリー101のプレオーダ横断においては、これら
ノードは103、105、107、109、111の順
番に訪問される。ポストオーダ横断においては、これら
ノードは105、109、111、107、103の順
番に訪問される。他の動作に関しては、ノード111の
親の位置を見つける動作はノード107の位置を見つ
け;ノード103の第二の子供の位置を見つける動作は
ノード107の位置を見つけ;そしてプレオーダ横断の
ケースにおいては、ノード107に関して遂行される次
のノードに進む動作はノード109の位置を見つけるこ
ととなる。
【0005】上の動作を助けるために、ツリーは通常コ
ンピュータシステム内においてはノードデータ構造の集
合として表わされる。ツリー101の各ノードは対応す
るノードデータ構造203を持ち;各ノードデータ構造
203はそのノードのデータを表わすノードデータ20
5を含む。例えば、ノード103を表わすノードデータ
構造203内のノードデータ205は少なくともそのノ
ードが:=演算子を表わすことを示す。各ノードデータ
構造203はさらにポインタ206を持つ。ポインタ
(pointer )はメモリ内のアドレスである値である。あ
る与えられたノードデータ構造203内の親ポインタ
(parent pointer、PP)はその値としてその与えられ
たノードデータ構造203によって表わされるノードの
親ノードを表わすノードデータ構造203の(をポイン
トする)アドレスを持つ。同様に、子供ポインタ(chil
d pointer 、CP)209の各々はその与えられたノー
ドの子供の一つを表わすノードデータ構造203をポイ
ントする。子供ポインタの順番はノードデータ構造20
3によって表わされるノードの子供の左から右への順番
と同一である。従って、ツリー表現201内に示される
ように、ノード107を表わすノードデータ構造203
の親ポインタ207はノード103を表わすノードデー
タ構造203をポイントし、子供ポインタ209(1)
及び209(2)はそれぞれノード109及び111を
表わすノードデータ構造203をポイントする。前述の
ことから明かのように、ツリー101に関して遂行され
ることが必要とされる動作の全てはツリー表現201内
にポインタに従うことによって簡単に遂行できる。
【0006】ツリー表現201の2つの短所がある。第
一は、多くのアプリケーション(例えば、C++などの
ような言語に対するプログラミング環境)によって要求
されるツリーは非常に大きい。大きなツリーはメモリシ
ステムに対して様々な困難を課す。単純なコンピュータ
システムにおいては、物理メモリシステムが大きなツリ
ーを収容するために十分に大きくないことがあり;仮想
メモリを持つコンピュータシステムにおいては、物理メ
モリと関連する問題は存在しないが、ただし、仮想アド
レス空間が小さすぎるという場合も考えられ;これが問
題とならないような場合でも、大きなツリーに関する動
作の遂行は結果として多くのページの失敗及び対応する
性能の劣化を生じる可能性がある。第二の問題は、これ
らノード内のポインタ206がその中でツリー表現20
1が生成されたメモリシステム内においてのみ意味を持
ち;従って、あるコンピュータシステムから別のコンピ
ュータシステムにツリー表現201をコピーすることが
不可能であることである。
【0007】従来の技術は両者の欠点に対処しようと試
みている。一つのアプローチはデータノード205のサ
イズを最小に低減しようとする試みである。一般的にい
って、ノードデータ205によって表わされるデータは
一つのプログラム内において何度も何度も出現する。例
えば、殆どのプログラムは:=及び*などのような演算
子を反復して使用し、またプログラムは一般的にa、
b、及びproduct などのような変数を反復して使用す
る。このため、従来の技術においてはノードデータの各
一意のアイテムに対してメモリ内のデータ辞書内に一つ
のエントリが作成され、ノードデータ205がそのデー
タ辞書内のノードデータのアイテムに対するエントリと
交換され、こうしてノードデータ構造203が必要な親
及び子供ポインタ及びノードデータ構造へのインデック
スへと縮小された。ただし、幾つかのアプリケーション
におけるツリーはあまりにも大きく成長し、このような
縮小されたノードデータ構造203でも多くのメモリを
取りすぎる。さらに、これら縮小されたデータ構造20
3はアドレス空間のサイズともに着実に成長し、従っ
て、これらの中で使用されるポインタが増加する。
【0008】もう一つのアプローチはより少ないポイン
タを要求するツリーの表現を展開する方法である。この
ような表現はノードデータ構造をシーケンス順に格納
し、幾つか或は全てのポインタと置換するためにノード
データ構造が格納されている順番を使用する。このよう
な表現(representations )の例はD.E.Knuth (ナス)
による著書『基本アルゴリズム(Fundamental Algorith
ms)』、セクション2.3.3、ページ347において
見つけられる。Kunth によって親等によるポストオーダ
(postorder with degrees)(ページ350、下部)と
呼ばれるこのセクション内の表現の一つはポインタを完
全に削除する。このかわりに、ノードデータ構造が格納
されるシーケンス順はツリーのポストオーダ横断の順番
であり、各ノードデータ構造はノードの親等(degre
e)、つまり、ノードが持つ子供の数を含む。このよう
な表現の別の例はR.C.Read(リード)による著書『グラ
フ理論及び計算(Graph Theory and Computing)』にお
いても見られる。
【0009】
【発明が解決しようとする課題】ツリーのこれら“ポイ
ンタレス(pointerless )”表現の有効性は従来の技法
がポインタレス表現内に前に記述されたタイプの一般的
ナビゲーション動作をいかに遂行するかを知られないと
いう事実のために大きく制約される。この理由によっ
て、従来の技法はこのような表現をツリーの長期的保存
のためにのみ使用し、ナビゲーションが要求されるたび
にこれらをポインタを使用する表現に再構成した。ツリ
ーの再構成は時間を要求し、勿論、再構成された表現は
上に言及された全てのサイズ問題を持つ。従って、ポイ
ンタレス表現はツリーの格納に対して要求されるディク
ス空間の量を低減し、ツリーを一つのコンピュータシス
テムから別のコンピュータシステムに移動できるように
するためにのみ有効である。本発明の一つの目的はこれ
ら短所を克服し、ナビゲート可能なツリーのポインタレ
ス表現及びこれらをナビゲートするための技法を提供す
ることにある。
【0010】
【課題を解決するための手段】一面においては、本発明
はメモリシステム内にツリーデータ構造を格納するため
の装置に関する。ツリー構造は一つ或は複数のノードか
ら構成され、各ノードは複数のアイテムの一つを表わ
す。この装置は ・各アイテムに対して一つのデータ辞書エントリを含
み、一つのアイテムを表わすノードが持つ子供の数を決
定することを可能にするメモリシステム内のデータ辞
書;及び ・一つ或は複数のリストエントリを持つメモリシステム
内のリストを含むが、このリストはツリー構造の横断に
従って並べられ、各リストエントリは複数のノードの一
つを表わし、そのノードによって表わされるアイテムに
対するデータ辞書内のエントリの位置を見つけるため、
及びそのエントリによって表わされたノードの子供の数
を派生するための両方に使用できる一つの値を含む。も
う一面においては、本発明はツリーのシーケンス表現内
のサブツリーを検出するための方法に関する。シーケン
ス表現は各ノードに対して各ノードに対する数価値(va
lence value )がそれから派生できる要素(element )
を含む。数価値はその要素に対応するノードに属する子
供の数であり、これら要素のシーケンスはそのツリーの
ノードの横断(traversal )のシーケンスである。この
方法は以下のステップ、つまり、 −シーケンス内の要素の数を決定するステップ; −シーケンス内の要素に対する数価値を決定するステッ
プ;及び −要素の数から数価値の総和を引くステップを含むが、
この結果はこの引き算の結果が−1のとき一つのサブツ
リーに対応する。
【0011】本発明のその他の面としては、サブツリー
の検出に基づくツリーナビゲーション動作が含まれる。
本発明の上記の及びその他の目的、特徴及び長所は以下
の図面及び詳細な説明を精読することによって当業者に
は明白である。
【0012】
【実施例】ツリー表現及びナビゲーション技法の好まし
い実施例についての以下の議論においては、最初にツリ
ー表現の一つの好ましい実施例について説明され、次に
ナビゲーション技法の好ましい実施例について説明され
る。ツリーの低木(Shrub )としての表現 :図3 ツリーを表わすのに使用されるポイントレスデータ構造
はここでは低木(shrub )と呼ばれる。図3は例として
のツリー101を表わす低木301の好ましい実施例を
示す。低木301は2つの主要な要素、つまり、ノード
リスト(node list 、NL)302及びデータ辞書(da
ta dictionary 、DD)305を持つ。データ辞書30
5はツリー101がそれに対して作成されるプログラム
内に現れる個々の別個のアイテム、例えば、演算子、関
数名、定数、或は変数名に対して一つのエントリ307
を含む。こうして、図3は:=、producct、*、a、及
びbに対するエントリを示す。個々のエントリはそれと
関連してデータ辞書305内のそのエントリの位置を知
るために使用されるインデックス(index 、I)303
を持つ。ノードリスト302はエントリ(LE)305
のリストである。個々のリストエントリ304はツリー
のノードを表わす。好ましい実施例においては、ノード
リスト302内のエントリのシーケンスはツリー101
のプレオーダ横断(preorder traversal)のシーケンス
である。つまり、エントリ304(0)はノード103
を表わし、エントリ304(1)はノード105を表わ
す。各リストエントリ304の値はそれにリストエント
リ304が対応するノードによって表わされるアイタム
に対するデータ辞書エントリ307のインデックス30
3である。こうして、エントリ304(0)内のインデ
ックス303は:=オペレータに対するDDE307の
インデックスである。
【0013】各データ辞書エントリ307はノードアイ
テム情報311を含む。ノードアイテム情報311はプ
ログラム内のアイテムに関しての情報である。ノードア
イテム情報の内容は勿論のアイテムに依存する。これら
は常にアイテムのタイプ及び低木を使用するプログラム
が要求するそのアイテムに関する他の様々な情報を含
む。一つの好ましい実施例内のアイテムに対するデータ
辞書エントリ307の重要な特性はそのアイテムを表わ
すノードの数価(valence )がそのアイテムのデータ辞
書エントリ307から推測できるということである。あ
るノードの数価はそのノードが持つ子供の数であり、従
って、そのノードの親等(degree)に等しい。
【0014】この推測は好ましい実施例においてはこれ
がC++言語にて書かれたプログラムを表わす低木を採
用するために可能である。この言語においては、関数及
び演算子は様々な数のオペランドを持つことができる
が、ただし、ある与えられた関数の呼出し或は演算子の
使用は固定数のオペランドを持ち、従って、この呼出し
或は使用を表わすノードは固定数の子供を持つ。データ
辞書内には、この関数或は演算子に対してそれがそれと
共に使用される異なるオペランドと同数の異なるエント
リ307が存在し、その関数或は演算子に対するデータ
辞書エントリ307から数価を推測することが可能にな
る。換言すれば、一つのwhich (どれであるか)が存在
し、一つのリストエントリ304が与えられると、その
リストエントリによって表わされるノードに対する数価
をリターンする。この数価ファンクション(valence fu
nction)が図3の313の所に示される。このようなフ
ァンクションの実現は勿論様々にできる。数価を単にノ
ード情報311内に格納し、このファンクションをここ
から検索することも可能である。別の実現においては、
このファンクションはインデックス303を数価上にマ
ップするテーブルを使用することもできる。この好まし
い実施例はノードのプレオーダ横断に従って並べられた
リスト内の数価を採用するが、Knuth (クナス)の文献
は数価の使用がこのようなリストに制限されないことを
示す。
【0015】図3から分かるように、低木に対して要求
されるメモリは単にノードリスト302に対して要求さ
れるメモリの量にデータ辞書305及び数価ファンクシ
ョン313によって採用される任意のテーブルに対して
要求されるメモリの量を加えた量である。データ辞書3
05は通常他の目的に対するアプリケーションによって
要求されるため、ツリーを表わすためにそのアプリケー
ションが要求する追加のメモリは、通常、ノードリスト
302に対するメモリのみである。ノードリスト302
のサイズは、リストエントリ304のサイズの関数であ
り、これらリストエントリのサイズは、一方、データ辞
書305に対して要求されるインデックスのサイズの関
数である。これは、最終的には、要求されるインデック
スの数の関数である。一般的にいって、要求されるイン
デックスの数はアドレス空間のサイズと比較して小さ
く、従って、リストエントリ304は通常一つの表現、
例えば、表現201の任意のポインタ206よりもかな
り小さい。好ましい実施例による実験は低木301に示
される技法を使用して作成されたC++プログラムに対
するツリーのポインタレス表現はC++プログラムを表
わすために通常使用されるツリー表現のサイズの1/8
である。
【0016】低木301のナビゲーション 低木301によって表わされるツリー101のプレオー
ダ横断は単純である。つまり、低木101を使用するプ
ログラムはノードリスト302を通じてシーケンス順に
動作することのみを必要とする。実際、ノードリスト3
02は既にシーケンス順にしてあり、このような横断は
これがポインタ表現201を持つよりも速い。同様に、
プログラムがある与えられたリストエントリ304の所
であるときは、プレオーダ横断内の前の或は次のノード
を見つけるために必要となることの全ては、前の或は次
のリストエントリ304に移動することのみである。低
木301のより複雑なナビゲーションはツリー或は任意
のサブツリーの調節総和(adjusted sum)に関する2つ
の事実に基づく。この調節総和は子供の数、つまり、ツ
リー或はサブツリー内の各ノードの数価からそのツリー
或はサブツリー内のノードの数を引いた値である。この
2つの事実は以下のようである。 ・ツリー或はサブツリーの調節総和は常に−1であり;
そして ・リストエントリ302のシーケンスによって表わされ
るノードの調節総和をこれらノードを左から右に走査し
ながら累積した場合、調節総和は一つのサブツリーを全
部走査し終えたときにのみ負となり、この時点において
これは−1となる。
【0017】以下の例は第一の事実を解説する。全ての
葉ノード(leaf node )は0の数価を持ち、そして葉ノ
ードから構成されるサブツリー内のノードの数は1であ
り、このため調節総和は−1である。同様にして、ノー
ド107、109、及び111から構成されるサブツリ
ーはノード109及び111に対しては0の数価値、ノ
ード107に対しては2の数価値を持ち、このサブツリ
ー内には3つのノードが存在し、このため調節総和は−
1である。これは全ツリー101(4の総数価値、5の
ノード数)についても同様である。第二の事実はツリー
をナビゲートするために有効である。例えば、あるノー
ドからその隣りの孫(sibling )ノードに右方向に(例
えば、ツリー201内のノード105からノード107
に)移動するためのアルゴリズムはその孫と任意の子孫
(descendants )ノードがサブツリーを構成するという
原理に基づき、結果として、孫ノードに対するリストエ
ントリ304はその与えられたノードに対するリストエ
ントリ304に続くリストエントリによって表わされる
ノードの調節総和が−1に達したときに到達される。こ
のアルゴリズムに対するC言語コードは以下のようであ
る。
【数2】
【0018】count は調節総和を格納し;pは与えられ
たノードに対するリストエントリ304へのポインタで
あり;valence は勿論数価ファンクションである。これ
はリストエントリ304の値(この値は *pによって表
わされる)を取り、リストエントリ304によって表わ
されるノードの数価をリターンする。低木301に適用
された場合、このアルゴリズムは以下のように機能す
る。つまり、アルゴリズムの開始において、pは与えら
れたノード105を表わすリストエントリ304(1)
をポイントし、このdo count += valence (*p++ )−
1;ステートメントは最初にリストエントリ304
(1)によって表わされるノード、つまり、その数価が
0のノード105の数価を得る。この数価を得た後に、
こりはpを増分するが、pは結果として現在ノード10
7に対するエントリであるリストエントリ304(2)
をポイントする。数価値0から1が引かれ、そしてcoun
t がその結果、つまり−1にセットされる。count は≧
0でないため、このアルゴリズムは終端し、ノード10
5の右方向への次の孫ノード、つまり、107をポイン
トするpから去る。勿論、この与えられたノードに対す
るリストエントリとそれの次の右孫に対するリストエン
トリの間にサブツリーのノードに対するリストエントリ
304が存在する場合は、このアルゴリズムはこのサブ
ツリーを横断してこれが次の右孫に対するリストエント
リ304をポイントするまでpを増分することとなる。
【0019】ある与えられたノードの子供nの位置を知
るためのアルゴリズムは単に、その与えられたノードの
最も左の子供に対するエントリであるノードリスト30
2内の次のエントリに移動し、次に、次の孫に移動する
ためのアルゴリズムを要求される子供ノードに到達する
まで使用することから成る。Cコードは以下の通りであ
る。
【数3】
【0020】このifセンテンスはnの値が意味を持つか
チェックする。つまり、それが0よりも大きく現在のノ
ードに属する子供の数よりも大きくないことを確かめる
ためのチェックを行なう。次に、pがこれがノードリス
ト302内の次のリストエントリ304をポイントする
ように増分され;最後に、for ループが要求される孫に
対するリストエントリ304に移動するために次の孫に
移動するためのアルゴリズムを使用する。例えば、この
コードがノード103の第二の子供、つまり、ノード1
07の位置を見つけるために使用される場合は、これは
LE304(0)をポイントするpから開始し、pが増
分されると、これはLE304(1)をポイントし;fo
r ループが再び実行され、この終端において、上に説明
のようにpはLE304(2)をポイントする。
【0021】ある与えられたノードからその親(paren
t)ノードへの上方向への移動はこの与えられたノード
に対するリストエントリ304とこの与えられたノード
の親ノードに対するリストエントリ304との間のリス
トエントリ304の全てがこの与えられたノードの孫を
それらの根(root)ノードとして持つサブツリーに属す
るという事実を活用する。これらサブツリーの各々は−
1の調節総和を持ち、結果として、親ノードに対するリ
ストエントリ304はそのリストエントリ304によっ
て表わされるノードの数価から調節数価の総和を引いた
値が0或はそれ以上であるとき到達される。このアルゴ
リズムに対するCコードは以下の通りである。
【数4】
【0022】この与えられたノードが105の場合は、
このアルゴリズムは以下のように動作する。このアルゴ
リズムの開始において、pはリストエントリ304
(1)をポイントし;これはこれがノード103に対す
るリストエントリであるリストエントリ304(0)を
ポイントするように減分され;valence はノード102
に対する数価である2をリターンし、sum (総和)は1
に等しく、ここでこのアルゴリズムは終端し、ノード1
03に対するリストエントリ304(0)をポイントす
るpを去る。
【0023】ノードリスト302内のリストエントリ3
04のシーケンスはノードリスト302によって表わさ
れるツリーのプレオーダ横断に対応するが、低木301
を使用するツリーのポストオーダ横断(postorder trav
eral)を行なうことは困難ではない。これを行なうため
には、根から現在のノードまでの経路上のノードを表わ
すアイテムのスタック(stack )を維持する。個々のア
イテムはまだ訪問されてないアイテムによって表わされ
るノードの子供のカウント及びそれが表わすノードへの
ポインタを含む。葉を表わすリストエントリ304が訪
問されるたびに、スタックのトップの所のアイテムはそ
の葉の親を表わし、そしてこのアイテム内の子供のカウ
ントが1だけ減分され;カウントが0になると、スタッ
クのトップの所のポインタはその親のリストエントリ3
04をポイントする。このリストエントリ304が次に
訪問され、このスタックのトップの所のアイテムがポッ
プ開けられる。
【0024】ツリー101のポストオーダ横断はノード
を105、109、111、107、103の順番で訪
問する。低木101内において、これは次のように行な
われる。つまり、valence ファンクションはLE304
(0)によって表わされるノードが葉ノードではなく、
訪問されるべき2つの子供を持つことを示す。結果とし
て、この事実を示すアイテムがスタック上に押し上げら
れる。次に、LE304(1)が訪れられる。valence
はこれが葉ノードであることを示し、この葉ノードに訪
問して取られるべき動作が遂行され、このスタックのト
ップの所のアイテム内の訪問されるべき子供の数が1だ
け減分される。次のリストエントリは304(2)であ
り、valence はこれが2つの子供を持つ親であることを
示し、このためにもう一つのスタックアイテムがスタッ
ク上に押し上げられる。次には、リストエントリ304
(3)が来るが、これは葉ノードを表わし、このためこ
の葉ノードに訪問して取られるべき動作が遂行され、ス
タックのトップの所のこのアイテム内で訪問されるべき
子供の数が1だけ減分される。最後に、リストエントリ
304(3)に到達するが;これも葉ノードであり、こ
のために訪問動作が遂行され、訪問されるべき子供の数
は0となり、次に、アイテムがスタックから開けられ、
ノード107に訪問して取られるべき動作が遂行され、
そして現在スタックのトップの所にあるこのアイテム内
の子供の数が減分され、ここで訪問されるべき子供の数
が0となる。つぎに、スタックからアイテムが開けら
れ、ノード103に訪問して取られるべき動作が遂行さ
れ、このツリーのポスト横断が終了する。
【0025】結論 前述の詳細な説明は当業者に対してポインタを持たず、
従来の技法による表現よりもメモリの空間がはるかに少
なくてすむツリーの表現をいかにして作成するか、ツリ
ーのシーケンス順の表現をいかにナビゲートするか、ま
たツリーを表現及びナビゲートするための前述の技法が
効率的にナビゲートでき、しかも非常にコンパクトなツ
リーの表現を提供するためにいかに結合されるかについ
て開示した。この詳細な説明はシーケンスの順番がツリ
ーのプレオーダ横断であるシーケンス表現を示したが、
ただし他のタイプの横断に従って並べられたシーケンス
表現を使用することも可能である。詳細な説明はさらに
C++言語を表わすために使用されるツリーを示した
が、ただしこのナビゲーションはこのようなツリーに制
限されるのではなく、全てのタイプのデータを表現する
ツリーに対して使用することができる。さらに、詳細な
説明はここで開示された原理がいかにして孫、子供、及
び親の位置を決定するために使用できるかについて示し
たが、ただしこれらは他のナビゲーション動作に対して
も使用できる。加えて、ここに説明されたサブツリー検
出方法はサブツリーの検出を要求する他の全ての動作に
対して使用できるものである。詳細な説明はまたここに
開示された表現をナビゲートするための詳細な方法を示
した。これらナビゲーション方法及び表現は本発明者に
現在知られている最良のものであるが、ここに開示され
る技法の他の実現も可能である。
【0026】上のような状況であるために、この詳細な
説明は全ての面で説明のために及び一例としてのもので
あり、制約を意図するものではないと見なされるべきで
あり、ここに開示される本発明の範囲はこの明細書の背
景の下に、及び同等物の教義に従って解釈される特許請
求の範囲によってのみ決定されるものである。
【図面の簡単な説明】
【図1】一例としてのツリーを示す図である。
【図2】この一例としてのツリーの従来の技術による表
現を示す図である。
【図3】本発明の技法を使用する一例としてのツリーの
表現を示す図である。図面及び詳細な説明において使用
される参照番号は3つ或はそれ以上の桁を持つ。二つの
小さい方の桁は図面内の番号であり、残りの桁は図面の
番号である。従って、参照番号“305”を持つ要素は
図3に最初に現われる。
【符号の説明】
101 ツリー 301 低木 302 ノードリスト 305 データ辞書

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 メモリシステム内にツリーデータ構造を
    格納するための装置であって、このツリー構造が一つ或
    は複数のノードから構成され、これらのそれぞれが複数
    のアイテムの一つを表わし、この装置が:前記アイテム
    の各々に対する一つのデータ辞書エントリ(307)を
    含み、またアイテムを表わすノードが持つ子供の数の決
    定を可能とするメモリシステム内のデータ辞書(30
    5);及び1つ或は複数のリストエントリ(304)を
    持つメモリシステム内のリスト(302)を持ち、この
    リストエントリがツリー構造の横断に従って並べられ、
    各リストエントリが複数のノードの一つを表わし、また
    そのノードによって表わされるアイテムに対するデータ
    辞書内のエントリの位置を見つけまたそのエントリによ
    って表わされるノードの数を派生するための両方に使用
    できる値を含むことを特徴とする装置。
  2. 【請求項2】 前記リストエントリがこれらリストエン
    トリのシーケンスに対応するシーケンスのメモリ位置
    (304(0..4))内に格納されることを特徴とす
    る請求項1の装置。
  3. 【請求項3】 各リストエントリがその値だけを含むこ
    とを特徴とする請求項2の装置。
  4. 【請求項4】 前記値が実質的にメモリシステム内のア
    ドレスを指定するポインタよりも少ないビットを持つこ
    とを特徴とする請求項1、2、或は3の装置。
  5. 【請求項5】 前記リストに関してツリーナビゲーショ
    ン動作を遂行するためのナビゲーション手段(p.8)
    がさらに含まれ、このナビゲーション手段がシーケンス
    のリストエントリ内のサブツリーを検出するための手段
    及びリストに関するツリーナビゲーション動作を遂行す
    るために検出されたサブツリーを採用するナビゲーショ
    ン手段を含むことを特徴とする請求項1、2、或は3に
    記載の装置。
  6. 【請求項6】 前記ナビゲーション手段(p.8、9、
    10)が与えられたノードの親の位置を見つけるため;
    与えられた親ノードの与えられた子供を見つけるため;
    及び与えられたノードの与えられた孫を見つけるために
    使用されることを特徴とする請求項5の方法。
  7. 【請求項7】 任意のサブツリーを検出するための手段
    がさらにあるリストエントリによって表わされるノード
    の子供の数を前記リストエントリ内に含まれる値から決
    定するための手段(313)を含み;そして任意のサブ
    ツリーを決定するための手段がサブツリーを検出するた
    めに前記エントリ内に含まれる値を決定するための手段
    によってリターンされる子供の数を使用することを特徴
    とする請求項5の装置。
  8. 【請求項8】 ツリーデータ構造を表わすリストに関す
    るツリーナビゲーション動作を遂行するための方法であ
    って、このリストがツリーデータ構造の各ノードに対す
    るリストエントリを含み、ツリーデータ構造の横断に従
    って並べられており、この方法が:シーケンスのリスト
    エントリ内の任意のサブツリーを検出するステップ;及
    びリストに関するツリーナビゲーション動作を遂行する
    ために検出されたサブツリーを使用するステップを含む
    ことを特徴とする方法。
  9. 【請求項9】 各リストエントリがそれからノードの子
    供の数が派生できる値を含み、そして前記任意のサブツ
    リーを検出するステップが前記子供の数を派生するため
    に前記値を採用するステップ及び前記サブツリーを検出
    するために前記子供の数を採用するステップを含むこと
    を特徴とする請求項8の方法。
  10. 【請求項10】 前記サブツリーを検出するために子供
    の数を使用するステップが:前記シーケンス内の最初の
    リストエントリであるか或は検出されたサブツリーに対
    するリストエントリに続く最初のリストエントリである
    開始リストエントリから開始して前記開始リストエント
    リに続く各リストエントリに対して以下のステップ、つ
    まり現在のリストエントリに対して開始リストエントリ
    からのリストエントリの数を決定するステップ;前記開
    始リストエントリ及び前記続くリストエントリから現在
    のリストエントリに至るまでのリストエントリによって
    表わされるノードの子供の数の総和を決定するステッ
    プ;及び前記子供の数の総和を開始リストエントリから
    のリストエントリの数から引くステップを含み、開始リ
    ストエントリから現在のリストエントリまでのリストエ
    ントリが前記引き算の結果が−1になったとき一つのサ
    ブツリーに対応することを特徴とする請求項9の方法。
JP5195029A 1992-08-07 1993-08-06 ナビゲート可能な形式でのツリーの格納 Pending JPH06266781A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US927087 1992-08-07
US07/927,087 US5530957A (en) 1992-08-07 1992-08-07 Storing trees in navigable form

Publications (1)

Publication Number Publication Date
JPH06266781A true JPH06266781A (ja) 1994-09-22

Family

ID=25454157

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5195029A Pending JPH06266781A (ja) 1992-08-07 1993-08-06 ナビゲート可能な形式でのツリーの格納

Country Status (5)

Country Link
US (1) US5530957A (ja)
EP (1) EP0586086B1 (ja)
JP (1) JPH06266781A (ja)
CA (1) CA2098135C (ja)
DE (1) DE69325420T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7574411B2 (en) 2003-04-30 2009-08-11 Nokia Corporation Low memory decision tree

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2964831B2 (ja) * 1993-03-31 1999-10-18 富士ゼロックス株式会社 構造データ処理装置
US5671416A (en) * 1995-02-24 1997-09-23 Elson; David Apparatus and a method for searching and modifying source code of a computer program
WO1996033470A1 (de) * 1995-04-18 1996-10-24 International Business Machines Corporation Abbildung eines graphen in einen speicher
US5749080A (en) * 1995-06-05 1998-05-05 Shigeru Matsumoto Data retrieval method and link-information adding method
DE69525531T2 (de) * 1995-09-04 2002-07-04 Hewlett Packard Co Dataverarbeitungssystem mit ringförmiger Warteschlange in einem Seitenspeicher
US5940833A (en) * 1996-07-12 1999-08-17 Microsoft Corporation Compressing sets of integers
US6175835B1 (en) 1996-07-26 2001-01-16 Ori Software Development, Ltd. Layered index with a basic unbalanced partitioned index that allows a balanced structure of blocks
US6208993B1 (en) 1996-07-26 2001-03-27 Ori Software Development Ltd. Method for organizing directories
IL118959A (en) * 1996-07-26 1999-07-14 Ori Software Dev Ltd Database apparatus
US6098067A (en) * 1997-05-02 2000-08-01 Kabushiki Kaisha Toshiba Remote computer management system
US6029170A (en) * 1997-11-25 2000-02-22 International Business Machines Corporation Hybrid tree array data structure and method
US6675173B1 (en) 1998-01-22 2004-01-06 Ori Software Development Ltd. Database apparatus
US6085188A (en) * 1998-03-30 2000-07-04 International Business Machines Corporation Method of hierarchical LDAP searching with relational tables
US6081624A (en) * 1998-06-01 2000-06-27 Autodesk, Inc. Spatial index compression through spatial subdivision encoding
US6751634B1 (en) * 1999-08-26 2004-06-15 Microsoft Corporation Method and system for detecting object inconsistency in a loosely consistent replicated directory service
US6665863B1 (en) * 2000-05-31 2003-12-16 Microsoft Corporation Data referencing within a database graph
FR2811101B1 (fr) * 2000-07-03 2002-09-20 Axicare Procede de traitement de donnees structurees utilisant un langage informatique oriente objet
US6567815B1 (en) * 2000-08-01 2003-05-20 International Business Machines Corporation Technique of clustering and compaction of binary trees
US6622137B1 (en) * 2000-08-14 2003-09-16 Formula Telecom Solutions Ltd. System and method for business decision implementation in a billing environment using decision operation trees
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
US6804677B2 (en) * 2001-02-26 2004-10-12 Ori Software Development Ltd. Encoding semi-structured data for efficient search and browsing
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
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
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
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
US7287033B2 (en) 2002-03-06 2007-10-23 Ori Software Development, Ltd. Efficient traversals over hierarchical data and indexing semistructured data
US7069272B2 (en) * 2002-10-09 2006-06-27 Blackrock Financial Management, Inc. System and method for implementing dynamic set operations on data stored in a sorted array
US7051279B2 (en) * 2003-07-08 2006-05-23 Intentional Software Corporation Method and system for providing multiple levels of help information for a computer program
US7712042B2 (en) * 2005-06-10 2010-05-04 International Business Machines Corporation Techniques for viewing mappings and nodes
US7831921B2 (en) * 2006-12-12 2010-11-09 Microsoft Corporation Navigation connection points
JP5956963B2 (ja) * 2013-08-29 2016-07-27 京セラドキュメントソリューションズ株式会社 画像形成装置及び表示プログラム
US9176760B2 (en) * 2013-09-24 2015-11-03 Qualcomm Incorporated Fast, combined forwards-backwards pass global optimization framework for dynamic compilers
WO2015167466A1 (en) * 2014-04-29 2015-11-05 Hewlett-Packard Development Company, L.P. Query plan post optimization analysis and reoptimization
US10423623B2 (en) * 2015-02-05 2019-09-24 Sap Se Hierarchy modeling and query
SG10201503755QA (en) * 2015-05-13 2016-12-29 Dataesp Private Ltd Searching large data space for statistically significant patterns

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4945475A (en) * 1986-10-30 1990-07-31 Apple Computer, Inc. Hierarchical file system to provide cataloging and retrieval of data
US4868743A (en) * 1986-11-25 1989-09-19 Hitachi, Ltd. Traversal method of processing tree structure information and apparatus using the same
GB8815978D0 (en) * 1988-07-05 1988-08-10 British Telecomm Method & apparatus for encoding decoding & transmitting data in compressed form
JPH02130647A (ja) * 1988-11-11 1990-05-18 Toshiba Corp 索引木構造の更新方式
GB8828796D0 (en) * 1988-12-09 1989-01-18 British Telecomm Data compression
US5276874A (en) * 1989-08-11 1994-01-04 Digital Equipment Corporation Method for creating a directory tree in main memory using an index file in secondary memory
US5202986A (en) * 1989-09-28 1993-04-13 Bull Hn Information Systems Inc. Prefix search tree partial key branching
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
US5295261A (en) * 1990-07-27 1994-03-15 Pacific Bell Corporation Hybrid database structure linking navigational fields having a hierarchial database structure to informational fields having a relational database structure
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
US5263160A (en) * 1991-01-31 1993-11-16 Digital Equipment Corporation Augmented doubly-linked list search and management method for a system having data stored in a list of data elements in memory
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7574411B2 (en) 2003-04-30 2009-08-11 Nokia Corporation Low memory decision tree

Also Published As

Publication number Publication date
DE69325420T2 (de) 1999-12-09
DE69325420D1 (de) 1999-07-29
EP0586086A1 (en) 1994-03-09
CA2098135C (en) 1998-08-25
EP0586086B1 (en) 1999-06-23
CA2098135A1 (en) 1994-02-08
US5530957A (en) 1996-06-25

Similar Documents

Publication Publication Date Title
JPH06266781A (ja) ナビゲート可能な形式でのツリーの格納
US9965545B2 (en) Document order management via relaxed node indexing
US5454101A (en) Data storage system with set lists which contain elements associated with parents for defining a logical hierarchy and general record pointers identifying specific data sets
US6654761B2 (en) Controlling which part of data defining a node-link structure is in memory
US6108698A (en) Node-link data defining a graph and a tree within the graph
US6223342B1 (en) Object-oriented sequencing using hierarachical configuration streams
US20120110437A1 (en) Style and layout caching of web content
US20060015482A1 (en) System and method for creating dynamic folder hierarchies
US8232995B2 (en) Local relative layout of node-link structures in space with negative curvature
JPH04229372A (ja) メモリ空間再使用管理方法及びシステム
US20160092566A1 (en) Clustering repetitive structure of asynchronous web application content
Higo et al. Generating simpler ast edit scripts by considering copy-and-paste
US9411792B2 (en) Document order management via binary tree projection
JPH0550774B2 (ja)
Deshpande et al. C & Data Structures
Shafiei Non-blocking Patricia tries with replace operations
Cornejo et al. Multi-adjoint concept lattices, preferences and Bousi Prolog
US20170277731A1 (en) Hiding nodes in a tree containing shared subtrees
Spiegel An Algorithm for Determining if a BST Node’s Value can be Changed in Place
Izadkhah Tree
Wise Referencing lists by an edge
Rathgeber SKilL graph visualization and manipulation
Fu Approximate pattern matching in directed graphs
Βλασταρίδης Study of confluent persistence for data structures in the pointer machine model
Delgrande A graph-theoretic language extension for an interactive computer graphics environment