(57)【要約】バイナリサーチツリーは、複製値の場合でも、項目のセットのための値を効率的に組織するために提供される。バイナイサーチツリーを生成するときに、値のセットにおける各項目の値が決定される。ある特定の値がユニークで、セットにおいて１回のみ見つかる場合、そのユニーク値は、バイナリサーチツリーにおいてノードとして使用される。値が複製であり、セットにおいて２回以上見つかる場合、その複製値は、バイナリサーチツリーにおいてフックとして使用される。フックエレメントは、複製値と等しい値を有する項目を識別するために使用されるリストブランチを有する。ノードツリーは、複製値と等しいベースノードを有するノードツリーと共に、フックの第２の枝から延長され得る。ベースノードは、複製値より小さい値を保持するための第１の枝および複製値より大きい値を保持するための第２の枝を有する。
2007531114.tif 000002
【特許請求の範囲】
【請求項１】
バイナリサーチツリー方法であって、
各項目が各値を有する項目のセットを提供するステップと、
値の該セットにおいてユニーク値を識別するステップと、
バイナリサーチツリーにおいて該ユニーク値をノードとして設定するステップであって、該ノードは、該ユニーク値より小さい値の１個を受け取る第１の枝、および該ユニーク値より大きい値の１個を受け取る第２の枝を有する、ステップと、
値の該セットにおいて複製値を識別するステップと、
該バイナリサーチツリーにおいて該複製値をエレメントとして設定するステップと、
該エレメントからリストブランチを延長するステップであって、該リストブランチは該複製値に等しい値を有する項目の少なくとも１個を識別する、ステップと
を包含する、方法。
【請求項２】
前記エレメントからサブツリーを延長するステップであって、ノードツリーは前記複製値に等しいベースノード値を有する、ステップをさらに包含する、請求項１に記載の方法。
【請求項３】
前記エレメントは、フックである、請求項１に記載の方法。
【請求項４】
アドレス情報を前記エレメントに関連させるステップをさらに包含する、請求項１に記載の方法。
【請求項５】
前記アドレス情報を無効するステップと、
無効アドレス情報を格納するステップと
をさらに包含する、請求項４に記載の方法。
【請求項６】
前記エレメントは、該エレメントに関連したデータ値にフラグビットを設定することによって識別される、請求項１に記載の方法。
【請求項７】
前記エレメントは、該エレメントを前記複製値に等しい絶対値を有するマイナス数として設定することによって識別される、請求項１に記載の方法。
【請求項８】
メモリを管理する方法であって、
使用可能なメモリブロックのセットを提供するステップであって、各メモリブロックはサイズを有する、ステップと、
メモリの割り当てを要求するステップと、
割り当て要求を最小限満す使用可能なメモリブロックの１個を探索するステップであって、該探索するプロセスは、
割り当て要求のサイズをバイナリサーチツリーにおけるエレメントと比較するステップと、
割り当て要求が該エレメントの値によって最小限満されることを決定するステップと、
該エレメントから延長するリストを使用するステップであって、該リストは該エレメントの値に等しい複製値を識別する、ステップと
該エレメントにリストされた複製値メモリブロックの数を１だけ減じるステップとをさらに包含する、該探索するステップと、
該エレメントの値に等しいサイズにおいて、該メモリブロックの１個を割り当てるステップと
を包含する、方法。
【請求項９】
各メモリブロックに対するアドレスデータを提供するステップと、
該エレメントに関連するメモリアドレスを検索するステップと、
該メモリアドレスがマイナス数であることを決定するステップと
をさらに包含する、請求項８に記載の方法。
【請求項１０】
前記エレメントはバイナリサーチツリーにおけるフックである、請求項８に記載の方法。
【請求項１１】
前記エレメントはマイナス数として識別され、該エレメントの値は絶対値を表す、請求項８に記載の方法。
【請求項１２】
メモリブロックのサイズをバイナリサーチツリーに配置するステップであって、該バイナリサーチツリーはノードおよびフックをさらに備える、ステップをさらに包含する、請求項８に記載の方法。
【請求項１３】
前記フックは、複製値をリストするための枝を有している、請求項１２に記載の方法。
【請求項１４】
前記フックは、サブツリーを受け取るための枝を有している、請求項１２に記載の方法。
【請求項１５】
バイナリサーチツリーを更新するプロセスであって、
バイナリサーチツリーにおいて値のセットを組織するステップであって、各ユニーク値はノードエレメントによって表される、ステップと、
値の該セットに追加される新値を受け取るステップと、
該新値が該ノードのうちの１個の値の複製であることを決定するステップと、
該複製値を有する該ノードのためのサブツリーを識別するステップと、
該複製値を有する該ノードを該複製値を示すフックに置き換えるステップと、
該フックからのサブツリーを延長するステップであって、該サブツリーは該複製値においてベース親ノードを有する、ステップと、
該フックからリストを延長するステップであって、該リストは該複製値の１個を識別する、ステップと、
を包含する、プロセス。
【請求項１６】
前記ノードをフックに置き換えるステップは、前記新値に関連したデータポイントの符号を変更するステップを包含する、請求項１５に記載のプロセス。
【請求項１７】
前記データポイントはメモリアドレスである、請求項１６に記載のプロセス。
【請求項１８】
前記ノードをフックに置き換えるステップは、前記複製値の符号を変更するステップを包含する、請求項１５に記載のプロセス。
【請求項１９】
値の前記セットに追加する第２の新値を受け取るステップと、
該第２の新値が前記フックの値の複製であることを決定するステップと、
別の複製値が値の該セットに追加されたことの指示を前記リストへ追加するステップと
をさらに包含する、請求項１５に記載のプロセス。
【請求項２０】
ハンドヘルドポータブル装置であって、
ＲＡＭメモリと、
入出力サブシステムと、
組み込み型プロセッサと、
メモリ管理プロセスを実行するバイナリサーチツリーエンジンと
を備え、
該バイナリサーチツリーエンジンは、
メモリの割り当て要求を受け取ることと、
該割り当て要求を最小限に満す使用可能なメモリブロックを探索することであって、該探索するプロセスは、
バイナリサーチツリーにおいて割り当て要求の該サイズと該エレメントを比較することと、
該割り当て要求がエレメントの値によって最小限に満すことを決定することと、
該エレメントから延長したリストを使用し、該リストは該エレメントの該値に等しい複製値識別することと、
該エレメントにリストされた複製値メモリブロック数を１だけ減じることとを含む、該探索することと、
エレメントの該値に等しいサイズでメモリブロックの１個割り当てることと
を含む、ハンドヘルドポータブル装置。
【請求項２１】
トランシーバーおよびアンテナをさらに備える、請求項２０に記載の装置。
【請求項２２】
バイナリサーチツリーにおける探索の方法であって、
バイナリサーチツリーにおいて新エレメントへ移行するステップであって、該エレメントが値を有する、ステップと、
該新エレメントに関連するデータフラグを検索するステップと、
データフラグが設定されているかどうかを決定するステップと、
該決定するステップに応答して、該新エレメントが、２個の枝を有する能力があるフックエレメントであるかどうかを識別するステップと、
値を前記値と比較するステップと
を包含する、方法。
【請求項２３】
該フックの１個の枝にある複製メンバーのリストを提供するステップと、
前記比較の実行に応答して、複製メンバーのリストから１つのメンバーを割り当てるステップと
をさらに包含する、請求項２２に記載の方法。
【請求項２４】
該フックの１個の枝にある複製メンバーのリストを提供するステップと、
該フックの別の枝にあるサブツリーを提供するステップと、
前記比較の実行に応答して、サブツリーのエレメントに移行するステップと、
をさらに包含する、請求項２２に記載の方法。
【請求項２５】
前記データフラグは、メモリアドレスである、請求項２２に記載の方法。
【請求項２６】
前記データフラグは、メモリアドレス用の符号ビットである、請求項２２に記載の方法。
【請求項２７】
前記データフラグは、前記値用の符号ビットである、請求項２２に記載の方法。
【請求項２８】
バイナリサーチツリーであって、
ノード値と２個の枝を有するノードエレメントであって、該ノード値より大きい値のみ有する第１の枝と、該ノード値より小さい値のみ有する第２の枝とを備えるノードエレメントと、
フック値と２個の枝を有するフックエレメントであって、該フック値に等しい値のみ有する第１の枝と、該フック値に等しくない値を有する第２の枝とを備えるフックエレメントと、
を備える、バイナリサーチツリー。
【請求項２９】
前記フックエレメントの前記第２の枝は、サブツリーを含む、請求項２８に記載のバイナリサーチツリー。
【請求項３０】
前記サブツリーは、前記フック値に等しいルート値を有する、請求項２９に記載のバイナリサーチツリー。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、自動化された分類と選択のプロセスである。より詳しくは、本発明はバイナリサーチツリー生成し、使用するプロセスに関する。
【背景技術】
【０００２】
バイナリサーチは、組織された配置における項目（ｉｔｅｍ）を位置付ける技術である。通常、配置における項目は、項目の値に従って、たとえば、シーケンシャルリストにより組織される。バイナリサーチでは、サーチ制約、即ちキーは、配置における項目の１個の値と比較される。より大きな値が要求された場合、サーチは、より大きな値を有する配置の部分において継続し得るし、より小さい値が希望された場合、サーチは、より小さい値を有する配置の部分において継続し得る。このように、各比較は、希望値が見つかるまで、潜在的（ｐｏｔｅｎｔｉａｌ）整合の数を減少する。
【０００３】
バイナリサーチツリーは、項目を組織するに特に有用な配置である。ツリーを生成する時に、各項目の値は、バイナリサーチツリー上で「ノード」となる。「ノード」は、ツリー上での決定点で、項目の１個の値でのセットである。ノードは、２個までの枝を有し得、１個の枝はノード値より小さい値を受け取り、もう１個の枝はノード値より大きい値を受け取る。枝に追加された最初の値は、その枝のノードとなる。値が追加されると、枝は、ノードと枝を追加することにより成長し、それによりサブツリーとなる。慣習により、１個か２個の枝を有するノードは「親」ノードと呼ばれ、各枝に追加された値は、「子」ノードと呼ばれ得る。枝を有しないノードは、リーフ（葉）と呼ばれ、ある特定のサブツリーの端末ノードを表す。
【０００４】
バイナリサーチツリーは、まずルート値を選択することにより配置される。ルート値は、期待値の範囲のできるだけ中央位が良い。ルート値は、ツリー上の最初のノードとなり、またサーチのための最初の比較値を表す。値がツリーに追加されると、ルート値より大きい値は、ルート値の１個の枝から延長したサブツリー上のノードとなり、ルート値より小さい値は、ルート値の第２の枝から延長したサブツリー上のノードとなる。同様に、各ノード（リーフノードを除く）は、１個の「より大きい」パスおよび１個の「より小さい」パスを表す決定点を可能にする。
【０００５】
一旦ツリーが配置されると、サーチルーチンは、各ノードにおける簡単な比較を行うことにより希望値を効率よく位置付ける。ツリーが典型的に配置されると、各比較は、残りの項目の約半分を考慮から除外する。サーチルーチンが希望値を位置付けた後、その値はもはや使用不能となり、ツリーから削除される。従って、ツリーは、ノードの削除を反映するため再配置される。同様に、ツリーは、新値が使用可能項目のセットに追加されると再配置される。
【０００６】
バイナリサーチツリーの有用性及び利点は、ツリーにおけるエレメント数が増加するに従い増加する。通常、バランスのとれたツリーでは、比較の通常の数は（「ｍ」）は、「ｎ」が配置されるエレメント数のとき、等式「ｌｏｇｂａｓｅ２（ｎ）」に比例する。この関係は次の等式によって、さらに特に述べることができる。「ｋ」が比例定数のとき、
ｍ＝ｋ＊ｌｏｇｂａｓｅ＿２（ｎ）
「ｋ」は定数なので、その値は、ノード数が増加した時に、サーチ時間の比例増に影響しない。従って、説明と単純化の目的のため、その値「ｋ」は「１」と仮定することができる。ある特定のエレメントを位置付ける効率性は、エレメントの合計数に従い対数的に増加する。例として、２５６（ｌｏｇ２＝８）を有するバランスのとれたサーチツリーを取り上げる。典型的なサーチは、約８個の比較を含み、各比較はツリーの高さの１個のレベルを表す。エレメント数が１０２４（ｌｏｇ＝１０）に増加した場合、比較数が約１０に増加するに過ぎない。示されるように、比較数およびエレメントの対数は、エレメントが２５６から１０２４に因数４だけ増加した場合、２だけ増加するに過ぎない。サーチ時間は比較数に直接関係しているので、サーチ時間は「ｌｏｇｎ」にも比例する。上記の例証において、「ｎ」は、単純化のため整数ｌｏｇ２値を有するよう選択され、別の場合「ｎ」が提供され得る。
【０００７】
バイナリサーチツリーは、各値がユニークであれば、値を効率的に配置することができる。しかし、既知のバイナリツリーは、複製値（ｄｕｐｌｉｃａｔｅ  ｖａｌｕｅ）を説明するのに全く非効率である。ツリーの各ノードは、「より大きい」または「より小さい」比較を収容するためにのみ構成されるので、複製値を説明するために、より複雑なプロセスが使用される。たとえば、既知のバイナリサーチツリーは、複製値のサーチツリーとは別のサーチルーチンを指示するポインターを提供し得る。
【０００８】
多くの普通のアプリケーションは、規定通り複製値を生成し、このためバイナリサーチツリー配置の使用で、通常得にはならない。バイナリサーチツリーが使用された場合、ツリー配置は不要な経費または非効率を発生させる。たとえば、メモリマネージャーは通常、使用可能なメモリブロックを希望の最小サイズで位置付けするためにサーチルーチンを実行する。さらに特に、メモリサーチルーチンは、メモリ割り当て要求を収容する最小利用可能メモリを見つけるよう試みる。一例では、各メモリブロックは２５６バイト長として定義される。このように２ｋｂの使用可能ブロックは８ブロックの値を有し、２５ｋｂの使用可能ブロックは１００ブロックの値を有する。メモリマネジャーが１．９ｋｂの割り当て要求を受けた場合、メモリマネジャーは、できるだけ８の値を有するメモリブロックを、８が使用不可の場合、８より大きい最小数を有するメモリブロックを見つける。
【０００９】
しかし典型的な実行において、値８のいくつかのブロックが使用可能であることは可能性が高い。サーチ配置およびルーチンは、そのような重複に対して説明しなければならないし、バイナリサーチツリーが使用された場合、複製値を処理するために、追加のプロセッサおよびメモリリソースを提供する。メモリが解放され、使用可能なメモリプールに戻された場合、解放されたブロックのサイズがプールに既にあるサイズと重複することも可能性が高い。実際には、ある特定のサイズのいくつかのブロックや複製値を有するいくつかのサイズがある。このように、バイナリサーチツリーを更新するために使用されるプロセスも複製値を説明しなければならない。そのような実在の重複のため、バイナリサーチツリーは、メモリマネージャーアプリケーションに使用された場合、通常、不要なレベルの経費と非効率を追加する。
【発明の開示】
【課題を解決するための手段】
【００１０】
（要約）
要約すると、本発明は、複製値の場合でも項目用のセットの値を効率的に組織するためのバイナリサーチツリーを提供する。バイナリサーチツリーを生成するときに、値のセットにおける各項目の値が決定される。ある特定の値がユニークでセットにおいて１回だけ見つかる場合、そのユニーク値は、バイナリサーチツリーでノードとして使用される。値が複製であり（ｄｕｐｌｉｃａｔｉｖｅ）、セットにおいて２回以上見つかる場合、その複製値は、バイナアリサーチツリーにおいてフックとして使用される。フックエレメントは、複製値と等しい値を有する項目を識別するために使用されるリストブランチを有する。ノードツリーは、複製値と等しいベースノードを有するノードツリーと共に、フックの第２の枝から延長され得る。ベースノードは、複製値より小さい値を保持するための第１の枝および複製値より大きい値を保持するための第２の枝を有する。
【００１１】
好ましい例では、改良バイナリサーチツリーは、使用可能なメモリブロックを組織し、選択するために使用される。メモリマネージャーは、各ブロックが各サイズおよび関係メモリアドレスを有する、使用可能なメモリブロックのセットを有する。ユニークサイズの各ブロックは、バイナリサーチツリーではノードとして配置され、より小さいサイズを保持するための第１の枝およびより大きいサイズを保持するための第２の枝を有する。サイズが複製である（ｄｕｐｌｉｃａｔｅｄ）場合は、そのサイズは、バイナリサーチツリーにおけるフック配置として使用される。一例では、フックは、そのサイズに関係したメモリアドレスをマイナス数の中に入れることにより示され、一方全てのノードは、プラスのメモリアドレスと関係する。フックは、サイズで複製値または範囲と等しい複数メモリブロックをリストする枝を有する。またフックは、複製値と等しいベースノードを有するノードツリーと共に、ノードツリーを有する第２の枝を有する。このように、フックのリストブランチは、複製値と値において等しいサイズを識別し、一方、ノードツリーは複製値と値において等しくないサイズを識別し得る。
【００１２】
好都合にも、この方法は、多くの複製値を有する項目のセットの場合でさえ、効率的な分類と選択を可能にする。そのような効率的なプロセスは、メモリや処理能力が制限される装置に特に有用である。プロセスは高効率なので、メモリは、最小のプロセッサ経費で都合よく割り当て得る。
【発明を実施するための最良の形態】
【００１３】
（詳細な説明）
ここで図１を参照すると、電子装置１０が示される。装置１０は、本発明に従う改良バイナリサーチツリープロセス（２進法検索樹形図工程）を動作する。改良バイナリサーチツリープロセスは、装置１０上で動作するように図示されているが、他の目的のために他の装置上で有利に使用される場合があることを理解されたい。改良バイナリサーチツリープロセスによって、装置１０は、項目の１セットが複製の数値を持つ場合でさえ項目の１セットを高効率のプロセスで、組織することが可能となる。改良バイナリサーチツリープロセスは、バイナリサーチツリーエンジン１９を使用して実行し得る。バイナリサーチツリーエンジン１９は個別のプロセッサ装置でも良い。またはメインプロセッサ１６上で動作するプロセスとして提供され得る。バイナリサーチツリーエンジン及びプロセッサ１６は、マイクロプロセッサ、プログラマブルロジックデバイス、ゲートアレイ、ディスクリートロジック、またはその他の周知のロジックデバイスとして実行可能である。メインプロセッサ１６は、アプリケーション１４の選択と実行を含む装置１０の主要機能動作および制御を提供する。またプロセッサ１６は、キーボード、ディスプレイ、スピーカー、その他のＩ／Ｏ装置などの入出力装置２８を制御する。またこのプロセッサはトランシーバー装置３０を有し得る。トランシーバー装置３０は、装置１０にワイヤレス通信機能を持たせることに有用である。このようにして装置１０は、モバイルワイヤレスフォンまたはワイヤレス機器として動作できる。装置１０は、動作にその他の装置２６を必要とすることが理解されよう。たとえば、装置１０は再充電可能なバッテリーシステムなどの電源を必要とする。
【００１４】
またプロセッサ１６は、ランダムアクセスメモリ２１と接続され通信を行う。メモリー２１は、アプリケーションの動作、システム機能動作、ファイルの保存、およびその他の装置機能の動作を可能にするためのメモリスペースを提供する。プロセッサ１６は、通常、メモリー２１を管理し割り当てるメモリーマネージャー１８を有する。メモリマネージャー１８はプロセサ１６から分離されるか、プロセッサ１６上で動作するアプリケーションとなることができる。一例をあげると、メモリマネージャー１８は、使用可能なメモリスペースを追跡し、組織するヒープマネージャーである。メモリマネージャー１８などのメモリマネージャーは、使用しているかまたは使用可能なメモリを追跡する場合、またアプリケーションやプロセスがもはやメモリスペースを必要としない場合、メモリスペースを再請求する場合に有用である。またメモリマネージャー１８は、メモリの選択されたブロックをあるアプリケーションに割り当て、メモリの保護されたエリアを提供し、より高度なメモリ機能を可能にする。たとえば使用可能なメモリが分割され過ぎた場合、メモリマネージャーはメモリスペースを再統合するために使用される。
【００１５】
メモリ管理は、メモリスペースが制限される装置において特に重要である。そのような装置では、一回に制限された数のアプリケーションしかメモリから動作できなく、アプリケーションとプロセッサは使用可能なメモリスペースを求めて競合する。メモリスペースが制限されているため、メモリマネジャーが使用可能なメモリを効率的に割り当て、使用することが重要である。たとえば、ある特定のアプリケーションは、プロセッサとメモリマネージャーが２５ＫＢのファイルを収納するに十分なメモリブロックを割り当てることを要求し得る。メモリマネージャーは２５ＫＢの要求を収納できる使用可能ないくつかのブロックを持ち得る。効率を最大にするために、メモリマネージャーは、メモリ要求を満す最小の使用可能なメモリブロックを捜し出そうとする。このようにメモリはより効率的に使用される。
【００１６】
バイナリサーチツリーエンジン１９は、メモリマネージャー１８によってサーチのために使用可能なメモリサイズを高効率配置に組織するために使用される。ツリーを生成し、更新するために、メモリマネージャー１８は使用可能なブロック２３の１セットに関する情報を提供する。この情報は、たとえば使用可能なメモリの各ブロックのサイズとスタートアドレスを含み得る。メモリブロックに関するその他の情報が提供され得ると理解されたい。バイナリサーチツリーエンジン１９は、組織されたバイナリサーチツリー２５を生成するために、改良バイナリサーチツリープロセスを使用可能なブロック２３のセットに適用する。その後メモリマネージャー１８は、ある特定メモリ割り当て要求を満す最小の使用可能メモリブロックを効率的に識別するために、バイナリサーチツリー２５を使用可能となる。割り当てとサーチプロセスは高効率な方法によって行われるため、プロセッサ１６は、望まない不要なメモリ管理費用を発生させることなく、メモリリソースを要求し割当てることができる。改良バイナリサーチツリーは、ヒープメモリマネージャー関して検討されるが、改良バイナリサーチツリーはその他のアプリケーションや環境において有用であり得ることは理解されたい。
【００１７】
ここで図２を参照すると、改良バイナリサーチツリープロセスが示される。改良プロセスは項目５１の１セットを有し、その各項目は関連値を有する。示されているように、項目５１のセットは未組織の方法で提供される。項目５１の初期セットは、５品目を有し、各項目は固有の値を有することが示されている。項目５１のセットにおける各項目は固有のものであるので、バイナリサーチツリー５５は、固有の値を持った各ノード（節点）と共に生成される。たとえばノード５６は、「Ａ」値に設定でき、ノード５９に達する支線６０およびノード５７に達する支線５８を有する。一般論としてバイナリサーチツリー５５の組織は、子ノード「Ｂ」は親ノード「Ａ」より小さい値を有し、子ノード「Ｃ」は親ノード「Ａ」より大きい値を有することを示す。ノード５９は、項目「Ｂ」を含み、ノード６１に達する支線６２およびノード６４に達する支線６３を有する。上記と同様な方法により、リーフノード「Ｄ」は、その親ノード「Ｂ」より小さい値を有し、リーフノード「Ｅ」はその親ノード「Ｂ」より大きい値を有する。いったんバイナリサーチツリー５５が生成されると、サーチユーティリティは、ある必要のため最適な値を効率的に捜し得る。このように、プロセス５０は、項目のセットのすべての項目が固有の値を持つ時にバイナリサーチツリー５５の生成を示す。
【００１８】
しかし、多くのアプリケーションは、複製または反復値を有する項目のセットを組織することを要求する。ある値は、特定の数字入力、英数字文字であり、または特定の範囲を表し得ると理解されたい。たとえば、組織する目的で、１００という値は９５という値また１１０という値と同等と考えられる。このようにサーチプロセスの粒状性（ｇｒａｎｕｌａｒｉｔｙ）は減少され得る。またある値は、他の情報たとえばアドレス位置またはフラグ設定と関係し得ると理解されたい。このその他の情報は、バイナリサーチツリーの構造内に保存されるか、または外部情報へのポインターまたはその他のインジケーターを提供し得る。
【００１９】
プロセス５２は、項目５１のセットに加算される複製値６６を示す。このように、項目のセットに２個の「Ｂ」項目があり、そのため品目のセットは固有の値をもはや有しない。新しい値６６が項目のセットに追加された場合、プロセス５２は、まずどの項目が複製値を有するか識別し、その後その複製値から延長したサブツリーを識別する。プロセス５２に示されるように、「Ｂ」項目は複製となっている。それでプロセス５２は、「Ｂ」値を含むバイナリーサーチツリー５５のノード５９を識別する。プロセス５２は、ノード５９から延長した全サブツリーを識別する。
【００２０】
その後、プロセス５４は、新セット値５３を配置するために、更新されたバイナリサーチツリー７０を生成する。更新されたバイナリサーチツリー７０は、複製値を表す「フック」６９を含む。「フック」という言葉はソフトウェア技術での意味を持ち得るが、ここでの「フック」はバイナリサーチツリーにおける比較構造を識別するために使用される。さらに特に、フックエレメント６９はノードエレメントと同様な構造を有しているが、特性は異なる。たとえばフックは２個の支線を有し得るが、一方の支線は複製値のリストを含む構造であり、他方の支線はサブツリーを含む構造となり得る。フックはノードと同じ全体構造を使用するので、フックは効率的に実行され得る。このようにフック６９は、バイナリサーチツリー用の新タイプのエレメントであり、等値または複製値の存在を示すのに使用される。
【００２１】
図２に示すように、フック６９は、複製値と関係するサブツリー６７の受け取り用の支線１個を有する。たとえばサブツリー６７は、その前のバイナリサーチツリー５５からのサブツリー６５である。もちろん、フックがリーフノードを置き換えた場合、サブツリーは追加されない。しかし、追加のツリー構造が必要になった場合、後に支線が生成される。フック６９も複製値の実例識別用の別の支線を有する。プロセス５４に示されるとおり、この支線は、一つの複製「Ｂ」値が使用可能または割り当て可能であることを示す。このように、この支線は、項目リスト５３からの各複製値をリストにする働きを行う。
【００２２】
フックを使用することにより、バイナリサーチツリーは複製値を効率的に収納し得る。フックエレメントの追加は、たとえばサーチプロセスへの比較またはレベルの追加によってサーチ時間が確実に増加となるが、サーチ時間への全体の影響は比較的少ない。以前検討したとおり、サーチ時間はツリーのエレメント数のｌｏｇ２に関係する。このようにツリーに一個のフックを追加することは、サーチ時間のｌｏｇ２（ｎ）からｌｏｇ２（ｎ＋１）への増加となる。多くのフックを有する大ツリーでもサーチ時間の増加は許容でき、いくつかのフックが多くの複製を有した場合、ある特定のフックにリストされた複製はサーチツリーと同レベルにあると考えられるので、サーチ時間への影響は更に小さくなる。「フック」は、バイナリサーチツリーの効率をメモリ管理などの多くの新しいアプリケーションに拡張し可能にする。
【００２３】
下記の表１は、複製値が改良バイナリサーチツリー上でどのように表示されるかを示す。１個のみの値の事例が存在する場合、その値はツリー上でノードとして表示される。もし２個の等値が存在する場合、一方はフックのリストブランチ上で表示され、他方はフックのサブツリーブランチ上に表示される。追加の複製はリストブランチに追加される。
【００２４】
【表１】
2007531114.tif 000003
記載されたように、ノードとフックは各々、項目を配置し選択するのに有用な値またはサイズに関する情報を保持する。ノードとフックの構造は似ており、その構造がノードとフックが項目に関する追加情報に関係するようにし得る。たとえば構造は、項目の位置またはその他の属性を識別し得る。この追加情報は、構造自体内に保持するか、または構造が外部情報を識別するポインターかフラグを提供し得る。一例をあげると、構造が値を保持し、その値が位置する場所を識別するデータも有する。そのようなバイナリサーチツリーを設置した場合、ノードは、位置データのフラグを「０」に設定することにより識別され、フックは、位置データのフラグを「１」に設定することにより識別される。このようにサーチルーチンは、エレメントがノードエレメントかフックエレメントかを識別するために、単純にフラグを識別する。ある特定の効率的な実行において、フラグは位置データの最も重要なビットであり、情報の符号を表す。位置データは、しばしばプラス情報であるので、マイナス数の存在は好都合にもその情報がフック構造を示すものとして識別する。
【００２５】
あるいは、フックは、たとえばフックの値をマイナス数に設定することにより、またはその値のビット表示において別のフラグを立てることにより識別し得る。このように、サーチルーチンは、フックとノードを簡単にかつ効率的に区別し得る。値がプラスかまたはフラグビットが設定されていない場合は、サーチルーチンは値をノードと識別し、「より大きい」および「より小さい」の比較を適用する。値がマイナスかまたはフラグビットが設定されている場合は、サーチルーチンは値をフックとして識別し、一つの支線に対し値のリストを捜し、第２の支線から延長したサブツリーを捜す。フックは、アプリケーションの特定の要求に従って、代替の方法によって識別され得ることを理解されたい。
【００２６】
ここで図３Ａを参照すると、改良バイナリーサーチツリーのより具体的な事例が示される。バイナリサーチツリー８０は数値のセットを組織することが示される。各値もまた、サーチプロセスにおいて有用な追加の情報またはデータと関係し得る。たとえば値は、値が見つかれ得る場所を識別する位置データに関係し得る。バイナリサーチツリー８０において複製値はないので、バイナリサーチツリー８０上で各値は、ノードとして固有に識別し得る。各ノードは、２個の支線、一方はノードより小さい値を受け取る枝、他方はノードより大きい値を受け取る枝、を支持する能力がある。たとえばノード８６は７５０の値を有する。右の支線はより大きな９００の値を有し、左の支線は６００のより小さいノード８７を有する。同様に、ノード８７は、７００の値を有するノード８９を有する右の支線および３５０の値を有するノード８８を有する左の支線を有する６００の値を有する。慣習に従い、親ノード８７は、子ノード８８および８９を含むサブツリー９０を備える。
【００２７】
図３Ａに示されるように、第２の値「６００」は値のセットに追加される。このようにバイナリサーチツリーは複製即ち第２の値６００を収納しなければならない。複製６００を収納するため、フック９１が、更新されたバイナリサーチツリー８２に追加される。慣習に従い、フックは楕円形で示され、ノードは長方形で示される。フック９１は、複製値の等値と共に追加される。フック９１は２個のブランチを有し、１個は使用可能な複製値のリスト９７を保持するのに使用される。バイナリサーチツリー８２では、一方の複製値６００はリーフノード９３として示される。フック９１のもう一方の支線は、親ノード９４から延長したサブツリー９２を受け取る。ノード９４もその複製値に設定される。このようにサブツリー９２はサブツリー９０と同様である。
【００２８】
一例をあげると、各ノードとフックは、値およびその値と場所を関係づける追加のデータポイントを有する。位置データポイントはメモリアドレスまたは他の位置インジケータであり得る。一般論として、そのような位置データは、プラス（非マイナス）情報として位置検索の目的のみに有用である。従って、位置データ用の符号（ｓｉｇｎ）ビットは、ノードエレメントをフックエレメントから識別するフラグとして使用され得る。更に、アドレス情報は一般的に固有の値を選択する際に必要なので、識別目的にアドレスを使用することは特に効率的である。図３Ｂは、サーチプロセスがバイナリサーチツリーのエレメントがフックかノードかを決定し得る方法についてのフローチャート１００を示す。フローチャート１００は、サーチプロセスがブロック１０５においてバイナリサーチツリー（ＢＳＴ）の新エレメントに移動することを示す。ブロック１０６に示すように、サーチプロセスは、新エレメントに関係するアドレスデータポイントを検索する。アドレスデータポイントはエレメントのデータ構造内に保持され得るか、またはアドレスが見つけ得る他の場所に向かい得る。新エレメントの本値も検索され得るか、またはプロセス中に後で検索され得る。
【００２９】
その後、プロセス１００は、位置データポイントがプラス数かマイナス数かを決定する。このように符号ビット（通常、最上位ビット）は、フックとノードの識別を支援するフラグとして使用される。さらに特に、アドレスがプラスの場合、ブロック１０８に示されるとおり新エレメントはノードとして識別され、アドレスがマイナスの場合、ブロック１０９に示されるとおり新エレメントはフックとして識別される。エレメントがノードの場合、一方の支線は本値より小さい値を保持するのに使用され（ブロック１１１）、他方の支線は本値より大きい値を保持するのに使用され得る（ブロック１１３）。以前の説明のとおり、ノードは、サーチツリーが設置される方法に従って、支線無し、支線１本、支線２本を持ち得る。新エレメントがフックの場合、一方の支線は本値に等しい値のリストを保持するのに使用され（ブロック１１５）、他方の支線はサブルート値としての本値を持つサブツリーを保持するのに使用され得る（ブロック１１７）。
【００３０】
再び図３Ａを参照すると、バイナリサーチツリー８２は、サブツリー９２が親ノード６００、ノード９５を有する左支線、ノード９６を有する右の支線を含むことを示す。使用において、サーチプロセスはフック９１に出会うと推定され、サーチプロセスが値「６００」を使用することを望んだ場合、複製値９３が割り当てプロセスによって使用のため割り当てられると推定される。しかし、サーチプロセスが「６００」値の使用を望まなかった場合、そのプロセスはサブツリー９２を継続する。このように、バイナリサーチツリー８２は、項目が複製値を持っている場合でも値項目の高効率的な配置を提供する。
【００３１】
バイナリーサーチツリー８４は、「６００」で項目のセットに追加されるさらに多くの値を示す。６００の値が追加されるごとに、その複製項目は、フック９１に関係するリスト９９に追加される。たとえば、リーフノード９８は、項目のセットに追加された次の複製６００を表す。６００の値が割り当てられまた使用されると、複製ノードはリスト９９から削除される。最後に、最後のリーフノードがリスト９９から削除されると、フック９１はノードツリー９２に置き換えられる。
【００３２】
複製「２０００」もサーチツリー８４に追加されている。従って、前のサーチツリー８２からの複製「２０００」は、「２０００」フック１０１に置き換えられている。「２００００」の一方の事例はフックのリストブランチ上にリーフノード１０２として現れ、他方の「２０００」は、フックのサブツリーブランチ上のノード１０３として現れる。追加の枝は、必要に応じ新値追加によってノード１０３から延長され得る。たとえば「２０２５」が追加された場合、ノード１０３からの枝として「２０２５」のノードが追加される。
【００３３】
ここで図４を参照すると、バイナリサーチツリープロセス１１０のフローチャートが示される。プロセス１１０において、ブロック１１２に示されるように値項目のセットが提供される。プロセスは、ブロック１１４に示されるように、項目のセットから項目の一つを選択し、項目の値を識別する。プロセスは、ブロック１１６に示されるとおり、選択された値がユニークか、バイナリサーチツリーに既に存在する値の複製かを決定する。値がバイナリサーチツリーにとってユニークである場合、ブロック１１９に示されるとおり、ノードが選択された値でサーチツリーに追加される。ブロック１２１に示されるとおり、ノードは、選択された値より大きい値を受け取る枝を持ち得る。またブロック１２３に示されるとおり、ノードは、選択された値より小さい値を受け取る枝を持ち得る。ブロック１１６において、選択された値がバイナリサーチツリーに既に存在することまたは項目のセットの値の複製であることが判明した場合、ブロック１２６に示されるとおり、フックが、選択された数値でバイナリサーチツリーに追加される。前述のとおり、フックはバイナリサーチツリー用の新型のエレメントで、複製値または反復値の存在を示す。一例をあげるとフックは、マイナスのアドレス数とフック値を関係させることによりノードと識別される。このように、サーチ演算はアドレス位置の符号をテストし、マイナスの場合はエレメントをフックとして識別し得る。一旦フックが一定の値で追加されると、複製値がそのフックのリストブランチに追加される。このように、ブロック１２８に示されるとおり、フックの一方の枝が複製値にて項目をリストにする。フックの他方の枝は、ブロック１３１に示されるとおり複製値と同じ値の親ノード付きのサブツリーを受け取るために使用される。プロセス１１０を使用して、複製または反復値が存在していても高効率なバイナリサーチツリーが生成され得る。
【００３４】
ここで図５を参照すると、バイナリサーチツリー１４０を生成するプロセスが示される。プロセス１４０は、さらに特に、使用可能なメモリブロックのセットを組織するためのバイナリサーチツリーに焦点をあてる。このように、ブロック１４１に示されるとおり、使用可能なメモリブロックのセットが備えてある。使用可能なメモリブロックのセットは、ブロックサイズ、スタートアドレス、ストップアドレスによって識別され得る。使用可能なメモリブロックを識別するために、その他の情報が含まれ得ることは理解されたい。またメモリブロックは、特定の数値よりはむしろ範囲を使用して識別され得ることも理解されたい。たとえば、１０００の使用可能なメモリサイズは、１０００の数値より大きいおよび小さいあるバイト数を含み得る。メモリブロック識別の粒度（ｇｒａｎｕｌａｒｉｔｙ）を減少させるため、メモリ使用の効率性をいくらか減じ得るが、メモリブロックの割り当てを単純化することは可能であり得る。当分野の技術が、粒度と効率のトレードオフを識別し、適合させ得ることは理解されたい。
【００３５】
その後プロセス１４０は、ブロック１４３に示されるとおり、使用可能メモリブロックのセットからメモリブロックの一つを選択し、そのサイズを識別する。ブロック１４５では、プロセスはメモリサイズがユニークかまたはバイナリサーチツリーの他の値の複製かを決定する。メモリブロックがユニークの場合、ブロック１５５に示されるとおり、ノードがバイナリサーチツリーに識別されたサイズで追加される。ブロック１５８に示されるとおり、枝が、ノ−ドサイズより大きいサイズを受け取るためにそのノードに追加され、ブロック１６０に示されるとおり、枝が、選択されたサイズより小さいメモリブロックためのノードに追加される。ブロック１６２に示されるとおり、バイナリサーチツリーのノードとしてメモリマネジャーは、ノードと関係するメモリブロックを割り当てることができる。
【００３６】
メモリサイズが、ブロック１４５で複製と決定された場合は、フックはその複製サイズ１４７で追加される。さらに特に、フックは、バイナリサーチツリーにおいてその複製値でノードを置き換えるために使用される。フックは特別な種類のエレメントで、等値、複製値、または反復値の存在を示すために使用される。このようにフックは割り当て可能な項目ではなく、情報提供および組織系統のフローを容易にするために使用される。一旦フックが一定の値で追加されると、複製値がそのフックのリストブランチに追加される。従って、ブロック１４９に示されるとおり、フックの一方の枝は、すべての複製値をリストするために使用される。フックの他方の枝は、複製値とは等しくない値を保持するために使用される。さらに特に、この枝は、複製値と等値のノードから延長したサブツリーを受け取る。フック自体は割り当てや使用が不可であるが、メモリマネージャーは、フックのリストブランチ上のメモリブロックのリストにおいて識別できる項目を割り当てることができる。
【００３７】
ここで図６を参照すると、バイナリサーチツリー１７０を生成するプロセスが示される。プロセス１７０において、ブロック１７１に示されるとおり、使用可能なメモリブロックのセットが提供される。メモリブロックは、バイナリサーチツリーにおいてブロック１７３に示されるサイズに従って組織される。ブロック１７５に示されるとおり、メモリマネージャーは、新らしい使用可能なメモリブロックを特定のサイズで提供する。メモリブロックのサイズは、メモリサーチツリーに既に設置されている項目と比較される。ブロック１７７に示されるとおり、新値は、バイナリサーチツリー上に既に存在しているフックと比較される。新サイズがフックとして既に表わされている場合は、ブロック１９１に示されるとおり、新サイズはリーフノードとしてそのフックのリストに追加される。従ってこのリストは、その特定のサイズで使用可能な複製エレメントを表す。新サイズが、現在あるフックとして存在しない場合は、新サイズはバイナリサーチツリーの現在あるノードと比較される。新サイズがユニーク、従って複製ではない場合は、ブロック１９３に示されるとおり、バイナリサーチツリーは、新サイズで新ノードと共に更新される。しかし新サイズがノードの複製の場合、ブロック１８２に示されるとおり、その複製値用のサブツリーがあれば、識別される。ブロック１８４に示されるとおり、フックは複製値で前のノードを置き換え、ブロック１８６に示されるとおり、その複製値用のサブツリーはフックの一方の枝に移動する。その後、複製値は、フックの他方の枝へ追加され、使用可能な複製項目のリストを保持するのに使用される。
【００３８】
ブロック１８４において、フックは、フックのデータにフラグを設定することによって識別され得る。たとえば、フックはメモリブロック用のサイズ値を有し、またそのメモリブロック用の関係したスターティングメモリアドレスも有する。プロセス１７０は、メモリアドレスをマイナス数として保存させ、それにより、後からのサーチプロセスに対しフックエレメントの存在を示す。
【００３９】
ここで図７を参照すると、メモリブロック２００を使用した方法が示される。ブロック２０１に示されるとおり、方法２００では、使用可能なメモリブロックのセットが提供される。ブロック２０３に示されるとおり、メモリブロックは、サイズに従ってバイナリサーチツリーの中に組織される。バイナリサーチツリーは、ノードとフックによって構築され、それにより複製または反復値を効率的に組織することができる。ブロック２０５では、メモリマネージャーは、選択されたサイズで使用可能なメモリブロックを要求する。一例をあげると、バイナリサーチツリーは、メモリマネージャーの要求に対応するため最小の使用可能なメモリブロックを見つけるために使用される。このように、メモリマネージャーは、必要とされるアプリケーション用の最小サイズのメモリブロックを割り当て得る。
【００４０】
最小サイズのメモリブロックを見つける時、サーチルーチンは、通常、バイナリサーチツリーの多くのノードおよびフックエレメントにおいて比較を行う。各エレメントでは、サーチルーチンはエレメントがノードかフックかを識別し、値比較を行い、より良い値を見つけるためにバイナリツリー内をトラバースし続け得る。ブロック２０６に示されるとおり、サーチルーチンのエレメントと関係するアドレスデータを検索し得る。プロセス２００はアドレスデータを使用するが、他のデータやフラグが使用され得ることを理解されたい。アドレスデータは、エレメントがフックかノードかを識別するために、サーチルーチンによって使用される。たとえば、アドレスがマイナス数の場合エレメントはフックであり、アドレスがプラス数の場合エレメントはノードである。このように、アドレスは、ノードとフックを区別するために使用され、また選択されたメモリブロックを割り当てる時にもメモリマネージャーを支援する。
【００４１】
ブロック２０８に示されるとおり、最小サイズがバイナリサーチツリーのノードに示される場合、ブロック２１７に示されるとおり、メモリマネージャーはその最小サイズを割り当てることができ、バイナリサーチツリーはそのサイズのノードを削除するために更新される。しかし、ブロック２０８に示されるとおり、最小サイズがフックに示される場合、リストのリーフノードの１個が削除され、メモリマネジャーに割り当てられる。ブロック２１０に示されるとおり、割り当てられたメモリブロックがフックリスト上の最終リーフノードである場合、ブロック２１２に示されるとおり、フックのもう一方の枝のサブツリーが識別される。ブロック２１５に示されるとおり、その後フックは削除され、ノードツリーに置き換えられる。このように、バイナリサーチツリーは、値が再びユニーク値となることを示す。
【００４２】
フックは代替の方法によって識別し得ることを理解されたい。一例をあげると、フックはその数字符号によって識別される。さらに特に、フック値はマイナス数として識別され、一方、ノード値はプラス数として識別され得る。このように、フックまたはノードの絶対値は項目の値を表し、符号はエレメントが、フックかノードかを表す。
【００４３】
本発明の特定の好ましい、また代替の実施形態が開示されたが、上記に記載された技術について、多くの多様な修正や拡張が、本発明の教示を使用して実施され得ることを理解されたい。そのような修正や拡張はすべて、添付の特許請求の範囲の真の精神と範囲内に入ると意図される。
【図面の簡単な説明】
【００４４】
【図１】図１は、本発明に従う、バイナリサーチツリーを使用したシステムのブロック図である。
【図２】図２は、本発明に従う、バイナリサーチツリーを生成するプロセスのブロック図である。
【図３Ａ】図３Ａは、本発明に従う、バイナリサーチツリーを使用して組織された値のブロック図である。
【図３Ｂ】図３Ｂは、本発明に従う、バイナリサーチツリーを使用したサーチルーチンのブロック図である。
【図４】図４は、本発明に従う、バイナリサーチツリーを生成するプロセスのフローチャ−トである。
【図５】図５は、本発明に従う、バイナリサーチツリーを生成するプロセスのフローチャ−トである。
【図６】図６は、本発明に従う、使用可能なメモリブロックのためのバイナリサーチツリーを生成するプロセスのフローチャ−トである。
【図７】図７は、本発明に従う、使用可能なメモリブロックを選択するためのバイナリサーチツリーを使用するプロセスのフローチャ−トである。
【図１】
2007531114.tif 000004
【図２】
2007531114.tif 000005
【図３Ａ】
2007531114.tif 000006
【図３Ｂ】
2007531114.tif 000007
【図４】
2007531114.tif 000008
【図５】
2007531114.tif 000009
【図６】
2007531114.tif 000010
【図７】
2007531114.tif 000011
【手続補正書】
【提出日】平成18年11月27日(2006.11.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリを管理する方法であって、
使用可能な複数のメモリブロックを提供することであって、各メモリブロックは、サイズを有している、ことと、
複数のエレメントと、値と、インジケータとから構成されるツリーを提供することであって、各エレメントは、０個から２個までの枝を有しており、該インジケータは、エレメントがさらにフックエレメントであるか否かを指示することが可能であり、各フックエレメントは、リンクされたリストへの第１の枝と、該フックエレメントと同じ値を有するエレメントへの第２の枝とを備えており、該リンクされたリストにおける各エレメントは、該フックエレメントの値と同じ値を有しており、該使用可能な複数のメモリブロックの各々は、関連するエレメントの値に等しい関連するメモリブロックのサイズを有する１つのエレメントに関連している、ことと、
要求のサイズから構成されるメモリの割り当てを要求することと、
該割り当ての要求を満たす使用可能なメモリブロックのうちの１個を探索することであって、該探索するプロセスは、
該要求のサイズを第１のエレメントの第１の値と比較することと、
該第１のエレメントがフックエレメントであることを該インジケータが指示するか否かと、該第１の値が該要求のサイズに等しいか否かとを決定することと、
該インジケータがフックエレメントを指示し、該第１の値と該要求のサイズとが等しい場合に、該フックエレメントの第１の枝にトラバースすることと、
該インジケータがフックエレメントを指示し、該第１の値と該要求のサイズとが等しくない場合に、該フックエレメントの第２の枝にトラバースすることと、
該インジケータがフックエレメントを指示せず、該要求のサイズが該第１の値よりも大きい場合に、該第１の値よりも大きな値のすべてを有するエレメントから構成される枝にトラバースすることと、
該インジケータがフックエレメントを指示せず、該要求のサイズが該第１の値よりも小さい場合に、該第１の値よりも小さな値のすべてを有するエレメントから構成される枝にトラバースすることと、
フックエレメントではなく、該要求の値と同じ値を有するエレメントが要求のエレメントに到達するまで、決定することとその後にトラバースすることとを継続し、その結果、
該要求のエレメントを該ツリーから除外することと、
該除外されたエレメントに関連するメモリブロックを、該メモリの要求に使用可能なようにすることと
をさらに包含する、ことと
を包含する、方法。
【請求項２】
各エレメントにアドレスを提供することと、
該アドレスとして負の数を提供することによって、エレメントがフックエレメントであることを指示することと
をさらに包含する、請求項１に記載の方法。
【請求項３】
前記関連するエレメントの値に等しいことは、該関連するエレメントの絶対値に等しいことをさらに包含し、前記インジケータは、該値が負である場合に、該エレメントがフックエレメントであることを指示する、請求項１に記載の方法。
【請求項４】
実行可能な命令に応答することにより、プロセッサによってアクセス可能なコンピュータメモリに存在するバイナリサーチツリーを更新する方法であって、
複数のノードと、値と、インジケータとから構成されるバイナリサーチツリーを提供することであって、各ノードは、２個までの枝を有しており、該インジケータは、ノードがさらにフックノードであるか否かを指示することが可能であり、フックノードは、リンクされたリストへの第１の枝と、該フックノードと同じ値を有するノードへの第２の枝とを備えており、該リンクされたリストにおける各ノードは、該フックノードの値と同じ値を有している、ことと、
該バイナリサーチツリーに追加されるべき新値を受信することと、
該新値が該複数のノードのうちの１個の値の複製であることを決定することと、
サブツリーを識別することであって、該サブツリーの最上位ノードは、該複製値を有するノードである、ことと、
結合ポイントを識別することであって、該結合ポイントは、該複製値の最上位に現在結合されている枝が存在する場合に、該複製値を有するノードの最上位に枝が結合されている場所である、ことと、
該サブツリーの該トップノードの上にフックノードを挿入することであって、該フックノードは該複製値を指示している、ことと、
該フックノードの該第２の枝から該サブツリーを延長することと、
該フックノードの該第１の枝からリンクされたリストを延長することであって、該リンクされたリストは、該複製値のうちの１個を識別する、ことと、
結合ポイントが存在する場合に、該フックノードの最上位に該結合ポイントを結合することと
を包含する、方法。
【請求項５】
前記ノードを前記フックノードに置き換えることは、値の符号を変更することを含む、請求項４に記載の方法。
【請求項６】
前記インジケータは、メモリアドレスである、請求項４に記載の方法。
【請求項７】
前記インジケータは、前記メモリアドレスが負である場合に、前記ノードがフックノードであることを指示する、請求項６に記載の方法。
【請求項８】
値のセットに追加されるべき第２の新値を受信することと、
該第２の新値が前記フックノードの値の複製であることを決定することと、
該フックノードから枝分れしているリンクされたリストに新ノードを追加することと
をさらに包含する、請求項４に記載の方法。
【請求項９】
ＲＡＭメモリと、
入出力サブシステムと、
プロセッサと、
メモリ管理プロセスを実行するバイナリサーチツリーエンジンと
を備えるハンドヘルドポータブル装置であって、該メモリ管理プロセスは、
要求のサイズから構成されるメモリの割り当て要求を受信することと、
該割り当て要求を満たす使用可能なメモリブロックを探索することと
をさらに包含し、該探索するプロセスは、
バイナリツリーをトラバースすることであって、該ツリーは、複数のエレメントと、値と、インジケータとから構成され、各エレメントは、０個から２個までの枝を有しており、該インジケータは、該エレメントがさらにフックエレメントであるか否かを指示することが可能であり、フックエレメントは、リンクされたリストへの第１の枝と、該フックエレメントと同じ値を有するエレメントへの第２の枝とを備えており、使用可能な複数のメモリブロックの各々は、関連するエレメントの値に等しい関連するメモリブロックのサイズを有する１つのエレメントに関連している、ことと、
該要求のサイズを第１のエレメントの第１の値と比較することと、
該第１のエレメントがフックエレメントであることを該インジケータが指示するか否かと、該第１の値が該要求のサイズに等しいか否かとを決定することと、
該インジケータがフックエレメントを指示し、該第１の値と該要求のサイズとが等しい場合に、該要求のサイズと同じ値を有するエレメントのリンクされたリストにトラバースすることと、
該インジケータがフックエレメントを指示し、該第１の値と該要求のサイズとが等しくない場合に、該要求のサイズと同じ値を有するエレメントにトラバースすることと、
該インジケータがフックエレメントを指示せず、該要求のサイズが該第１の値よりも大きい場合に、該第１の値よりも大きな値のすべてを有するエレメントから構成される枝にトラバースすることと、
該インジケータがフックエレメントを指示せず、該要求のサイズが該第１の値よりも小さい場合に、該第１の値よりも小さな値のすべてを有するエレメントから構成される枝にトラバースすることと、
フックエレメントではなく、該要求の値と同じ値を有するエレメントが要求のエレメントに到達するまで、決定することとその後にトラバースすることとを継続し、その結果、
該要求のエレメントを該ツリーから除外することと、
該除外されたエレメントに関連するメモリブロックを、該メモリの要求に使用可能なようにすることと
をさらに包含する、装置。
【請求項１０】
トランシーバーとアンテナとをさらに備える、請求項９に記載の装置。
【請求項１１】
バイナリサーチツリーにおける探索の方法であって、
バイナリツリーにおいて新エレメントに移動することであって、該エレメントは、値を有している、ことと、
該新エレメントに関連するデータフラグを検索することと、
該データフラグが設定されているか否かを決定することと、
該決定するステップに応答して、該新エレメントがフックエレメントであることを識別することであって、該フックエレメントは、リンクされたリストへの第１の枝と、該フックエレメントと同じ値を有するエレメントへの第２の枝との２本の枝を備えている、ことと、
該値との値の比較を実行することと
を包含する、方法。
【請求項１２】
前記第１の枝の上に複製メンバーのリストを提供することと、
前記比較の実行に応答して、該複製メンバーのリストから１個のメンバーを割り当てることと
をさらに包含する、請求項１１に記載の方法。
【請求項１３】
前記第１の枝の上に複製メンバーのリストを提供することと、
前記フックの第２の枝の上にサブツリーを提供することと、
前記比較の実行に応答して、該サブツリーの上のエレメントに移動することと
をさらに包含する、請求項１１に記載の方法。
【請求項１４】
前記データフラグは、メモリアドレスである、請求項１１に記載の方法。
【請求項１５】
前記データフラグは、メモリアドレス用の符号ビットである、請求項１１に記載の方法。
【請求項１６】
前記データフラグは、前記値用の符号ビットである、請求項１１に記載の方法。
【請求項１７】
プロセッサによって読取り可能なコンピュータメモリに存在し、該プロセッサによって実行される命令によって命令されるようにトラバースすることが可能なバイナリサーチツリーであって、
第１の値と２個の枝とを有するノードエレメントであって、
該第１の値よりも大きい値のみを有する第１の枝と、
該第１の値よりも小さい値のみを有する第２の枝と
を備える、ノードエレメントと、
第２の値と２個の枝とを有するフックエレメントであって、
リンクされたリストから構成され、該第２の値と等しい値のみを有する、第１の枝と、
該第２の値と等しい値を有するエレメントから構成される第２の枝と
を備える、フックエレメントと
を備える、バイナリサーチツリー。
【請求項１８】
前記フックエレメントの前記第２の枝は、サブツリーを含み、該サブツリーのルートは、前記第２の値に等しい値から構成されるエレメントである、請求項１７に記載のバイナリサーチツリー。
【国際調査報告】
2007531114.tif 000012
2007531114.tif 000013
2007531114.tif 000014