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
Links
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
-
- 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/904—Browsing; 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のみを含む。このナビゲーション技
法は与えられたリスト要素に対応するノードの孫に対す
るリスト要素の位置、と、親に対するリスト要素の位
置、及び親ノードの場合は、その親の任意の子供に対す
るリスト要素の位置を見つけるのを助け、更にサブツリ
ーに対するリスト要素を見つけることによって機能す
る。ある与えられたノードの子供の数はデータ辞書エン
トリのインデックスをその引き数として取る数価ファン
クションによって決定される。
のコンパクトな表現をナビゲートするための技法に関す
る。 【構成】 このコンパクトな表現はリストである。この
リストの各要素はツリーのノードを表わし、このリスト
はツリーのプレオーダ横断に従って編成される。各リス
ト要素はそのリスト要素に対応するノードによって表わ
されるタイプのアイテムに対するデータ辞書エントリの
インデックス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に根を持つ。
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を持つ。
ードの部分は値に関して遂行されるべき動作を示す演算
子(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の位置を見つけるこ
ととなる。
には横断(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内
にポインタに従うことによって簡単に遂行できる。
ンピュータシステム内においてはノードデータ構造の集
合として表わされる。ツリー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をコピーすることが
不可能であることである。
一は、多くのアプリケーション(例えば、C++などの
ような言語に対するプログラミング環境)によって要求
されるツリーは非常に大きい。大きなツリーはメモリシ
ステムに対して様々な困難を課す。単純なコンピュータ
システムにおいては、物理メモリシステムが大きなツリ
ーを収容するために十分に大きくないことがあり;仮想
メモリを持つコンピュータシステムにおいては、物理メ
モリと関連する問題は存在しないが、ただし、仮想アド
レス空間が小さすぎるという場合も考えられ;これが問
題とならないような場合でも、大きなツリーに関する動
作の遂行は結果として多くのページの失敗及び対応する
性能の劣化を生じる可能性がある。第二の問題は、これ
らノード内のポインタ206がその中でツリー表現20
1が生成されたメモリシステム内においてのみ意味を持
ち;従って、あるコンピュータシステムから別のコンピ
ュータシステムにツリー表現201をコピーすることが
不可能であることである。
【0007】従来の技術は両者の欠点に対処しようと試
みている。一つのアプローチはデータノード205のサ
イズを最小に低減しようとする試みである。一般的にい
って、ノードデータ205によって表わされるデータは
一つのプログラム内において何度も何度も出現する。例
えば、殆どのプログラムは:=及び*などのような演算
子を反復して使用し、またプログラムは一般的にa、
b、及びproduct などのような変数を反復して使用す
る。このため、従来の技術においてはノードデータの各
一意のアイテムに対してメモリ内のデータ辞書内に一つ
のエントリが作成され、ノードデータ205がそのデー
タ辞書内のノードデータのアイテムに対するエントリと
交換され、こうしてノードデータ構造203が必要な親
及び子供ポインタ及びノードデータ構造へのインデック
スへと縮小された。ただし、幾つかのアプリケーション
におけるツリーはあまりにも大きく成長し、このような
縮小されたノードデータ構造203でも多くのメモリを
取りすぎる。さらに、これら縮小されたデータ構造20
3はアドレス空間のサイズともに着実に成長し、従っ
て、これらの中で使用されるポインタが増加する。
みている。一つのアプローチはデータノード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)』にお
いても見られる。
タを要求するツリーの表現を展開する方法である。この
ような表現はノードデータ構造をシーケンス順に格納
し、幾つか或は全てのポインタと置換するためにノード
データ構造が格納されている順番を使用する。このよう
な表現(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 )”表現の有効性は従来の技法
がポインタレス表現内に前に記述されたタイプの一般的
ナビゲーション動作をいかに遂行するかを知られないと
いう事実のために大きく制約される。この理由によっ
て、従来の技法はこのような表現をツリーの長期的保存
のためにのみ使用し、ナビゲーションが要求されるたび
にこれらをポインタを使用する表現に再構成した。ツリ
ーの再構成は時間を要求し、勿論、再構成された表現は
上に言及された全てのサイズ問題を持つ。従って、ポイ
ンタレス表現はツリーの格納に対して要求されるディク
ス空間の量を低減し、ツリーを一つのコンピュータシス
テムから別のコンピュータシステムに移動できるように
するためにのみ有効である。本発明の一つの目的はこれ
ら短所を克服し、ナビゲート可能なツリーのポインタレ
ス表現及びこれらをナビゲートするための技法を提供す
ることにある。
ンタレス(pointerless )”表現の有効性は従来の技法
がポインタレス表現内に前に記述されたタイプの一般的
ナビゲーション動作をいかに遂行するかを知られないと
いう事実のために大きく制約される。この理由によっ
て、従来の技法はこのような表現をツリーの長期的保存
のためにのみ使用し、ナビゲーションが要求されるたび
にこれらをポインタを使用する表現に再構成した。ツリ
ーの再構成は時間を要求し、勿論、再構成された表現は
上に言及された全てのサイズ問題を持つ。従って、ポイ
ンタレス表現はツリーの格納に対して要求されるディク
ス空間の量を低減し、ツリーを一つのコンピュータシス
テムから別のコンピュータシステムに移動できるように
するためにのみ有効である。本発明の一つの目的はこれ
ら短所を克服し、ナビゲート可能なツリーのポインタレ
ス表現及びこれらをナビゲートするための技法を提供す
ることにある。
【0010】
【課題を解決するための手段】一面においては、本発明
はメモリシステム内にツリーデータ構造を格納するため
の装置に関する。ツリー構造は一つ或は複数のノードか
ら構成され、各ノードは複数のアイテムの一つを表わ
す。この装置は ・各アイテムに対して一つのデータ辞書エントリを含
み、一つのアイテムを表わすノードが持つ子供の数を決
定することを可能にするメモリシステム内のデータ辞
書;及び ・一つ或は複数のリストエントリを持つメモリシステム
内のリストを含むが、このリストはツリー構造の横断に
従って並べられ、各リストエントリは複数のノードの一
つを表わし、そのノードによって表わされるアイテムに
対するデータ辞書内のエントリの位置を見つけるため、
及びそのエントリによって表わされたノードの子供の数
を派生するための両方に使用できる一つの値を含む。も
う一面においては、本発明はツリーのシーケンス表現内
のサブツリーを検出するための方法に関する。シーケン
ス表現は各ノードに対して各ノードに対する数価値(va
lence value )がそれから派生できる要素(element )
を含む。数価値はその要素に対応するノードに属する子
供の数であり、これら要素のシーケンスはそのツリーの
ノードの横断(traversal )のシーケンスである。この
方法は以下のステップ、つまり、 −シーケンス内の要素の数を決定するステップ; −シーケンス内の要素に対する数価値を決定するステッ
プ;及び −要素の数から数価値の総和を引くステップを含むが、
この結果はこの引き算の結果が−1のとき一つのサブツ
リーに対応する。
はメモリシステム内にツリーデータ構造を格納するため
の装置に関する。ツリー構造は一つ或は複数のノードか
ら構成され、各ノードは複数のアイテムの一つを表わ
す。この装置は ・各アイテムに対して一つのデータ辞書エントリを含
み、一つのアイテムを表わすノードが持つ子供の数を決
定することを可能にするメモリシステム内のデータ辞
書;及び ・一つ或は複数のリストエントリを持つメモリシステム
内のリストを含むが、このリストはツリー構造の横断に
従って並べられ、各リストエントリは複数のノードの一
つを表わし、そのノードによって表わされるアイテムに
対するデータ辞書内のエントリの位置を見つけるため、
及びそのエントリによって表わされたノードの子供の数
を派生するための両方に使用できる一つの値を含む。も
う一面においては、本発明はツリーのシーケンス表現内
のサブツリーを検出するための方法に関する。シーケン
ス表現は各ノードに対して各ノードに対する数価値(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の
インデックスである。
い実施例についての以下の議論においては、最初にツリ
ー表現の一つの好ましい実施例について説明され、次に
ナビゲーション技法の好ましい実施例について説明され
る。ツリーの低木(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)に等しい。
テム情報311を含む。ノードアイテム情報311はプ
ログラム内のアイテムに関しての情報である。ノードア
イテム情報の内容は勿論のアイテムに依存する。これら
は常にアイテムのタイプ及び低木を使用するプログラム
が要求するそのアイテムに関する他の様々な情報を含
む。一つの好ましい実施例内のアイテムに対するデータ
辞書エントリ307の重要な特性はそのアイテムを表わ
すノードの数価(valence )がそのアイテムのデータ辞
書エントリ307から推測できるということである。あ
るノードの数価はそのノードが持つ子供の数であり、従
って、そのノードの親等(degree)に等しい。
【0014】この推測は好ましい実施例においてはこれ
がC++言語にて書かれたプログラムを表わす低木を採
用するために可能である。この言語においては、関数及
び演算子は様々な数のオペランドを持つことができる
が、ただし、ある与えられた関数の呼出し或は演算子の
使用は固定数のオペランドを持ち、従って、この呼出し
或は使用を表わすノードは固定数の子供を持つ。データ
辞書内には、この関数或は演算子に対してそれがそれと
共に使用される異なるオペランドと同数の異なるエント
リ307が存在し、その関数或は演算子に対するデータ
辞書エントリ307から数価を推測することが可能にな
る。換言すれば、一つのwhich (どれであるか)が存在
し、一つのリストエントリ304が与えられると、その
リストエントリによって表わされるノードに対する数価
をリターンする。この数価ファンクション(valence fu
nction)が図3の313の所に示される。このようなフ
ァンクションの実現は勿論様々にできる。数価を単にノ
ード情報311内に格納し、このファンクションをここ
から検索することも可能である。別の実現においては、
このファンクションはインデックス303を数価上にマ
ップするテーブルを使用することもできる。この好まし
い実施例はノードのプレオーダ横断に従って並べられた
リスト内の数価を採用するが、Knuth (クナス)の文献
は数価の使用がこのようなリストに制限されないことを
示す。
が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
である。
されるメモリは単にノードリスト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となる。
ダ横断は単純である。つまり、低木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言語コードは以下のようであ
る。
葉ノード(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を増分することとなる。
たノードに対するリストエントリ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コードは以下の通りであ
る。
るためのアルゴリズムは単に、その与えられたノードの
最も左の子供に対するエントリであるノードリスト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)をポイントする。
チェックする。つまり、それが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コードは以下の通りである。
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を去る。
このアルゴリズムは以下のように動作する。このアルゴ
リズムの開始において、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が次に
訪問され、このスタックのトップの所のアイテムがポッ
プ開けられる。
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に訪問して取られるべき動作が遂行さ
れ、このツリーのポスト横断が終了する。
を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++言語を表わすために使用されるツリーを示した
が、ただしこのナビゲーションはこのようなツリーに制
限されるのではなく、全てのタイプのデータを表現する
ツリーに対して使用することができる。さらに、詳細な
説明はここで開示された原理がいかにして孫、子供、及
び親の位置を決定するために使用できるかについて示し
たが、ただしこれらは他のナビゲーション動作に対して
も使用できる。加えて、ここに説明されたサブツリー検
出方法はサブツリーの検出を要求する他の全ての動作に
対して使用できるものである。詳細な説明はまたここに
開示された表現をナビゲートするための詳細な方法を示
した。これらナビゲーション方法及び表現は本発明者に
現在知られている最良のものであるが、ここに開示され
る技法の他の実現も可能である。
従来の技法による表現よりもメモリの空間がはるかに少
なくてすむツリーの表現をいかにして作成するか、ツリ
ーのシーケンス順の表現をいかにナビゲートするか、ま
たツリーを表現及びナビゲートするための前述の技法が
効率的にナビゲートでき、しかも非常にコンパクトなツ
リーの表現を提供するためにいかに結合されるかについ
て開示した。この詳細な説明はシーケンスの順番がツリ
ーのプレオーダ横断であるシーケンス表現を示したが、
ただし他のタイプの横断に従って並べられたシーケンス
表現を使用することも可能である。詳細な説明はさらに
C++言語を表わすために使用されるツリーを示した
が、ただしこのナビゲーションはこのようなツリーに制
限されるのではなく、全てのタイプのデータを表現する
ツリーに対して使用することができる。さらに、詳細な
説明はここで開示された原理がいかにして孫、子供、及
び親の位置を決定するために使用できるかについて示し
たが、ただしこれらは他のナビゲーション動作に対して
も使用できる。加えて、ここに説明されたサブツリー検
出方法はサブツリーの検出を要求する他の全ての動作に
対して使用できるものである。詳細な説明はまたここに
開示された表現をナビゲートするための詳細な方法を示
した。これらナビゲーション方法及び表現は本発明者に
現在知られている最良のものであるが、ここに開示され
る技法の他の実現も可能である。
【0026】上のような状況であるために、この詳細な
説明は全ての面で説明のために及び一例としてのもので
あり、制約を意図するものではないと見なされるべきで
あり、ここに開示される本発明の範囲はこの明細書の背
景の下に、及び同等物の教義に従って解釈される特許請
求の範囲によってのみ決定されるものである。
説明は全ての面で説明のために及び一例としてのもので
あり、制約を意図するものではないと見なされるべきで
あり、ここに開示される本発明の範囲はこの明細書の背
景の下に、及び同等物の教義に従って解釈される特許請
求の範囲によってのみ決定されるものである。
【図面の簡単な説明】
【図1】一例としてのツリーを示す図である。
【図2】この一例としてのツリーの従来の技術による表
現を示す図である。
現を示す図である。
【図3】本発明の技法を使用する一例としてのツリーの
表現を示す図である。図面及び詳細な説明において使用
される参照番号は3つ或はそれ以上の桁を持つ。二つの
小さい方の桁は図面内の番号であり、残りの桁は図面の
番号である。従って、参照番号“305”を持つ要素は
図3に最初に現われる。
表現を示す図である。図面及び詳細な説明において使用
される参照番号は3つ或はそれ以上の桁を持つ。二つの
小さい方の桁は図面内の番号であり、残りの桁は図面の
番号である。従って、参照番号“305”を持つ要素は
図3に最初に現われる。
101 ツリー 301 低木 302 ノードリスト 305 データ辞書
Claims (10)
- 【請求項1】 メモリシステム内にツリーデータ構造を
格納するための装置であって、このツリー構造が一つ或
は複数のノードから構成され、これらのそれぞれが複数
のアイテムの一つを表わし、この装置が:前記アイテム
の各々に対する一つのデータ辞書エントリ(307)を
含み、またアイテムを表わすノードが持つ子供の数の決
定を可能とするメモリシステム内のデータ辞書(30
5);及び1つ或は複数のリストエントリ(304)を
持つメモリシステム内のリスト(302)を持ち、この
リストエントリがツリー構造の横断に従って並べられ、
各リストエントリが複数のノードの一つを表わし、また
そのノードによって表わされるアイテムに対するデータ
辞書内のエントリの位置を見つけまたそのエントリによ
って表わされるノードの数を派生するための両方に使用
できる値を含むことを特徴とする装置。 - 【請求項2】 前記リストエントリがこれらリストエン
トリのシーケンスに対応するシーケンスのメモリ位置
(304(0..4))内に格納されることを特徴とす
る請求項1の装置。 - 【請求項3】 各リストエントリがその値だけを含むこ
とを特徴とする請求項2の装置。 - 【請求項4】 前記値が実質的にメモリシステム内のア
ドレスを指定するポインタよりも少ないビットを持つこ
とを特徴とする請求項1、2、或は3の装置。 - 【請求項5】 前記リストに関してツリーナビゲーショ
ン動作を遂行するためのナビゲーション手段(p.8)
がさらに含まれ、このナビゲーション手段がシーケンス
のリストエントリ内のサブツリーを検出するための手段
及びリストに関するツリーナビゲーション動作を遂行す
るために検出されたサブツリーを採用するナビゲーショ
ン手段を含むことを特徴とする請求項1、2、或は3に
記載の装置。 - 【請求項6】 前記ナビゲーション手段(p.8、9、
10)が与えられたノードの親の位置を見つけるため;
与えられた親ノードの与えられた子供を見つけるため;
及び与えられたノードの与えられた孫を見つけるために
使用されることを特徴とする請求項5の方法。 - 【請求項7】 任意のサブツリーを検出するための手段
がさらにあるリストエントリによって表わされるノード
の子供の数を前記リストエントリ内に含まれる値から決
定するための手段(313)を含み;そして任意のサブ
ツリーを決定するための手段がサブツリーを検出するた
めに前記エントリ内に含まれる値を決定するための手段
によってリターンされる子供の数を使用することを特徴
とする請求項5の装置。 - 【請求項8】 ツリーデータ構造を表わすリストに関す
るツリーナビゲーション動作を遂行するための方法であ
って、このリストがツリーデータ構造の各ノードに対す
るリストエントリを含み、ツリーデータ構造の横断に従
って並べられており、この方法が:シーケンスのリスト
エントリ内の任意のサブツリーを検出するステップ;及
びリストに関するツリーナビゲーション動作を遂行する
ために検出されたサブツリーを使用するステップを含む
ことを特徴とする方法。 - 【請求項9】 各リストエントリがそれからノードの子
供の数が派生できる値を含み、そして前記任意のサブツ
リーを検出するステップが前記子供の数を派生するため
に前記値を採用するステップ及び前記サブツリーを検出
するために前記子供の数を採用するステップを含むこと
を特徴とする請求項8の方法。 - 【請求項10】 前記サブツリーを検出するために子供
の数を使用するステップが:前記シーケンス内の最初の
リストエントリであるか或は検出されたサブツリーに対
するリストエントリに続く最初のリストエントリである
開始リストエントリから開始して前記開始リストエント
リに続く各リストエントリに対して以下のステップ、つ
まり現在のリストエントリに対して開始リストエントリ
からのリストエントリの数を決定するステップ;前記開
始リストエントリ及び前記続くリストエントリから現在
のリストエントリに至るまでのリストエントリによって
表わされるノードの子供の数の総和を決定するステッ
プ;及び前記子供の数の総和を開始リストエントリから
のリストエントリの数から引くステップを含み、開始リ
ストエントリから現在のリストエントリまでのリストエ
ントリが前記引き算の結果が−1になったとき一つのサ
ブツリーに対応することを特徴とする請求項9の方法。
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)
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)
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)
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 |
-
1992
- 1992-08-07 US US07/927,087 patent/US5530957A/en not_active Expired - Fee Related
-
1993
- 1993-06-10 CA CA002098135A patent/CA2098135C/en not_active Expired - Fee Related
- 1993-07-29 DE DE69325420T patent/DE69325420T2/de not_active Expired - Fee Related
- 1993-07-29 EP EP93305998A patent/EP0586086B1/en not_active Expired - Lifetime
- 1993-08-06 JP JP5195029A patent/JPH06266781A/ja active Pending
Cited By (1)
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 |