JP2004531789A - 効率的検索技術 - Google Patents
効率的検索技術 Download PDFInfo
- Publication number
- JP2004531789A JP2004531789A JP2002558102A JP2002558102A JP2004531789A JP 2004531789 A JP2004531789 A JP 2004531789A JP 2002558102 A JP2002558102 A JP 2002558102A JP 2002558102 A JP2002558102 A JP 2002558102A JP 2004531789 A JP2004531789 A JP 2004531789A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- elements
- character
- query element
- array
- 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.)
- Withdrawn
Links
Images
Abstract
本発明は、検索を実行するために必要とされたメモリリソースを最小化しつつ、効率的な態様で検索を実行するための技術を説明する。本発明の技術によると、クエリエレメントがエレメントのセットに含まれるかどうかを判定するために必要とされた比較数は、クエリエレメントの長さに比例し、エレメントのセットにおけるエレメントの数から独立する。本発明の方法は、エレメントのセットにおけるエレメントを識別する情報に基づいてデータ構造を構築するステップと、クエリエレメントを識別する情報を受け取るステップと、クエリエレメントがエレメントのセットに含まれるかどうかを判定するために必要とされた比較の数が該クエリエレメントの長さに比例し、該エレメントのセットのエレメントの数から独立しているように、クエリエレメントがエレメントのセットに含まれているかどうかを判定するためにデータ構造を使用するステップとを含む。
【選択図】図2
【選択図】図2
Description
【技術分野】
【0001】
(関連出願との相互参照)
本出願は、以下の出願からの優先権を主張し、この出願の全体は、本明細書において、全目的のために参考として援用される。
【0002】
(1)米国仮特許出願第60/263,320号、名称「TECHNIQUES TO FACILITATE EFFICIENT SEARCHING」、2001年1月17日出願。
【0003】
(2)米国非仮特許出願第10/006,179号、名称「EFFICIENT SEARCHING TECHNIQUES」(代理人事件整理番号20967−000110US)、2001年12月4日出願。
【背景技術】
【0004】
(発明の背景)
本発明は、検索技術に関し、より詳細には、検索を行うために要求されるメモリリソースを最小にして効率に行われる検索を可能にする技術に関する。
【0005】
検索は、重要な、かつ、広範囲に用いられる、コンピュータアプリケーションのオペレーションである。例えば、ファイルサーバ上のファイルリストは、そのリストが特定のファイル名を有するファイルを含むかを判定するために検索され得、均一なリソース識別子(URI)のリストは、ユーザ固有のURIがそのリスト中にあるかを判定するために検索され得、利用可能なリソースのリストは、リソースを位置づけるため、およびそのリソースに関連付けられたアクセス権を判定するために、アクセス制御アプリケーションによって検索され得、ファイルのコンテンツは、特定のキーワードがそのコンテンツ、およびくつかの他のアプリケーションに含まれるかを判定するように検索され得る。
【0006】
効率的な検索技術に対する強まる需要を理解する一分野は、電子商業活動の領域である。オンラインコマーシャルサービスを提供する商業者および他のエンティティは、適宜な方法で顧客の要求に応答することを可能にするために高速で効率的な技術を使用する必要がある。彼らの利益を最大にするために、オンライン商業者はまた、検索に関連するコストを最小にするために、検索を行うための最小量のメモリおよび演算リソースを必要とする検索技術を好んで使用する。例えば、オンライン商業活動に対する支払いを認可するオンラインバンキング施設およびクレジットカード会社は、検索に関連するコストを最小にしながら、適宜に顧客の要求を処理するために効率的な検索技術を使用する必要がある。したがって、検索を行うための最小限の金銭および演算リソースを使用しながら適宜に検索を行う検索技術に対する需要が増大している。
【0007】
検索することに対する異なるアプローチが多数ある。一つのアプローチによると、検索は、以下のようにモデリングされ得る。いくつかの領域Σからの「n」個のエレメント「k1,k2,・・・,kn」を含むSセット(すなわち、S=(k1,k2,・・・,kn))、および、領域Σからのターゲットエレメントまたはクエリエレメントk(すなわち、k∈Σ)が与えられる場合、検索は、ターゲットエレメントkがセットSに含まれるかどうか(すなわち、k∈Sであるかどうか)を判定するプロセスである。検索プロセスは、さらに、Σにおける標的エレメントの位置を判定するためにプロセスする工程を含み得る。領域Σは、任意の不定領域、例えば、整数のセット、実数のセット、文字列のセット等であり得る。セットSは、種々の形態でそれ自体を明らかにし得る。例えば、セットSは、ファイルシステムを形成するファイルの集合、URIのリスト、リソースのリスト等であり得る。セットSの各エレメントknは、領域Σの文字セットからの1以上の文字を含み得る。検索技術は、典型的には、k∈Sであるかを判定するために必要な時間および処理リソースを最小にしようとする。
【0008】
検索技術の効率を測定する一つの方法は、クエリエレメントkがセットSに含まれるかを判定するために検索技術によって必要とされる比較の数を判定することである。各比較は実施されるべき特定の時間単位を要求するので、検索技術は、クエリエレメントkがセットSに含まれるかを判定するための比較の数を低減することに努める。一般に、用語「比較」は、任意の2つの値を比較することに言及し得る。値は、1以上の文字、領域Σの1エレメントの1文字その他を含む領域Σのエレメントに対応し得る。したがって、領域Σのエレメントを領域Σの別のエレメントと比較する比較は、「エレメント比較」と呼ばれる。領域Σのエレメントの文字を別のエレメントの文字と比較する比較は、「文字比較」と呼ばれる。エレメント比較は、1以上の文字比較を含み得る。例えば、第一のエレメントが第二のエレメントと比較される場合、その比較は、第一のエレメントの個々の文字を第二のエレメントの文字と比較し得る。Σの各エレメントは、任意の長さであり得る(すなわち、可変数の文字を有する)ので、各比較は、比較を行うために「時間単位」より多くを要求し得る。
【0009】
いくつかの従来の検索技術が、検索の問題を解決するために開発されてきた。一つのやみくもな力による(brute−force)検索技術によると、クエリエレメントkは、セットSのすべてのエレメントと比較される。この技術は、検索を行うために「n」エレメント比較までを要求し得る。ここで、nは、セットSのエレメントの数である。したがって、nが非常に大きい場合(これは、きわめてよくある場合である)、このような検索技術のランタイム性能は、全く最適とはいえない。
【0010】
いくつかの他の従来の検索技術は、セットSがソートされた順序であることを要求する。例えば、バイナリ検索技術は、k∈Sが提供された場合に、Sのエレメントがソートされた順序にあることを判定するために用いられ得る。バイナリ検索技術は、検索を完了するためにΘ(logn)エレメント比較を要求する(ここで、nは、セットSのエレメントの数である)。しかしながら、このような検索技術の用途は、検索されるべきエレメントのセットがソートされた順序である必要がある条件のため極めて制限される。ソートされた順序内のデータセットを維持する際に含まれるコストが、検索の全体のコストに加わり、このような検索技術の使用は、多くの用途において実用的ではなくなる(特に、検索されるべきデータセットが大きく、データセットからのエレメントの頻繁な追加および削除がある場合の用途、例えば、電子商業環境での用途において)。結果として、このような検索技術の使用は、制限される。
【0011】
他の検索技術は、Σがほぼ制限されるか、または、セットSがΣ上に所定の分布を有する等の仮定に基づく。例えば、Σ={1,2,...,N}である場合、P.van Emde Boas,R.KassおよびE.Zijlstraによる「Design and Implementation of an Efficient Priority Queue,Mathematical Systems Theory 10,1997,pp.99−127」に開示された検索技術(「内挿検索(interpolation search)」と呼ぶ)は、Ο(n)の全メモリを用いるΟ(loglogN)時間において検索を行い得る。van Emdeらの技術は、各オペレーションがΟ(loglogN)時間を利用する辞書(すなわち、挿入、削除、およびオペレーションをサポートするデータ構造)を用いる。例えば、Σがせいぜい150の長さの全文字列の領域である場合(およびΣのための文字セットに50文字があることを仮定する)、検索を行うために要求される比較の数は、少なくとも(loglog50150=10)の比較となる。すなわち、検索時間は、少なくとも10の比較になる。セットSが(0,1)に均一に分布されると仮定される場合、van Emdeらの技術(さらに、「内挿検索技術」と呼ぶ)は、予期されたΟ(loglogn)時間において検索し得る。しかしながら、これら検索技術の不都合は、それらは任意の不定領域Σに適用されることができないことである。さらに、これらの技術は、検索を行うために実質的なメモリリソースを要求し、結果として、検索されるべきデータセットが大きいときには全くコスト効率的でない。
【0012】
辞書は、また、k∈Sであるかを判定するために一つのみの比較が要求されるように規定され得る。例えば、Σ={1,2,...,N}である場合(すなわち、|Σ|=N;領域Σは、N個のエレメントを含む)である。大きさΩ(N)のメモリを有する場合、辞書は、以下のようにインプリメントされ得る。Σのエレメントを、1,2,...,Nとしてラベルする。アレイA[1:N](すなわち、アレイ「A」は、Nエレメントを含む)は、A[b]が領域Σのエレメントbに対応するように構成され得る。最初に、全ての位置が0に初期化される。次いで、セットSのすべてのエレメントkiに対して、A[ki]が1<i<nに対して1に設定される(ここで、nは、セットSにおけるエレメントの数である)。次いで、k∈Sであるかの判定が、A[k]=1(これは、エレメントの存在を示す)であるかを判定することによって行われ得る。この種の辞書がΟ(1)時間での検索を達成し得る一方で、この技術のために要求されるメモリリソースは、特に、Nが大きい場合に非常に大きくなり得る。例えば、Σがせいぜい150の長さの全ての文字列の領域である場合、Nは、50の異なる文字があると仮定して50150になる。したがって、このような技術のランタイム性能は、非常に最適である一方で、この技術によって要求される莫大な量のメモリリソースは、それを、大抵の用途に対して非実用的にする。
【0013】
上記を考慮して、検索を行うために要求されるメモリリソースを最小にしながら効率的な方法で検索を行い得る検索技術に対する必要がある。
【発明の開示】
【課題を解決するための手段】
【0014】
(発明の簡単な要旨)
本発明は、検索を行うために要求されるメモリリソースを最小にしながら効率的な方法で検索を行うための技術を提供する。本発明の技術によると、クエリエレメントがエレメントのセットに含まれているかを判定するために必要とされる比較の数は、クエリエレメントの長さに比例する。
【0015】
本発明の実施形態によると、クエリエレメントがエレメントのセットに含まれるかを判定するための技術が提供される。この実施形態によると、データ構造は、エレメントのセットを識別する情報に基づいて構築される。クエリエレメントを識別する情報を受け取る本発明の実施形態は、クエリエレメントがエレメントのセットに含まれるかを判定するために、そのデータ構造を用い、その結果、クエリエレメントがエレメントのセットに含まれるかを判定するために必要とされる比較の数は、クエリエレメントの長さに比例し、エレメントのセットにおけるエレメントの数とは無関係である。
【0016】
他の特徴を共に有する前述の実施形態、および本発明の利点は、以下の明細書、請求の範囲、および添付図面を参照するとより明らかになる。
【0017】
(発明の詳細な説明)
本発明は、検索を行うために要求されるメモリリソースを最小にして効率的検索を行うための技術を提供する。本発明の技術に従う検索技術は、任意の領域Σ(すなわち、k∈Σ)からの検索クエリエレメントkがセットSに含まれるか(すなわち、k∈Sであるか)を判定する。このセットSは、領域Σからの「n」個のエレメント「k1,k2,...,kn」を含む(すなわち、S=(k1,k2,...,kn)。領域Σにおける各エレメント(およびセットSにおける続く各エレメント)は、領域Σの文字セットからの1以上の文字を含み得る。
【0018】
図1は、本発明の実施形態を組み入れ得るコンピュータシステム100の簡略化されたブロック図である。図1に示されるように、コンピュータシステム100は、少なくとも1つのプロセッサ102を含む。このプロセッサ102は、バスサブシステム104を介して多数の周辺デバイスと通信する。これらの周辺デバイスは、格納サブシステム106を含み得る。この格納サブシステム106は、メモリサブシステム108およびファイル格納サブシステム110、ユーザインタフェース入力デバイス112、ユーザインタフェース出力デバイス114、およびネットワークインタフェースサブシステム116を含む。入出力デバイスは、コンピュータシステム100とのユーザの相互作用を可能にする。ユーザは、人ユーザ、デバイス、プロセス、別のコンピュータその他であり得る。
【0019】
ネットワークインタフェースサブシステム116は、他のコンピュータシステムおよび通信ネットワークにインタフェースを提供する。ネットワークインタフェースサブシステム116の実施形態は、イーサネット(R)カード、モデム(電話、衛星、ケーブル、ISDN等)、(非同期)デジタル加入者ライン(DSL)ユニットその他を含む。コンピュータネットワークは、インターネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、イントラネット、プライベートネットワーク、パブリックネットワーク、スイッチングされるネットワーク、その他を含み得る。
【0020】
ユーザインタフェース入力デバイス112は、キーボード、マウス等のポインティングデバイス、トラックボール、タッチパッド、またはグラフィックタブレット、スキャナー、バーコードスキャナー、ディスプレイに組み込まれたタッチスクリーン、音声認識システム等のオーディオ入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含み得る。一般に、用語「入力デバイス」の使用は、コンピュータシステム100を用いて情報を入力するためのすべての可能なタイプのデバイスおよび方法を含めることが意図される。
【0021】
ユーザインタフェース出力デバイス114は、ディスプレイサブシステム、プリンタ、ファックスマシン、または、オーディオ出力デバイス等の非視覚ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)等のフラットパネルデバイス、または投影デバイスであり得る。ディスプレイサブシステムは、さらに、オーディオ出力デバイスを介する等で非視覚ディスプレイを提供し得る。一般に、用語「出力デバイス」の使用は、コンピュータシステム100からの情報を出力する全ての可能なタイプのデバイスおよび方法を含めることが意図される。
【0022】
格納サブシステム106は、コンピュータシステムおよび本発明の機能性を提供する基本プログラミングおよびデータ構築を格納するように構成され得る。例えば、本発明の実施形態によると、本発明の機能性をインプリメントするソフトウェアモジュールが、格納サブシステム106に格納され得る。これらのソフトウェアモジュールは、プロセッサ(単数または複数)102によって実行され得る。分散された環境では、ソフトウェアモジュールは、複数のコンピュータシステム上に格納され、複数のコンピュータシステムのプロセッサによって実行され得る。格納サブシステム106は、さらに、本発明の教示による情報を格納するために用いられ得る種々のデータベースおよびデータ構造を格納するための貯蔵所を提供し得る。格納サブシステム106は、メモリサブシステム108およびファイル格納サブシステム110を含み得る。
【0023】
メモリサブシステム108は、プログラム実行の間インストラクションおよびデータを格納するための主要なランダムアクセスメモリ(RAM)118および固定されたインストラクションが格納されているリードオンリーメモリ(ROM)120を含む多数のメモリを含み得る。ファイル格納サブシステム110は、プログラムおよびデータファイルのための持続性(不揮発性)の格納を提供し、ハードディスクドライブ、取り外し可能なメディアおよびフロッピー(R)ディスクドライブ、コンパクトデジタルリードオンリーメモリ(CD−ROM)ドライブ、光学ドライブ、取り外し可能なメディアカートリッジ、および他の同様な格納メディアを含み得る。1以上のドライブが他の接続されたコンピュータ上の遠隔位置に位置付けられ得る。
【0024】
バスサブシステム104は、コンピュータシステム100の種々のコンポーネントおよびサブシステム意図されるように互いに通信させる機構を提供する。コンピュータシステム100の種々のサブシステムおよびコンポーネントは、同一の物理的位置にある必要はなく、種々の位置に分散され得る。バスサブシステム104は、単一バスとして概略的に示されるが、バスサブシステムの代わりの実施形態は、複数のバスを利用し得る。
【0025】
コンピュータシステム100自体は、パーソナルコンピュータ、ポータブルコンピュータ、ワークステーション、コンピュータ端末、ネットワークコンピュータ、メインフレーム、キオスク、携帯情報端末(PDA)、セルフォン等の通信デバイス、エンターテイメントコンソール(PS2、X−box)、または、任意の他のデータ処理システムを含む種々のタイプであり得る。コンピュータの常に変換する性質に起因して、図1に示されるンピュータシステム100の説明は、本発明の好ましい実施形態を例示する目的のための特定の例としてのみ意図される。例えば、AMDからのAthlonTMクラスのマイクロプロセッサ、Intel CorporationからのPentium(R)TMクラスまたはCeleronTMクラスのマイクロプロセッサ、Motorola,Inc.,からのPowerPCTMG3またはG4マイクロプロセッサ等の他のタイプのプロセッサ、Transmeta,IncからのCrusoeTMプロセッサその他が企図される。さらに、他のタイプのオペレーションシステムが、MicrosoftからのWindows(R)オペレーションシステム(例えば、Win95、Win98、Windows(R)NTTM、Windows(R)XPTM等)、Sun MicrosystemsからのSolaris、Apple Computer CorporationからのLINUX、UNIX(R)、MAC OS X、BeOSTMその他を含む代わりの実施形態において企図される。図1に示されるコンピュータシステムより多いまたはより少ないコンポーネントを有するコンピュータシステムの多くの他の構成が可能である。
【0026】
本発明は、さらに、1以上のクライアントおよびサーバコンピュータを含む分散型ネットワーク環境において具体化され得る。このようなネットワーク環境では、本発明の教示に従って行われる処理および方法が、ネットワーク環境の1以上のコンピュータシステムの中で分散され得る。
【0027】
図2は、本発明の環境に従って検索を行う方法の高レベルに簡略化されたフローチャート200である。図2に示された方法は、コンピュータシステム100上で実行するソフトウェアモジュール、コンピュータシステム100に接続されたハードウェアモジュール、またはこれらの組み合わせによって行われ得る。図2に示されたフローチャート200は、本発明を組み入れる実施形態の例示に過ぎず、請求の範囲に列挙された本発明の範囲を制限しない。当業者は、変形、改変、および代替を認識する。
【0028】
図2に示されるように、本方法は、2つのフェーズを包含する。第一のフェーズの間、データ構造または他の同様なメモリ構造が、第2フェーズにおいて行われる検索オペレーションを促進するために生成される。第1フェーズの間に生成されたデータ構造は、検索されるべきデータセットに含まれるエレメントについての情報を封じ込める(すなわち、データ構造は、セットSに含まれるエレメントに基づいて構築される)。本発明の実施形態によると、第1フェーズの間、コンピュータシステム100は、セットSのエレメントを識別する情報を受け取り得る(ステップ202)。エレメント自体は、コンピュータシステム100のメモリサブシステムまたはコンピュータシステム100にアクセス可能ななんらかのメモリに格納され得る。次いで、ステップ202において受け取られた情報に基づいて、コンピュータシステム100は、第2フェーズにおいて行われる検索を容易にするためのデータ構造(または任意の他のメモリ格納構造)を構築し得る(ステップ204)。
【0029】
種々の異なる種類のデータ構造が検索オペレーションを容易にするために用いられ得る。これらは、テーブル、データベース、リンクされたリスト、ツリー、定方向グラフ、その他を含む。一実施形態では、データ構造は、コンピュータシステム100によって生成される一方で、本発明の代わりの実施形態では、セットSのエレメントに関する情報を封じ込めるデータ構造は、別のコンピュータシステムによって構築され、そして、コンピュータシステム100に提供され得る(例えば、データ構造は、別のシステムまたはデバイスによって生成され、コンピュータシステム100にアクセス可能なメモリに格納され得る)。コンピュータシステム100は、次いで、第2フェーズに従って検索を行うために格納されたデータ構造にアクセスし得る。
【0030】
セットSのエレメントに関する情報を格納するデータ構造が第1フェーズに従って構築された後、本発明は、次いで、本発明の教示に従って検索を行うためにデータ構造を用いる。本発明の実施形態によると、第2フェーズの間、コンピュータシステム100は、検索クエリエレメント「k」がセットSに含まれるかを判定するために検索要求を受け取り得る(ステップ206)。検索クエリは、コンピュータシステム100に接続された1以上の入力デバイスを用いてコンピュータシステム100のユーザによって特定され得る。あるいは、検索クエリは、コンピュータシステム上で実行するプロセスから、コンピュータシステム100に接続されたデバイスまたはシステム(例えば、ネットワークインタフェース106を介してコンピュータシステム100に接続されたシステム)から、および/または、他のシステムまたはプロセスから構成および受け取られ得る。
【0031】
ステップ204において生成されたデータ構造は、次いで、ステップ206において受け取られた検索要求で識別されたエレメントkがセットSに含まれるかを判定するために用いられる(ステップ208)。コンピュータシステム100は、次いで、エレメントkがセットSにおいて見出されたかどうかを示す信号を出力し得る(ステップ210)。あるいは、コンピュータシステム100は、ステップ208の結果に基づいて1以上の活動を行うように構成され得る。
【0032】
本発明によると、種々の異なるデータ構造が検索プロセスを容易にするために、(第1フェーズの間に)構築され得る。さらに、種々の異なる検索技術が、第1フェーズの間に構築されたデータ構造によって格納された情報に基づいて特定のクエリエレメントkがセットSに含まれるかを判定するために用いられ得る。以下のセクションは、検索を行うために要求されたメモリリソースを最小にして効率的に検索を行うために用いられ得る2つの検索技術を記載する。以下に記載される検索技術の双方において、クエリエレメントkがセットSに含まれるかを判定するために必要とされる比較の数は、クエリエレメントの長さに比例する(すなわち、クエリエレメントに含まれる文字の数に比例する)。
【0033】
(第1の検索技術)
この節は、クエリエレメントkがセットSに含まれるかどうかを判定するために用いられ得る第1の検索技術を説明する。図3は、本発明の実施形態に従う第1の検索技術を用いて検索演算を容易にするために、(図2のステップ204で)構築され得るツリーデータ構造300の一部を示している。図3で示されたデータ構造300は、本発明を組み込んだ実施形態を単に示しただけであり、特許請求の範囲に記載されたような本発明の範囲を制限しない。当業者は、改変、修正および代替物を認識する。
【0034】
図3に示すように、ツリーデータ構造300は、複数のノードまたはメモリ構造302、308、310等を含む。ツリー300の各ノードは、第1のメモリ位置304を含む複数のメモリ位置、および、メモリ位置のアレイ(アレイ[]と呼ぶ)を含む。本発明の実施形態に従って、メモリ位置は304は、セットSに関する情報を格納し得る。例えば、メモリ位置304は、セットSのエレメントに対するポインタまたは参照、セットSのエレメントに関連する情報に対するポインタまたは参照等を格納し得る。あるいは、メモリ位置304は、ヌル(またはゼロ)値を格納し得る。メモリ位置304がセットSのエレメントに関する情報を格納するまたは指し示すので、メモリ位置304は、以下において「エレメントポインタ」として参照される。
【0035】
アレイ306におけるメモリ位置は、データ構造300の他のノードに対するポインタまたは参照を格納し得、あるいは、ヌル(またはゼロ)値に設定され得る。第1の検索技術を組み込んだ実施形態に従って、アレイ306における各メモリは、任意の領域Σに関連する文字セットからの文字に対応する。例えば、領域Σに対する文字セットが「m」個の文字を含む場合、アレイ306は、(図3で示されたような)「m」個のメモリ位置を含む。各メモリ位置は、文字セットからの特定の文字に対応する。従って、図3で示されるように、ツリー300の各ノードは、「m」個のメモリ位置を含むアレイArray[1:m]を含む。ここで、Array[1]は、領域Σに対する文字セットにおける第1の文字に対応し、Array[2]は、領域Σに対する文字セットにおける第2の文字対応し、Array[3]は、領域Σに対する文字セットにおける第3の文字に対応する(以下同様)。概して、Array[i]は、領域Σの文字セットにおけるi番目の位置の文字(ときに、領域Σのi番目の文字として参照される)に対応する(1≦i≦m)。例えば、領域Σに対する文字セットが英語のアルファベット(例えば、a,b,c,・・・,z)で構成されている場合、m=26である。この実施形態において、Array[1]は、文字「a」に対応し、Array[2]は、文字「b」に対応し、Array[3]は、文字「c」に対応し、Array[26]は、文字「z」に対応する(以下同様)。
【0036】
図3に示された実施形態において、様々なノードがルートノード302を頭としたツリー構造の形態で組織されている。ツリー300は、いくつかのレベルを含み得、各レベルは、一つ以上のノード(唯一のノード(すなわち、ルートノード302)を含む「レベル0」を除く)を含む。概して、特定のノードに対する「レベル」は、ルートノード302で開始し、特定のノードに到達するために移動する必要のあるノードの数を示す。ルートノード(例えば、図3におけるノード302)は、レベル0にある。なぜなら、ルートノードに到達するために移動する必要のあるノードが無いからである。図3に示されるノード308は、レベル1にある。なぜなら、ルートノード302は、ノード308に到達するために移動する必要があるからである。同様に、ノード310はまた、レベル1にある。ノード308および310に結合されたノードは、レベル2にあると考えられる(以下同様)。
【0037】
第1の検索技術を適用する本発明の実施形態によると、特定のレベルLにおける各ノードは、少なくとも(L+1)の長さの文字を有するセットSのエレメントに関する情報を格納する。詳細には、図3で示された実施形態において、特定のレベルLにある各ノードは、少なくとも(L+1)の長さの文字を有するセットSのエレメントの(L+1)番目の位置の(または、エレメント(L+1)番目の文字と呼ばれる)文字に関する情報を格納する。この情報は、ノードのアレイ306に格納される。
【0038】
第1の検索技術を適用する本発明の実施形態によると、セットSが少なくとも(L+1)の長さの文字を有する少なくとも一つのエレメントを含み、エレメントがエレメントの(L+1)番目の位置におけるArray[i]に対応する文字(すなわち、領域Σの文字セットのi番目の文字)を有する場合、ツリー300のレベルLにおけるノードのアレイメモリ位置Array[i](1≦i≦m)は、非ヌル値に設定され、レベル(L+1)におけるツリー300の他のノードを指し示すポインタまたは参照を格納する。メモリ位置Array[i]が何らかのiに対して設定され、ポインタArray[i]がエレメントの(L+1)番目のArray[i]に対応する文字を有するセットSにおけるエレメントに対応する一つ以上のノードのサブツリーを指し示す。逆に、本発明の教示に従って、ツリー300のレベルLにおけるノードのアレイメモリ位置Array[i](1≦i≦m)は、セットSがエレメント(L+1)番目の位置におけるArray[i]に対応する文字を有する任意のエレメントを含まない場合、ヌル(または、ゼロ)に設定される。
【0039】
従って、セットS(このセットSに対してデータ構造300が構築される)が、少なくとも1つの文字長さを有する少なくとも1つのエレメントであって、エレメントの第1の位置におけるArray[i]に対応する文字を有する少なくとも一つのエレメントを含む場合、ツリー300におけるルートノード302(レベル0)のアレイメモリ位置Array[i](1≦i≦m)は、非ヌル値に設定され、ツリー300のレベル1にある別のノードを指し示すポインタまたは参照を格納する。例えば、図3に示されるように、ルートノード302のArray[2]は、レベル1でノード308に対するポインタを格納し、これにより、セットSは、少なくとも1つの文字長さを有する少なくとも1つのエレメントであって、エレメントの第1の位置のArray[2]に対応する文字を有する少なくとも1つのエレメントを含む(言い換えると、セットSは、領域Σの第2の文字で開始する少なくとも1つのエレメントを含む)。ルートノード302のArray[2]は、エレメントの第1の位置におけるArray[2]に対応する文字を有するセットSのエレメントに対応するノードを構成するノード308を頭としたサブツリー320を指し示す。
【0040】
同様に、図3で示されるように、ルートノード302のArray[m]は、レベル1のノード310に対するポインタを格納し、これにより、セットSが少なくとも1つの文字長さを有し、かつ、エレメントの第1の位置におけるArray[m]に対応する文字を有する少なくとも1つのエレメントを含む(または、言い換えると、セットSは、領域Σのm番目の文字で開始する少なくとも1つのエレメントを含む)ことを示す。ルートノード302のArray[m]は、エレメントの第1の位置にあるArray[m]に対応する文字を有するセットSにおけるエレメントに対応するノードを含むノード310を頭としたサブツリー330を指し示す。
【0041】
図3に示されるように、(レベル1の)ノード308のArray[l]は、レベル2のノード(図示せず)に対するポインタを格納し、これにより、セットSが少なくとも2つの文字長さを有する少なくとも1つのエレメントを含み、かつ、エレメントの第1の位置におけるArray[2]に対応する文字およびエレメントの第2の位置におけるArray[l]に対応する文字を有する(または、言い換えると、セットSは、エレメントの第1の位置における領域Σの第2の文字を有し、かつ、エレメントの第2の位置における領域Σの第1の文字を風する少なくとも1つのエレメントを含む。)ことを示す。ノード308のArray[l]は、エレメントの第1の位置におけるArray[2]に対応する文字、および、エレメントの第2の位置におけるArray[l]に対応する文字を有するセットSのエレメントに対応するノードを構成するサブツリー322を指し示す。
【0042】
図3に示すように、(レベル1である)ノード308のArray[m]は、レベル2であるノード(図示せず)に対するポインタを格納し、これにより、セットSは、少なくとも2つの文字長さを有し、エレメントの第1の位置におけるArray[2]に対応する文字を有し、そして、エレメントの第2の位置におけるArray[m]に対応する文字を有する少なくとも1つのエレメントを含む(または、言い換えると、セットSは、エレメントの第1の位置における領域Σの第2の文字、および、エレメントの第2に位置における領域Σのm番目の文字を有する少なくとも1つのエレメントを含む)ことを示す。ノード308のArray[m]は、エレメントの第1の位置におけるArray[2]に対応する文字、および、エレメントの第2の位置におけるArray[m]に対応する文字を有するセットSにおけるエレメントに対応するノードを構成するサブツリー324を指し示す。
【0043】
図3に示されるように、(レベル1である)ノード310のArray[2]は、レベル2であるノード(図示せず)に対するポインタを格納し、これにより、少なくとも2つの文字長さを有し、エレメントの第1の位置におけるArray[m]に対応する文字を有し、エレメントの第2の位置におけるArray[2]に対応する文字を有する少なくとも1つのエレメントを含む(または、言い換えると、セットSは、エレメントの第1の位置における領域Σのm番目の文字、および、エレメントの第2の位置における領域Σの2番目の文字を有する少なくとも1つのエレメントを含む)ことを示す。ノード310のArray[2]は、エレメントの第1の位置におけるArray[m]に対応する文字、および、エレメントの第2の位置におけるArray[2]に対応する文字を有するセットSのエレメントに対応するノードを構成するサブツリー332を指し示す。
【0044】
図3で示されるように、ルートノード302のArray[l]が(図3で「0」で示される)NULLに設定されるので、このことは、セットSがエレメントの第1の位置におけるArray[l]に対応する文字を有する任意のエレメントを含まない(または、言い換えると、セットSは、領域Σの1番目の文字で開始する任意のエレメントを含まない)ことを示す。同様に、ノード308のArray[2]は、NULLに設定され、これにより、セットSがエレメントの第1の位置におけるArray[2]に対応する文字、および、エレメントの第2の位置におけるArray[2]に対応する文字を有する任意のエレメントを含まないことを示す。同様に、ノード310のArray[l]は、NULLに設定され、これにより、セットSがエレメントの第1の位置におけるArray[m]に対応する文字と、エレメントの第2の位置におけるArray[l]に対応する文字との両方を有する任意のエレメントを含まないことを示す。
【0045】
データ構造300が構築される様態の結果として、本発明の実施形態に従って、データ構造300の最大レベル(Lmax)は、セットSにおける最大長さを有するエレメントの長さに等しい。上記のように、レベル「L」(ここで、1≦L≦Lmax)におけるツリー300のノードは、少なくともLの文字を有するセットSのエレメントに対応する。従って、ツリー300におけるレベルLのノードの存在は、セットSが少なくともLの文字を構成する少なくとも1つのエレメントを含むことを示す。さらに、レベルLにおけるノードのアレイメモリ位置Array[i]は、セットSがエレメントにおける(L+1)番目の位置における領域Σのi番目の文字を含む少なくとも1つのエレメントを含む場合、非NULLである。
【0046】
セットSが正確にLの文字を含み(すなわち、エレメントの長さがLである)、かつ、ルートノードから開始する特定のノードに到達するために移動する様々なノードのアレイポインタに対応する文字を含む少なくとも1つのエレメントを含み、文字が、移動したノードに1を加えたレベルで示される位置にある場合、レベルLの特定のノードのメモリ位置304(または、エレメントポインタ304)が設定される。このようなエレメントがセットSに存在しない場合、メモリ位置304は、(図3でゼロで示された)ヌル値に設定され得る。ノードのエレメントポインタ304は、エレメント自身を指し示し得る、あるいは、代わりに特定のエレメントに関するまたは関連する情報を指し示し得る。例えば、各エレメントがリソースに対応するアクセス制御アプリケーションにおいて、特定のエレメントに対応するエレメントポインタは、リソースにアクセスし得るユーザのリストを指し示し得る。第1の検索技術を用いる実施形態に従って、ルートノードのエレメントポインタは、常にヌル値に設定される。
【0047】
例えば、図3で示されるように、ノード308のエレメントポインタ304は、非ヌル値に設定され、セットSのエレメントに関するデータを指し示す。これは、セットSが(L+1)=0+1=1の丁度の文字長さを有するエレメントを含み、文字がArray[2]に対応する領域Σの文字(すなわち、領域Σの文字セットの2番目の文字)であることを示す。同様に、ノード310のエレメントポインタ304は、非ヌル値に設定され、セットSのエレメントに関連するデータを指し示し、これにより、セットSが1つの文字の丁度の長さを有し、文字がArray[m]に対応する領域Σの文字(すなわち、領域Σの文字セットのm番目の文字)であることを示す。
【0048】
図4は、領域Σに属するエレメントを含む特定のセットSのための第1の検索技術を適用する本発明の実施形態に従って構築されたツリーデータ構造400を示す。領域Σに対する文字セットは5つの文字(すなわち、「1」、「2」、「3」、「4」および「5」)から構成されると仮定される。さらに、セットSが以下の6つのエレメントS=(「1」、「123」、「13」、「134」、「21」、「25」)を含むことを想定する。これらの仮定に基づいて構築されたツリーデータ構造は、図4に示される。
【0049】
図4で示されるように、ツリー400の各ノードは、エレメントポインタおよびメモリ位置アレイArray[1:5]を含む。ツリー400は、セットSにおけるエレメント(エレメント「123」および「134」)の最大長さに対応するLmax=3である4つのレベル(レベル0、レベル1、レベル2、レベル3)を有する。例えば、エレメント「123」は、ツリー400のレベル3におけるノード416によって示される。ノード416のエレメントポインタは、エレメント「123」、または、エレメント「123」に関連する情報を指し示す。同様に、ノード404のエレメントポインタは、エレメント「1」を指し示し、ノード410のエレメントポインタは、エレメント「13」を指し示し、ノード418のエレメントポインタは、エレメント「134」を指し示し、ノード412のエレメントポインタは、エレメント「21」を指し示し、そして、ノード414のエレメントポインタは、エレメント「25」を指し示す。
【0050】
図5は、第1の検索技術を適用する本発明の実施形態に従う検索を容易にするデータ構造を構築する方法の高レベルに単純化されたフローチャート500である。図5で示される方法は、コンピュータシステム100、コンピュータシステム100に結合されたハードウェアモジュール、または、それらの組み合わせで実行するソフトウェアモジュールによって実施され得る。図5で示されるフローチャート500は、本発明を組み込んだ実施形態を単に示しており、請求項に記載された本発明の範囲を制限するものではない。当業者は、改変、修正および代替物を認識する。
【0051】
このプロセスは、構築されるべきデータ構造としてルートノードが存在するかしないかを判定することによって開始する(ステップ502)。ルートノードがまだ存在しない場合、新規のルートノードが生成され、かつ、初期化される(ステップ504)。ノード初期化プロセスの一部として、エレメントポインタおよびメモリ位置のアレイを含む全てのメモリ位置は、ヌル(または、ゼロ)値に初期化される。
【0052】
次いで、データ構造おける挿入されるべきセットSのエレメント(または、エレメントを識別する情報)がアクセスされる(ステップ506)。セットSの第1のエレメント(または、セットSの第1のエレメントを識別する情報)は、図5で示されたフローチャートの第1のパス中にアクセスされる。他のエレメント(または、セットSの他のエレメントを識別する情報)は、セットS中の全てのエレメントが処理されるまで次のパス中でアクセスされる。
【0053】
次いで、ポインタ変数「CurrPtr」は、(ポインタ変数がまだ存在しない場合)インスタント化され、ルートノードを指し示すまたは参照するように初期化される(ステップ508)。ポインタ変数CurrPtrは、データ構造を移動させるために用いられ得る。数字変数「i」は、1に初期化される(ステップ510)。この変数は、データ構造において挿入されるべきセットSの各エレメントの様々な文字を移動させるように用いられる。文字変数「c」は、ステップ506においてアクセスされるエレメントのi番目の位置における文字に初期化される(ステップ512)。数字変数「p」は、領域Σに対する文字セットにおける変数cによって格納される文字の位置に初期化される(ステップ514)。例えば、文字セットが英語のアルファベット(例えば、a、b、c、・・・、z)である場合、変数cが文字「a」を格納するなら変数pは1に設定され、変数cが文字「f」を格納するなら変数pは6に設定され、変数cが文字「z」を格納するなら変数pは26に設定される(以下同様)。
【0054】
次いで、CurrPtrによって指し示されたノードのメモリ位置Array[p]は、次いで、メモリ位置がヌル値を格納するかどうかを判定するためにチェックされる(ステップ516)。CurrPtrによって指し示されたノードのArray[p]がヌル値を格納しない(すなわち、データ構造のノードにポインタを格納する)場合、CurrPtrは、CurrPtrによって現在指し示されているノードのArray[p]によって指し示されたノードを指し示すまたは参照するように更新される(ステップ518)。次いで、以下のように、プロセスがステップ526に続く。
【0055】
次いで、CurrPtrによって指し示されたノードのArray[p]がヌル値を格納することをステップ516において判定される場合、新規のノードが生成され、かつ、初期化される(ステップ520)。ノード初期化プロセスの一部として、エレメントポインタおよびメモリ位置のアレイを含む全てのメモリ位置がヌル(またはゼロ)値に初期化される。CurrPtrによって指し示されたノードのメモリ位置Array[p]は、次いで、ステップ520において生成された新規のノードに対する参照またはポインタを格納するように更新される(ステップ522)。CurrPtrはまた、ステップ520で生成されたノードを指し示すまたは参照するように更新される(ステップ524)。次いで、処理は、ステップ526に続く。
【0056】
次いで、ステップ506においてアクセスされたエレメントの全ての文字が処理されるかどうかを判定するようにチェックが行われる(ステップ526)。言い換えると、ステップ506においてアクセスされたエレメントのエンドに到達したかどうかが判定される。エレメントのエンドに到達していない(すなわち、エレメントがまだ1つ以上の処理されていない文字を含む)場合、数字変数iの値は、1つだけ上がる(ステップ528)。次いで、処理は、ステップ512に続く。ここで、処理されているエレメントの次の文字がアクセスされる。エレメントのエンドに到達する(すなわち、エレメントの全ての文字が処理される)場合、CurrPtrによって指し示されたノードのエレメントポインタは、ステップ506でアクセスされたエレメントを指し示すように更新される(ステップ530)。あるいは、エレメントポインタは、ステップ506においてアクセスされたエレメントと関連する情報を指し得る。
【0057】
次いで、セットSにおける全てのエレメントが処理されているかどうかを判定するためにチェックが行われる(ステップ532)。セットSの全てのエレメントが処理されていない場合、処理は、ステップ506に続く。ここで、セットSの次の処理されていないエレメントがアクセスされる。しかし、セットSにおける全てのエレメントが処理されたことが判定された場合、図5で示されたプロセスは、終了する。
【0058】
図5で示されたフローチャートに従って構築されたデータ構造は、次いで、第1の検索技術に従う検索を容易にするために用いられ得る。このデータ構造は、格納サブシステムに格納され得る。この格納サブシステムから、データ構造が検索演算中にアクセスされ得る。本発明の教示によると、データ構造の構造は、エレメントが挿入される順序に独立しており、挿入されているエレメント、および、エレメントの文字の長さにのみ依存している。データ構造のレベルの数は、セットSにおける最長エレメントの長さに依存している。概して、データ構造のレベルの数は、Zの値に依存している(ここで、「Z」は、領域Σにおけるエレメントの最大の可能な長さ(結果として、セットSにおけるエレメントの最大の可能な長さ)である)。例えば、セットSが長さZのエレメントを含む場合、第1の検索技術に従って構築されたデータ構造は、Lmax=Zである全体で(Z+1)レベルを有する。データ構造は、任意のレベルにおいて格納された二重の情報が無いので、スペースに効率的である。
【0059】
データ構造の最大サイズが固定され、小さく、そして、セットSにおけるエレメントの数に独立している。図5に示されたフローチャートに従って生成されたデータ構造(例えば、図3および図4で示されたデータ構造)に対して、用いられたメモリは、ビットアレイ(Array[])ポインタに対してZm(m+1)であり、エレメントポインタに対して2Zmバイトである(ここで、「Z」は、領域Σにおけるエレメントの最大可能長さであり、「m」は、領域Σに対する文字セットにおける文字長さである)。例として、領域Σにおけるエレメントの最大長さが255である場合(例えば、領域Σがコンピュータベースのファイルシステムにおけるストリングに対応する場合)、そして、文字セットのサイズが91である場合(アルファベットの文字である場合)、データ構造に必要とされるメモリは、約300KBである。データ構造の効率的表示が与えられたために、検索要求の効率的処理に対して複数の位置(例えば、ウェブサーバ、プロキシサーバ等)でキャッシュされ得る。
【0060】
図6は、セットSが第1の検索技術を適用する本発明の実施形態に従う検索クエリエレメントkを含むかどうかを判定する方法の高レベルに単純化されたフローチャート600である。図6で示された方法は、コンピュータシステム100、コンピュータシステム100に結合されたハードウェアモジュール、または、それらの組み合わせ上で実行するソフトウェアモジュールによって実施され得る。図6で示されたフローチャート600は、本発明を組み込んだ実施形態を単に示すのみであり、特許請求の範囲に記載されたような本発明の範囲を制限しない。当業者は、改変、修正および代替物を認識する。
【0061】
図6で示されるように、セットSが検索クエリエレメントkを含むかどうかを判定するための検索要求をコンピュータシステム100が受け取るとき、処理が初期化され得る(ステップ602)。上記されたように、検索要求は、コンピュータシステム100に結合された1つ以上の入力デバイスを用いるコンピュータシステム100のユーザによって特定され得る。あるいは、検索クエリは、また、コンピュータシステム100上で実行するプロセスから、コンピュータシステム100に結合されたデバイスまたはシステム(例えば、ネットワークインタフェース106を介してコンピュータシステム100に結合されたシステム)から、および/または、他のシステムまたはプロセスから構成され得る、または、受け取られる。
【0062】
次いで、コンピュータシステム100は、処理用に用いられるべき変数を初期化する。次いで、ポインタ変数「CurrPtr」は、(ポインタ変数が存在しない場合)インスタント化され、(図5によって構築された)セットSのために構築されたデータ構造のルートノードを指し示すまたは参照して、検索用に用いられるように初期化される(ステップ604)。データ構造は、検索を実行するコンピュータシステム100にアクセス可能なメモリからアクセスされ得る。ポインタ変数CurrPtrは、データ構造を移動するために用いられる。数字カウンタ変数「i」は、次いで、1に初期化される(ステップ606)。この変数は、クエリエレメントkの様々な特徴を移動するために用いられる。文字変数「c」は、次いで、クエリエレメントkのi番目の位置における文字に初期化される(ステップ608)。フローチャートを最初に通過する間、変数cは、エレメントkの第1の文字に初期化される。数字変数「p」は、次いで、領域Σに対する文字セットにおける変数cによって格納された文字の位置に初期化される(ステップ610)。例えば、文字セットが英語のアルファベット(例えば、a、b、c、・・・、z)のセットである場合、変数cが文字「a」を格納すると変数pは1に設定され、変数cが文字「f」を格納すると変数pは6に設定され、変数cが文字「z」を格納すると変数pは26に設定される(以下同様)。
【0063】
CurrPtrによって指し示されたノードのメモリ位置Array[p]は、次いで、メモリ位置がヌル値を格納しているかどうかを判定するためにチェックされる(ステップ612)。CurrPtrによって指し示されたノードのArray[p]がヌル値を格納する場合、Array[p]は、セットSがエレメントkを含まないことを示す。次いで、セットSがクエリエレメントkを含まないことを示す検索要求のソースに、信号が出力され得る(ステップ614)。他の適切な行動は、また、ステップ614において実施され得る。
【0064】
CurrPtrによって指し示されるノードのArray[p]が非ヌル値を格納する(すなわち、データ構造における別のノードに対するポインタまたは参照を格納する)ことがステップ612において判定される場合、CurrPtrは、CurrPtrによって現在示されているノードのArray[p]によって示されているノードを指し示すまたは参照するように更新される(ステップ616)。次いで、本発明は、クエリエレメントkの全ての文字が処理されているかどうかをチェックする(ステップ618)。言い換えると、本発明は、クエリエレメントkのエンドに到達しているかどうかを判定する。クエリエレメントkのエンドに到達していない(すなわち、クエリエレメントkがまだ一つ以上の未処理の文字を含んでいる)場合、数字変数iの値は、1つ加えられる(ステップ620)。次いで、プロセスは、ステップ608に続く。ここで、クエリエレメントkの次の文字がアクセスされる。
【0065】
クエリエレメントkのエンドに到達したことがステップ618で判定される(すなわち、クエリエレメントkの全ての文字が処理された)場合、CurrPtrによって指し示されたノードのエレメントポインタは、エレメントポインタが非ヌル値を格納するかどうかを理解するためにチェックされる(ステップ622)。あるいは、CurrPtrによって指し示されたノードのエレメントポインタは、エレメントポインタがエレメントkを指し示す、または、エレメントkに関連する情報を指し示すかどうかを理解するためにチェックされる。エレメントポインタがヌル値を格納する場合、エレメントポインタは、セットSがエレメントkを含まず、処理がステップ614に続くことを示す。
【0066】
しかし、CurrPtrによって指し示されたノードのエレメントポインタが非ヌル値を格納する(エレメント自身、または、エレメントに関連する情報を指し示し得る)ことがステップ622において判定される場合、エレメントポインタは、セットSがクエリエレメントkを含むことを示す。次いで、信号は、セットSがクエリエレメントkを含むことを示す検索要求のソースに出力され得る(ステップ624)。エレメントポインタによって指し示された情報を用い得る他の適切なアクションがまた、ステップ624で実施され得る。
【0067】
上記されたように、図6で示された方法は、第1の検索技術を適用する本発明の実施形態に従うクエリエレメントを検索するように用いられ得る。例えば、図6で示された方法は、図4で示されたツリー400のクエリエレメント「234」を検索するように適用され得る。処理の開始して、エレメント「234」がセットS={「1」、「123」、「21」、「13」、「134」、「21」、「25」}にあるかどうかを判定するように検索を要求するステップ602において、クエリ要求が受け取られ得る。ステップ604を通して、CurrPtrは、ルートノード402に初期化される。変数iは、(ステップ606を通して)1に設定される。変数cは、クエリエレメント「234」の第1の文字である「2」に初期化される。変数pは、2(領域Σに対する文字セットにおける文字「2」の位置)に初期化される。次いで、本発明は、ノード402のArray[2]がNULLであるかどうかをチェックする。ノード402のArray[2]が(図4で示されるような)NULLではないので、CurrPtrは、ステップ616を通してノード406(すなわち、ノード402のArray[2]によって指し示されたノード)を指し示すように設定される。次いで、エレメント「234」のエンドに到達したかどうかを理解するために、(ステップ618を通して)チェックが行われる。エンドに到達していないので、変数iの値は、1を加えて2となり、処理はステップ608に続く。ここで、変数cは、クエリエレメント「234」の第2の文字である「3」に設定される。変数pは、3(領域Σに対する文字セットにおける文字「3」の位置)に初期化される。次いで、本発明は、ノード406のArray[3]がNULLであるかどうかをチェックする。(図4で示されるように)ノード402のArray[2]がNULLであるので、Array[2]は、ストリング「234」がセットSに含まれないことを示す。次いで、(ステップ614を通して)セットSがクエリエレメント「234」を含まないことを示す検索要求のソースに信号が出力され得る。上記されたように、(ビットアレイArray[]の値をチェックする)2つの文字のみの比較は、エレメント「234」がセットSに含まれるかどうかを判定するために必要とされる。
【0068】
別の実施例として、検索クエリエレメントは、ステップ602において、検索クエリで受信され得る「12」であると考える。ステップ604により、CurrPtrがルートノード402に初期化される。変数iは1に設定される(ステップ606により)。変数cは、クエリエレメント「12」の第1文字である「1」に初期化される。変数pは1に初期化される(領域Σに対する文字セットにおける文字「1」の位置)。次いで、本発明は、ノード402のArray[1]がNULLであるか否かをチェックする。(図4に示されるように)ノード402のArray[1]がNULLでないので、ステップ616により、CurrPtrがノード404(すなわちノード402のArray[1]によって指し示されるノード)を指し示すように設定される。(ステップ618により)次いでエレメント「12」の終わりが達されるか否かを見るためにチェックがされる。終わりが達されていないので、変数iの値が1だけ増やされ2になり、処理がステップ608に回帰され、これにより変数cは、クエリエレメント「12」の第2の文字である「2」に設定される。変数pは2に初期化される(領域Σに対する文字セットにおける文字「2」の位置)。次いで、本発明は、ノード404のArray[2]がNULLであるか否かをチェックする。(図4に示されるように)ノード404のArray[2]がNULLでないので、ステップ616により、CurrPtrがノード408(すなわちノード404のArray[2]によって指し示されるノード)を指し示すように設定される。次いで、(ステップ618によって)エレメント「12」の終わりが達されるか否かを見るためにチェックされる。終わりが達されるので、本発明は、(ステップ622によって)ノード408のエレメントポインタがヌル値に設定されるか否かをチェックする。(図4に示されるように)ノード408のエレメントポインタがNULLに設定されるので、このポインタは、ストリング「12」がセットSに含まれないことを示す。次いで、信号は検索リクエストのソースに出力され得る。(ステップ614によって)セットSがクエリエレメント「12」を含まないことを示す。上述のように、エレメント「12」がセットSに含まれるか否かを決定するために、二つの文字比較のみが必要とされる。
【0069】
第3の例として、検索クエリが「134」であると仮定する。フローチャート600に説明されるように、処理がルートノード402で開始する。次いで、ルートノードおよび次のノードのアレイポインタは、クエリエレメントがセットSにあるか否かを決定するために移動される。例えば、エレメントクエリ「134」について、ルートノード402のArray[1]がノード404に達するように移動される。次いで、ノード404のArray[3]がノード410に達するように移動される。次いで、ノード410のArray[4]がノード418に達するように移動される。次いで、本発明は、(ステップ622によって)ノード418のエレメントポインタがNULLに設定されるか否かをチェックする。ノード418のエレメントポインタがNULLに設定されていないので、このポインタはエレメント「134」がセットSに含まれることを示す。信号が(ステップ624によって)セットSがクエリエレメント「134」を含むことを示しす検索リクエストのソースに出力され得る。次いで、本発明は適切なアクションを実行し得る。上記で説明されたように、三つの比較のみが、エレメント「134」がセットSに含まれるか否かを決定するために必要とされる。
【0070】
概して、第1の検索技術によると、所与の検索クエリエレメントkに「klength」個の文字がある場合、図6に示される方法を適用することにより、kがセットSに含まれるか否かを決定するために、せいぜい「klength」個の文字比較を行う。最悪のケースシナリオにおいて、klengthがZに等しい(ここで「Z」は領域Σのエレメントの可能な最大な長さである)。従って、せいぜい一つのエレメント比較が必要とされる。従って、検索を実行するために必要とされる比較の数はクエリエレメントの長さに比例する。従って、上記で説明された第1の検索技術は、特定の検索クエリエレメントが特定のデータセットにあるか否かを決定するために必要とされる比較の数に関して最適化される。第1の検索技術は、メモリ内検索について高度に最適化される。比較の数はセットSのサイズに依存していない。所与のクエリエレメントがデータ構造内に存在しない(すなわちセットSのメンバでない)場合、(アレイポインタの)数ビット比較のみがエレメントがセットSにないことを決定するために必要とされる。これは、複数のエレメント比較を必要とし得る従来の検索技術と対照的である。
【0071】
第1の検索技術の教示に従って構築されたデータ構造はまた、エレメントの前置きマッチングに用いられ得る。前置きマッチングは、所与の(またはユーザ特定の)クエリサブストリングで始まる全てのストリングを見出すプロセスを参照する。例えば、セットSがURIを表示するストリングを含む場合、ユーザは、(クエリを表示する)「http://www.arcot.」で始まる全てのURIを決定することを望み得る。これは、第1の技術に従って構築されたデータ構造を用いて実行され得る。上述された態様で、クエリに含まれた文字に基づいて、ルートノードで始まるデータ構造が特定レベル「L」で特定のノードに到達するように移動される。特定のノードでルーティングされた全てのサブツリーは、「http://www.arcot.」で始まるセットSのエレメント(または任意の他のクエリストリング)を表示する。例えば、図3に示されるように、サブツリー322は、エレメントの第1の位置にあるArray[2]に対応する文字とエレメントの第2の位置にあるArray[1]に対応する文字とを有する、セットSのエレメントに対応する。同様に、サブツリー324は、エレメントの第1の位置にあるArray[2]に対応する文字とエレメントの第2の位置にあるArray[m]に対応する文字とを有する、セットSのエレメントに対応する。サブツリー332は、エレメントの第1の位置にあるArray[m]に対応する文字とエレメントの第2の位置にあるArray[2]に対応する文字とを有する、セットSのエレメントに対応する。従って、第1の技術に従って構築されたデータ構造は前置きマッチングを容易にする。
【0072】
第1の検索技術はまた、ツリーデータ構造にエレメントを挿入する演算(「インサート」演算と呼ばれる)と、ツリーデータ構造からエレメントを削除する演算(「デリート」演算と呼ばれる)を容易にする。「インサート」演算は、新しいエレメントがセットSに追加されるときに必要とされ得、一方で、「デリート」演算は、エレメントがセットSから除去されるときに必要とされ得る。
【0073】
「インサート」演算は、本発明の実施形態に従う以下の態様で達成され得る。新しいエレメント「R」がセットSに挿入されると仮定する。ここで、R=c1c2...cq、いくつかのq≦Z(「Z」は領域Σのエレメントの最大可能な長さ)、およびci∈Σ,1≦i≦q。挿入演算は、図5に示されるフローチャートを用いて実行され得る(一つのエレメントのみが挿入される予定の場合、ステップ532が必要とされない)。例えば、ツリーのルートノードで始まると、データ構造ツリーは、アレイポインタArray[c1],Array[c2],Array[c3],...,Array[cq]を用いて横切られ、特定のノードに達する。次いで、特定のノードのエレメントポインタが新しいエレメント「R」または新しい「R」に対応する情報に向けられる。1以上の新しい中間ノードが挿入を達するように作製される必要がある。
【0074】
「デリート」演算は、本発明の1実施形態に従う以下の態様で達成され得る。(上記で挿入された)エレメント「R」は、ここでセットSから削除されると仮定する。ツリーデータ構造からエレメントを削除するために、ツリーのルートノードで始まり、アレイポインタArray[c1],Array[c2],Array[c3],...,Array[cq]が特定のノードに達するように移動される。特定のノードのエレメントポインタが削除されるべきエレメントを指し示す。次いで、エレメントポインタは、NULLに設定され、セットSからエレメント「R」の削除を完了する。
【0075】
第1の検索技術を適用する本発明の1実施形態に従って、「インサート」および「デリート」演算がO(Rlength)時間をとる。ここで「Rlength」とは挿入または削除されるべきエレメントの長さである(すなわちRlength=|R|)。さらに、インサートおよびデリート演算が並列に実行され得る。
【0076】
従って、上述のツリーデータ構造等のデータ構造を用いて、「サーチ」,「インサート」,および「デリート」演算は、クエリエレメントまたは挿入または削除されるべきエレメント内の文字の数に比例する時間で実行され得る。特に、所与のクエリエレメントkが「klength」個の文字から構成される場合、演算は、せいぜい「klength」個の文字比較を用いて実行され得る。
【0077】
上述の第1の検索技術はまた、セットSが1エレメントの複数のコピー(例えば二重、三重等)を含む状況で用いられ得る。このシナリオにおいて、複数のコピーを有するエレメントに対応するノードのエレメントポインタは、エレメントの複数のコピーに対応する構造のリンクされたリストを指し示し得るか、または照会し得る。上記データ構造によって用いられるメモリはO(D)ノードである。ここでDはセットSの全てのエレメントにある文字の総計、すなわち
【0078】
【数1】
である。従って、用いられるメモリはO(Dm)バイトである。このメモリ限界は、以下に説明される技術を用いてさらに低減され得る。
【0079】
メモリ要件を低減するために、ツリーデータ構造が用いられ得る。ツリーのそれぞれのノードに対するArray[]ポインタのアレイは、(2−3ツリー、赤−黒ツリー(red−black tree)等)バランスツリー(balanced tree)と置き換えられる。「ポインタのアレイ」ツリーの場合において、ツリーのそれぞれのノードに必要とされるメモリがmであった。他方、メモリを節約する目的で改良されたバージョンのそれぞれのノードに必要とされるメモリがO(q)に過ぎない。ここでqはそのノードの非NULLポインタの数である。従って、全ツリーに必要とされるメモリはO(D)バイトだけである。
【0080】
また、前回のケースでは、ノードの任意のポインタを得ることはO(1)回で行われ得る。改変された「メモリセーバー」バージョンでは、それぞれのポインタアクセスはO(logq)回必要である。ここでqはそのノードの非NULLポインタの数である。従って、上記に基づいて、本発明の実施形態に従って、ディクショナリーは、それぞれの演算がO(H log m)回必要であるように実施され得る。ここで「H」は検索クエリエレメントの文字の数であり、m=|Σ|である。本発明の本実施形態に従って必要とされるメモリはO(D)バイトだけである。ここで
【0081】
【数2】
である。
【0082】
(log m)の典型的な値は5または6である。従って、「メモリセーバー」技術は、(最悪のケース)、従来の検索技術の平均ケース性能と非常に競合的な性能を有する。
【0083】
(第2の検索技術)
このセクションは、効率の高い態様で検索を実行する一方で、検索を実行するために必要とされるメモリリソースを最小限にする第2の検索技術を説明する。上述された第1の検索技術に関して、以下で説明される第2の検索技術は、任意の領域Σからの検索クエリエレメントk(すなわちk∈Σ)が、「n」個のエレメント「k1,k2,...kn」(すなわちX=(k1,k2,...,kn))を含むセットSのメンバ(すなわちk∈Σである場合)であるか否かを決定するように用いられ得る。領域Σのそれぞれのエレメント(次には、セットSのそれぞれのエレメント)は、領域Σの特定の文字セットからの1以上の文字を含み得る。
【0084】
第2の検索技術は、図1に示されたコンピュータシステム100等のコンピュータシステムで具体化され得る。図1が本発明を組み込んでいる実施形態の例示に過ぎず、請求項に記載された本発明の範囲を限定しないことは明らかであるべきである。当業者は、他の変更、改変および代替を理解する。
【0085】
上述のように、第2の検索技術の処理は図2に示される二つのフェーズを含む。第1フェーズの間、データ構造または他の同様のメモリ構造が生成され、第2フェーズで実行される検索演算を容易にする。第1フェーズの間に生成されたデータ構造は検索されるべきデータセットに含まれるエレメントに基づいている(すなわちデータ構造はセットSのエレメントに基づいて構築される)。第2の検索技術を実施する本発明の実施形態に従って、第1フェーズの間、コンピュータシステム100はセットSのエレメントを識別する情報を受信し得る(ステップ202)。エレメント自体がコンピュータシステム100のメモリサブシステムまたはコンピュータシステム100にアクセス可能ないくつかのメモリに格納され得る。次いで、ステップ202で受信された情報に基づいて、コンピュータシステム100は、データ構造(任意の他のメモリストレージ構造)を構築し得、第2フェーズで実行される検索を容易にし得る(ステップ204)。
【0086】
データ構造の様々な異なる種類は、検索演算を容易にするために用いられ得る。特定のデータ構造が以下で説明されるが、第2の検索技術の範囲はそのデータ構造に制限されない。1実施形態においてデータ構造がコンピュータシステム100によって生成される一方で、本発明の別の実施形態では、セットSのエレメントに関連されるデータ構造カプセル化情報が別のコンピュータシステムによって構築され得、コンピュータシステム100に提供され得る(例えば、データ構造は、別のシステムまたはデバイスによって生成され得、コンピュータシステム100にアクセス可能なメモリに格納され得る)。次いで、コンピュータシステム100は、第2の検索技術に従って検索を実行するように格納されたデータ構造にアクセスし得る。
【0087】
セットSのエレメントに関連する情報を格納しているデータ構造が第1フェーズに従って構築された後、次いで、データ構造は、第2の検索技術を用いて、第2フェーズで実行される検索を容易にするために、用いられる。本発明の実施形態に従って、第2フェーズの間、コンピュータシステム100は、検索クエリ「k」がセットSに含まれるか否かを決定するために検索リクエストを受信し得る(ステップ206)。検索クエリは、コンピュータシステム100に接続される一つ以上の入力デバイスを用いてコンピュータシステム100のユーザによって特定され得る。あるいは、検索クエリはまた、構成され得、コンピュータシステムで実行するプロセスから、コンピュータシステム100に接続されたデバイスまたはシステム(例えばネットワークインターフェース106を介してコンピュータシステム100に接続されたシステム)から、および/または他のシステムまたはプロセスから、受信され得る。
【0088】
次いで、第2の検索技術に従って、ステップ204で生成されたデータ構造は、ステップ206で受信された検索リクエストにて識別されたエレメントkがセットSに含まれるか否かを決定する(ステップ208)ために用いられる。次いで、コンピュータシステム100は、エレメントkがセットSに見出されたか否かを示す(ステップ210)信号を出力し得る。コンピュータシステム100はまた、ステップ208の結果に基づいて1以上のアクションを実行するように構成され得る。
【0089】
図7は、第2の検索技術を適用する本発明の実施形態に従って検索演算を容易にするために、(図2のステップ204で)構築され得るデータ構造700を示す。図7に示されたデータ構造700は、本発明を組み込んでいる実施形態の例示に過ぎず、請求項に記載された発明の範囲を限定しない。当業者は、変更、改変および代替を認識する。
【0090】
図7に示されるように、データ構造700は、Z個のノードまたはメモリ構造(702−1〜702−Z)を含む。Zは領域Σのエレメントの最大可能な長さである。それぞれのノード702は、セットSのエレメント内の特定の位置にある文字に対応する。例えば、第1のノード702−1はエレメントの第1の位置にある文字に対応し、第2のノード702−2はエレメントの第2の位置にある文字に対応し、第3のノード702−3はエレメントの第3の位置にある文字に対応するなど。従って、Z番目のノード702−ZがエレメントのZ番目の位置にある文字に対応する。
【0091】
それぞれのノード702はmスロット(704−1〜704−m)を含む。mは領域Σの文字セットにある文字の数である。それぞれのスロット704は領域Σの文字セット内の文字に対応する。例えば、第1のスロット704−1は領域Σの文字セットの第1の文字に対応し、第2のスロット704−2は領域Σの文字セットの第2の文字に対応し、第3のスロット704−3は領域Σの文字セットの第3の文字に対応するなど。例えば、領域Σの文字セットが英語のアルファベット(例えばa,b,c,...,z)から構成される場合、m=26。本実施形態において、それぞれのノードは26個のスロットから構成される。第1のスロット704−1は文字「a」に対応し、第1のスロット704−2は文字「b」に対応し、第1のスロット704−3は文字「c」に対応するなど。
【0092】
図7に示される実施形態において、それぞれのスロット704は、順に、(m+1)ビット位置を含むビットアレイ706(Array[]として参照される)を含む。mは領域Σの文字セット内の文字の数である。それぞれのビットアレイArray[]706の最初のmビットは領域Σの文字セットの文字に対応する。例えば、Array[1]は領域Σの文字セットの第1の文字に対応し、Array[2]は領域Σの文字セットの第2の文字に対応し、Array[3]は領域Σの文字セットの第3の文字に対応するなど。例えば、領域Σの文字セットが英語のアルファベット(例えばa,b,c,...,z)から構成される場合、m=26。本実施形態において、ビットアレイArray[]は、27ビットを含む。Array[1]は文字「a」に対応し、Array[2]は文字「b」に対応し、Array[3]は文字「c」に対応するなど。それぞれのビットアレイの最後のビット(すなわち、Array[m+1])は、エレメントの終わりを示すために用いられる。
【0093】
本発明の実施形態に従って、それぞれのノードのそれぞれのスロットはまた、セットSの(単数または複数の)エレメントに関連する情報を格納し得るメモリ位置708を含む。メモリ位置708は、ポインタまたはリファレンスをテーブルまたはセットSの(複数の)エレメントに対する情報を格納する他のメモリ構造に格納し得る。あるいは、メモリ位置708はヌル(またはゼロ)値を格納し得る。メモリ位置708はセットSの1以上のエレメントに関連する情報を格納または指し示すので、メモリ位置708は、本明細書後半で、特定のノードのスロットの「エレメントポインタ」と呼ばれる。
【0094】
次の表記は第2の検索技術を説明する目的で用いられる。図7に示されたデータ構造は、DS[1:Z][1:m]によって示される。詳細には、DS[x][y]は、データ構造700のx番目のノードにおけるy番目のスロット(すなわちスロットが領域Σの第yの文字に対応する)を示す。
【0095】
データ構造を構築するために、データ構造700内の全てのノードに対する全てのスロットのビットアレイは、ヌル(またはゼロ)値に初期化される。セットSからエレメントR(いくつかのq≦Zに対してR=c1c2...cqで、「Z」は領域Σのエレメントの最大可能な長さであり、ci∈Σ,1≦i≦qである)を挿入するために、スロットDS[1][c1に対応するスロット]のArray[文字セットのc2の位置](すなわち文字c2に対応するビット)内のビットが非ヌル値に設定され(例えば1に設定され)、スロットDS[2][スロットはc2に対応する]のArray[文字セットのc3の位置](すなわち文字c3に対応するビット)内のビットが非ヌル値に設定され、...スロットDS[q−1][スロットはcq−1に対応する]のArray[文字セットのcqの位置](すなわちビットは文字cqに対応する)内のビットが非ヌル値に設定され、スロットDS[q][スロットはcqに対応する]のArray[m+1]内のビットが非null値に設定される。スロットDS[q][cqに対応するスロット]のエレメントポインタは更新され、エレメントRに関連する情報を指し示すか、エレメントRに関連する情報を照会する。
【0096】
図8は、第2の検索技術を適用して本発明の実施形態に従って検索を容易にするための、データ構造を構築する方法の高度に単純化されたフローチャート800である。図8に示された方法は、コンピュータシステム100、コンピュータシステム100に接続されたハードウェアモジュールまたはこれらの組み合わせ上で実行するソフトウェアモジュールによって実行され得る。図8に示されたフローチャート800は、本発明を組み込む実施形態の単なる例示であり、請求項に記載された本発明の範囲を限定しない。当業者は、変更、改変および代替を認識する。
【0097】
処理は、m(mは領域Σの文字セットの文字の数である)個のスロットを含むZ(Zは領域Σのエレメントの最大の長さである)個のノードを生成することによって初期化され、それぞれのスロットは、[m+1]個のメモリ位置およびエレメントポインタを含むビットアレイArray[]を含む(ステップ802)。ステップ802の一部として、ビットアレイ位置およびエレメントポインタがヌル(またはゼロ)値に全て初期化される。
【0098】
数値変数「m」は、領域Σの文字セットの文字の数に設定される(ステップ804)。次いで、データ構造に挿入されるべきセットSのエレメント(またはエレメントを識別する情報)がアクセスされる(ステップ806)。セットSの第1のエレメントは、図8に示されたフローチャートの第1のパスの間にアクセスされる。セットSの他のエレメント(または、他のエレメントを識別する情報)は、セットSの全エレメントが処理されるまでの次のパスの間にアクセスされる。
【0099】
次いで、数値変数「q」は、ステップ806においてアクセスされるエレメントの長さ(すなわちエレメント内の文字数)である(ステップ808)。次いで、カウンタ変数「i」が1に初期化される(ステップ810)。この変数は、データ構造に挿入されるべきエレメントの様々な文字を移動するように用いられる。次いで、文字変数「c1」は、ステップ806においてアクセスされるエレメントのi番目の位置にある文字に初期化される(ステップ812)。次いで、数値変数「p1」は、領域Σの文字セットに変数c1に格納される文字の位置に初期化される(ステップ814)。例えば、文字セットが英語のアルファベットのセットである場合、次いで、変数c1が文字「a」で格納される場合、変数p1は1に設定され、次いで、変数c1が「f」で格納される場合、変数p1は6に設定され、変数c1が文字「z」で格納される場合、変数p1が26に設定されるなど。
【0100】
変数iに格納された値がqの値に等しいか否かを決定するためにチェックが為される(ステップ816)。これは、ステップ806でアクセスされるエレメントの終わり(すなわちエレメントの最後の文字)が到達されたか否かを決定するために為される。iがqに等しいことがステップ816で決定される(すなわちエレメントの終わりが到達される)場合、スロットDS[i][pl]のArray[m+1]が非ヌルに設定される(ステップ818)。スロットDS[i][pl]のエレメントポインタがステップ806でアクセスされたエレメントまたはステップ806にてアクセスされるエレメントに関連する情報を指し示すか、または照会するように設定される(ステップ820)。次いで、本発明は、セットSの全てのエレメントが処理されたか否かをチェックする(ステップ822)。セットSの全てのエレメントが処理されていない場合、処理がステップ806で続行し、セットSの次の処理されていないエレメントがアクセスされる。しかし、セットSの全てのエレメントが処理された場合、図8に示されたプロセスは終了する。
【0101】
iがqに等しくないとステップ816で決定される(すなわちステップ806でアクセスされるエレメントの終わりが到達されていない)場合、文字変数「c2」がステップ806でアクセスされたエレメントの(i+1)番目の位置の文字に設定される(ステップ824)。次いで、数値変数「p2」は、領域Σの文字セット内の変数c2によって格納された文字の位置に設定される(ステップ826)。次いで、スロットDS[i][p1]のArrayビットArray[p2]が非ヌル値に設定される(ステップ828)。次いで、変数iの値が1だけ増やされる(ステップ830)。次いで、変数c1は、変数c2に格納された文字に設定される(ステップ832)。変数p1は、変数p2の値に設定される(ステップ834)。次いで、処理が上述のようにステップ816で続行する。
【0102】
次いで、図8に示されたフローチャートに従って構築されたデータ構造は、第2の検索技術を適用することによって検索を容易にするために用いられ得る。データ構造は、ストレージサブシステムに格納され得る。データ構造は検索演算の間、ストレージサブシステムからアクセスされ得る。本発明の教示に従って、図8に示されたフローチャートに従って構築されたデータ構造は、エレメントが挿入される順番と無関係であり、挿入されるべきエレメント、領域Σの文字セットの文字の数(「m」)および領域Σのエレメントの最大可能な長さ(「z」)のみに依存する。データ構造は、二重の情報が任意のノードに格納されないように効率の高い空間である。
【0103】
データ構造の最大サイズは固定され、小さく、セットSのエレメントの数と独立である。図7に示されるデータ構造に関して、用いられるメモリは、ビットアレイポインタに対してZm(m+1)であり、エレメントポインタに対して2Zmバイトである(「Z」は領域Σの最大可能な長さであり、「m」が領域Σの文字セットの文字の数である)。例として、領域Σのエレメントの最大長さが255であり(例えば、領域Σがコンピュータベースのファイルシステム内のストリングに対応する場合)、文字セットのサイズが91である場合、データ構造に必要とされるメモリは約300KBである。データ構造の効率の高い表示が与えられると、データ構造は、検索リクエストの効率の高い処理のために、複数の位置(例えば、ウェブサーバ、プロキシサーバ等)でキャッシュされ得る。
【0104】
図9は、本発明の実施形態に従って、ドメインΣに属するエレメントを含む特定のセットSに対する第二の検索技術の教示に従って構築されたデータ構造900を示す。図9で示された実施形態に関して、ドメインΣに対する文字のセットは、5つの文字、すなわち「1」、「2」、「3」、「4」および「5」からなり、ドメインΣにおけるエレメントの最大の長さが4であることが仮定される。さらに、セットSは、続く8エレメントS=(「1」、「123」、「13」、「21」、「134」、「4321」、「25」、「3421」)を含むことが仮定される。
【0105】
図9に示されるように、同じ長さおよび同じ最後の文字を有するエレメントは、同じエレメントポインタにマッピングされる。例えば、図9に示されるようにエレメント「4321」および「3421」は、同じエレメントポインタ902にマッピングされる。本発明の一実施形態によると、エレメントは、エレメントポインタ902によって指し示されたテーブル、リンクされたリストまたは他のメモリ構造に格納され得る。
【0106】
図8において示されたフローチャートに従って構築されたデータ構造は、次いで、特定のクエリエレメントkがセットSのエレメントであるかどうかを判定するために使用され得る。ここで、kは、任意のq≦Zに対して(ここでZはドメインΣにおけるエレメントの可能な限りの最大の長さである。)k=c1c2...cqであり、ci∈Σ、1≦i≦qである。本発明の一実施形態によれば、検索はビットアレイにおける次のビットがノンヌル値である場合、照合によって実行され得る。非ヌル値は、その命令において、スロットDS[q][cqに対応するSlot]のArray[m+1]、スロットDS[q−1][cq−1に対応するSlot]のArray[文字のセットにおけるcqの位置](すなわち、文字cqに対応するビット)...、スロットDS[2][c2に対応するSlot]のArray[文字セットにおけるc3の位置](すなわち、文字c3に対応するビット)およびスロットDS[1][c1に対応するスロット]のArray[文字のセットにおけるc2の位置](すなわち、文字c2に対応するビット)。検索が任意のこのビットにおいて失敗する場合(すなわち、任意のビットがヌル値にセットされる場合)、クエリエレメントkは、セットSの成分ではないことが判定され得る。次いで、上記のビットの全てが設定される場合、クエリエレメントkはセットSに含まれ得る事が示される。次いで、スロットDS[q][cqに対応するSlot]のエレメントポインタは、エレメントkまたはエレメントkに関連のある情報に指し示すかどうかを判定するために使用される。エレメントポインタが、一つ以上のエレメントを含むテーブルまたはリンクされたリスト(例えば、クエリエレメントkとして同じ長さおよび同じ最後の文字を有するエレメント)に指し示される場合、テーブルまたはリンクされたリストは、次いで、エレメントkがセットSのエレメントであるかどうかを判定するために検索され得る。
【0107】
図10は、セットSが第二の検索技術に適用される本発明の一実施形態に従った検索クエリエレメントkを含むかどうかを判定する方法の高レベルで簡易化されたフローチャート1000である。図10において示された方法は、コンピュータシステム100上で実行されるソフトウェアモジュール、コンピュータシステム100に接続されたハードウェアモジュールまたはその組み合わせによって実行され得る。図10において示されたフローチャート1000は、本発明を援用する一実施形態の単なる図であり、請求項において列挙されたような本発明の範囲を限定しない。ある当業者は、変形、改良、代替を理解する。
【0108】
図10に示されたように、処理は、セットSが検索クエリエレメントkを含むかどうか判定するためにコンピュータシステム100が検索要求を受け取る時に初期化される(ステップ1002)。前に図示したように、検索要求は、コンピュータシステム100に接続された一つ以上の入力デバイスを使用してコンピュータシステム100のユーザによって指定され得る。検索クエリはまた、コンピュータシステム上で実行されるプロセスから、コンピュータシステム100接続されるデバイスまたはシステム(例えば、ネットワークインターフェース106を介するコンピュータシステム100に接続されているシステム)から、および/または他のシステムまたはプロセスから構成され受け取られ得る。
【0109】
数値変数「m」は、次いで、ドメインΣに対する文字セット内の文字の数に設定される(ステップ1004)。他の数値変数「q」は、クエリエレメントkの長さに(すなわち、クエリエレメントkにおける文字の数に)初期化される(ステップ1006)。数値変数「i」は、変数qによって格納される値に設定される(ステップ1008)。この変数は、クエリエレメントの種々の文字を移動するために使用される。
【0110】
次いで、文字変数「cl」は、クエリエレメントkのi番目の位置内の文字に初期化される(ステップ1010)。次いで、数値変数「pl」は、ドメインΣに対する文字設定において変数clによって格納された文字の位置に初期化される(1012)。例えば、文字セットが英語のアルファベットのセットであった場合、次いで変数clが数値「a」を格納した場合、変数plは1に設定され、変数clが文字「f」を格納した場合、次いで変数plは、6に設定され、変数clが数値「z」を格納した場合、次いで変数plは、26に設定されるなどである。数値変数「H」は変数plによって格納される値に設定される(ステップ1014)。
【0111】
チェックが、スロットDS[i][pl]のビットArray[m+1]がヌルに設定されるかどうかを判定するためになされる(ステップ1016)。スロットのArray[m+1]がヌル(またはゼロ)値に格納される場合、セットSはクエリエレメントkを含まないことを示す。信号は、セットSがクエリエレメントkを含まないことを示す(ステップ1018)検索要求のソースに出力され得る。他の適切な処理もまた、ステップ1018において実行され得る。
【0112】
スロットDS[i][pl]のビットArray[m+1]がノンヌル値を格納することがステップ1016において判定される場合、次いで、チェックは、変数iが1に等しくなるかどうかを見るためになされる(ステップ1020)。iが1に等しい場合、クエリエレメントkの全ての文字が処理されたことを示す。次いで、スロットDS[q][H]のエレメントポインタが、それがエレメントkまたはエレメントkに関連した情報に指し示すまたは参照するかどうかを見るためにチェックされる(ステップ1022)。上述のように、エレメントポインタは、クエリエレメントと同じ長さであり、クエリエレメントと同じ最後の文字を有する複数のエレメントに指し示し得る。エレメントポインタが、一つ以上のエレメントを含むリストまたはテーブルに指し示す場合、次いでステップ1022においてエレメントのリストまたはテーブルは、クエリエレメントkがリストまたはテーブルに含まれるかどうかを判定するために検索される。スロットDS[q][H]のエレメントポインタがエレメントk(またはエレメントkに関する情報)に指し示さない場合、またはエレメントポインタがエレメントkを含まないエレメントのリストまたはテーブルに指し示す場合、次いで信号は、セットSがステップ1018に従ってクエリエレメントkを含まないことを示す検索要求のソースに出力され得る。他の適切な処理はまた実行され得る。スロットDS[q][H]のエレメントポインタがエレメントk(またはエレメントkに関する情報)に指し示す場合、またはエレメントポインタがエレメントkを含むエレメントのリストまたはテーブルに指し示す場合、次いで信号は、セットSがクエリエレメントkを含むことを示す検索要求のソースに出力され得る(ステップ1024)。他の適切な処理はまた、ステップ1024において実行され得る。
【0113】
ステップ1020に戻って参照して、変数iが1でないと判定される場合(すなわち、エレメントkの全ての文字が処理されなかった場合)、次いで変数iの値は、1だけ減少される(ステップ1026)。文字変数「c2」は、次いでクエリエレメントkのi番目の位置における文字に初期化される(ステップ1028)。数値変数「p2」は、次いで、ドメインΣに対する文字セット内の変数c2によって格納される文字の位置に初期化される(ステップ1030)。チェックは、スロットDS[i][p2]のビットArray[p1]がヌルに設定されているかを判定する(ステップ1032)。スロットのArray[p1]がヌル(またはゼロ)値を格納する場合、セットSがクエリエレメントkを含まないことを示し、信号は、セットSがステップ1018に従ってクエリエレメントkを含まないことを示す検索要求のソースに出力され得る。他の適切な処理もまた、ステップ1018において実行され得る。スロットDS[i][p2]のArray[p1]がノンヌル値を格納する場合、変数c1は次いで、変数c2によって格納される文字に設定され(ステップ1034)、変数p1は変数p2の値に設定される(ステップ1036)。次いで、処理は、上述のようにステップ1020に続く。
【0114】
上述のように、セットSにおける複数のエレメントが同じ長さおよび同じ最後の文字を有する場合、次いで、複数のエレメントは、第二の検索技術の教示に従って確立されたデータ構造の、特定のノードの特定のスロットの同じエレメントポインタにマッピングする。この場合において、エレメントポインタは、テーブル、リンクされたリストおよび同様なものの中のベクトルに指し示し得る。与えられたクエリエレメントkがエレメントポインタにマッピングする場合、次いで、エレメントポインタによって指し示されたベクトルは、クエリエレメントkがセットSの成分であるかどうかを判定するために検索される。このシナリオにおいて、図7において示されたデータ構造は、ハッシュ関数の計算の必要なしに効率的に検索され得る小さなセットに対して検索されるべきその可能なエレメントのセットを効率的に引き下げるという点でハッシュメカニズムと同様に振舞う。
【0115】
本発明の教示に従って、いくつかの異なった技術はベクトルを維持するために使用され得る。一実施形態に従って、ベクトルは、格納されたリストとして維持され得るので、バイナリ検索は、クエリエレメントkがベクトル内に含まれるかどうかを判定するためにベクトルを検索するために利用され得る。他の実施形態に従って、ベクトルは、安定した(balanced)バイナリツリー(例えば、赤黒ツリー)として維持され得る。このような安定したバイナリツリーはO(logQ)時刻において検索され得る。ここでQはベクトル内のエレメントの数である。さらに別の実施形態に従って、ベクトルは第一の検索技術の教示に従って確立されたデータ構造(すなわち、図3において示されたデータ構造、および図5において示されたフローチャートに従った確立されたデータ構造)を使用して維持され得る。この実施形態では、ベクトルの検索に必要な時間は、クエリエレメントkの長さに比例している(すなわち、クエリエレメント内の文字の数に比例)。
【0116】
第二の技術に従った検索を実行するために必要とされる比較の数は、クエリエレメントの長さに比例している。従って、上述の第二の検索技術は、特定の検索クエリエレメントが特定のデータセット内にあるかどうかを判定するために必要とされる比較の数に対して最適化される。第二の検索技術は、メモリ内検索に対して高度に最適化される。比較の数は、セットSの大きさに依存しない。所与のクエリエレメントがデータ構造内に存在しない場合(すなわち、セットSのエレメントでない場合)、(アレイポインタの)数個のビット比較のみが、エレメントがセットS内にないことを判定するために必要とされる。これは、複数のエレメント比較を必要とし得る従来の検索技術と対照的である。
【0117】
第二の検索技術の教示に従って確立されたデータ構造は、極端に効果的な検索のための任意のツリーの移動なしに、文字比較を命令することを可能にする。結果として、検索内部のパラレル技術(例えば、バイナリスプリット検索など)はまた、検索を実行するために使用され得る。全てのクエリエレメントのハッシュがハッシュバケットを判定するために計算されることが必要である従来のハッシュベースの検索技術と比較する際、本発明はクエリエレメントの長さのみとして計算されるために任意のハッシュを必要とせず、文字位置はクエリエレメントがセットSの成分であるかどうかを判定するために使用される。
【0118】
上述のように、二つの検索技術がクエリエレメントkがセットS内に含まれるかどうかを判定するために示された。しかしながら,請求項に列挙されたような、本発明の範囲は、上述の検索技術に限定されない。当業者に通常公知の他の検索技術のいくつかはまた、本発明の範囲内に含まれる。
【0119】
図11は、本発明の一実施形態に従った第一および/または第二の検索技術をインプリメントするために使用され得る種々のモジュールおよび/またはエンジンを示す簡易化されたブロック図である。図11に示されたモジュールは、ソフトウェアまたはハードウェアまたはその組み合わせでインプリメントされ得る。図11において示されたように、モジュールは、ユーザインターフェース(UI)モジュール1102、データ構造ビルダモジュール1104、検索モジュール1106および通信モジュール1108を含み得る。
【0120】
データ構造ビルダーモジュール1104は、本発明の教示に従った検索を実行するために使用される一つ以上のデータ構造を確立するために構成され得る。例えば、データ構造モジュール1104は、、図3(第一の検索技術に従った)および図7(第二の検索技術に従った)に示されたデータ構造を確立するために構成され得る。データ構造ビルダーモジュール1104は、データベース1110からセットSのエレメントに関する情報にアクセスし得る。ネットワーク化された実施形態において、データ構造ビルダモジュール1104は、通信モジュール1108を介する他のネットワークまたはコンピュータシステムからセットSに関する情報を受け取っても良いし、アクセスしてもよい。セットSに関する情報はまた、ユーザインターフェース1102を介してユーザによって提供され得る。データ構造ビルダ1104によって確立されたデータ構造は、後の使用のためにメモリシステム内に(例えば、コンピュータシステムのRAM内に)格納され得る。
【0121】
検索モジュール1106は、検索クエリ内の特定のクエリエレメントが、データ構造ビルダモジュール1104によって確立されるデータ構造(複数)を使用して、セットSに含まれるかどうかを判定するために検索を実行するよう構成され得る。検索モジュール1106は、ユーザインターフェースモジュール1102を介して検索クエリを受け取り得る。検索は、第一の検索技術、第二の検索技術または他の技術に従って実行され得る。検索モジュール1106によって実行された検索の結果は、ユーザインターフェースモジュール1102を介してユーザに出力され得る。ネットワーク化された実施形態において、検索モジュール1106は、他のコンピュータシステムから、および通信モジュール1108を介して検索クエリを受け取り得、検索結果は、通信モジュール1108を介して検索要求のソースに通信され得る。ネットワーク環境において、検索モジュール1106は、通信モジュール1108を介する検索のために使用されたデータ構造にアクセスし得る。検索を実行するために検索モジュール1106によって使用されたデータ構造はまた、通信モジュール1108を介して外部のコンピュータまたはネットワークから受け取られ得る。
【0122】
通信モジュール1108は、本発明の教示に従って実行し処理するコンピュータシステムに、および、そこから情報およびデータの通信を容易にするために構成され得る。通信モジュール1108は、外部コンピュータシステムおよびネットワークを含む外部エンティティからの検索要求を受け得る。検索を容易にするために使用されるデータ構造はまた、外部エンティティから通信モジュール1108によって受け取られ得る。検索モジュール1106によって実行される検索の結果は、通信モジュール1108によって要求のソースに通信される。
【0123】
ユーザインターフェースモジュール1102は、インターフェースを提供する。インターフェースを介し、ユーザは、検索クエリを入力し得、検索クエリの結果を受け取り得る。本発明の一実施形態に従って、ユーザはまた、インターフェースモジュール1102を介してセットSに関する情報を提供し得る。
【0124】
データ格納場所1110は、データ構造ビルダモジュール1104および検索モジュール1106によって実行される処理に関する情報を格納するために貯蔵所として働き得る。例えば、セットSのエレメント(または、エレメントそれ自体)に関する情報は、データ格納場所1110内に格納され得る。
【0125】
上述した本発明に従った技術は、種々の異なる用途において使用され得る。例えば、コンピューターの技術は、URIのセットが、特定のURIがそのセットに含まれるかどうかを判定するために検索される暗号化目的のために使用され得る。この技術は、クレジットカードの特定の数字がセットに含まれるかどうかを判定するためのセットまたはリストを検索するために使用され得る。目録リストまたはセットは、ユーザが購入を望む特定の項目が目録に含まれるかどうかを判定するために検索され得る。本発明によって提供される検索技術はまた、効率的な検索が望まれる種々の他の環境において使用され得る。
【0126】
上述したことは、本発明の特定の実施形態のみを示すことが理解されるべきであり、請求項に列挙されたような本発明の範囲に限定されない。本発明の特定の実施形態が示されたが、種々の変形、改変、代替、および等価物はまた、本発明の範囲内に含まれる。示された発明は、所定の特定のデータ処理環境内で動作することに制限されないが、複数のデータ処理環境内で自由に動作する。さらに、本発明は、特定の一連の処理およびステップを使用して示され、本発明の範囲が、示された一連の処理およびステップに制限されないことが当業者に理解されるべきである。
【0127】
さらに、本発明は、ハードウェアおよびソフトウェアの特定の組み合わせを使用して示されたので、他のハードウェアおよびソフトウェアの組み合わせもまた本発明の範囲内であることが理解されるべきである。本発明は、ハードウェアにおいてのみまたはソフトウェアにおいてのみ、またはその組み合わせを使用してインプリメントされ得る。
【0128】
従って、説明および図は、限定的な意味ではなく例示的に考慮されるべきである。しかしながら、付加、除去、削除、および他の変形および変化は、請求項で示されたような発明のより広い意図および範囲から逸脱することなしになされ得ることが明らかである。
【図面の簡単な説明】
【0129】
【図1】図1は、本発明の実施形態を組み入れ得るコンピュータシステムの簡略化されたブロック図である。
【図2】図2は、本発明の実施形態に従って検索を行う方法の高レベルに簡略化されたフローチャートである。
【図3】図3は、本発明の実施形態に従う第一の検索技術を用いて検索オペレーションを促進するために構築され得るツリーデータ構造の部分を示す。
【図4】図4は、領域Σに属するエレメントを含む特定のセットSのために第一の検索技術を適用する本発明の実施形態に従って構築されたツリー構造を示す。
【図5】図5は、第一の検索技術を適用する本発明の実施形態に従って検索を促進するためにデータ構造を構築する方法の高レベルに簡略化されたフローチャートである。
【図6】図6は、第一の検索技術を適用する本発明の実施形態に従ってセットSがを検索クエリエレメントkを含むかを判定する方法の高レベルに簡略化されたフローチャートである。
【図7】図7は、第二の検索技術を適用する本発明の実施形態に従って検索オペレーションを促進するために構築され得るデータ構造を示す。
【図8】図8は、第二の検索技術を適用する本発明の実施形態に従って検索を促進するためにデータ構造を構築する方法の高レベルに簡略化されたフローチャートである。
【図9】図9は、本発明の実施形態に従って領域Σに属するエレメントを含む特定のセットSのための第二の検索技術の技術に従って構築されたデータ構造を示す。
【図10】図10は、第二の検索技術を適用する本発明の実施形態に従ってセットSが検索クエリエレメントkを含むかを判定する方法の高レベルに簡略化されたフローチャートである。
【図11】図11は、本発明の実施形態に従って第一および/または第二の検索技術をインプリメントするために用いられ得る種々のモジュールおよび/またはエンジンを示す簡略化されたブロック図である。
【0001】
(関連出願との相互参照)
本出願は、以下の出願からの優先権を主張し、この出願の全体は、本明細書において、全目的のために参考として援用される。
【0002】
(1)米国仮特許出願第60/263,320号、名称「TECHNIQUES TO FACILITATE EFFICIENT SEARCHING」、2001年1月17日出願。
【0003】
(2)米国非仮特許出願第10/006,179号、名称「EFFICIENT SEARCHING TECHNIQUES」(代理人事件整理番号20967−000110US)、2001年12月4日出願。
【背景技術】
【0004】
(発明の背景)
本発明は、検索技術に関し、より詳細には、検索を行うために要求されるメモリリソースを最小にして効率に行われる検索を可能にする技術に関する。
【0005】
検索は、重要な、かつ、広範囲に用いられる、コンピュータアプリケーションのオペレーションである。例えば、ファイルサーバ上のファイルリストは、そのリストが特定のファイル名を有するファイルを含むかを判定するために検索され得、均一なリソース識別子(URI)のリストは、ユーザ固有のURIがそのリスト中にあるかを判定するために検索され得、利用可能なリソースのリストは、リソースを位置づけるため、およびそのリソースに関連付けられたアクセス権を判定するために、アクセス制御アプリケーションによって検索され得、ファイルのコンテンツは、特定のキーワードがそのコンテンツ、およびくつかの他のアプリケーションに含まれるかを判定するように検索され得る。
【0006】
効率的な検索技術に対する強まる需要を理解する一分野は、電子商業活動の領域である。オンラインコマーシャルサービスを提供する商業者および他のエンティティは、適宜な方法で顧客の要求に応答することを可能にするために高速で効率的な技術を使用する必要がある。彼らの利益を最大にするために、オンライン商業者はまた、検索に関連するコストを最小にするために、検索を行うための最小量のメモリおよび演算リソースを必要とする検索技術を好んで使用する。例えば、オンライン商業活動に対する支払いを認可するオンラインバンキング施設およびクレジットカード会社は、検索に関連するコストを最小にしながら、適宜に顧客の要求を処理するために効率的な検索技術を使用する必要がある。したがって、検索を行うための最小限の金銭および演算リソースを使用しながら適宜に検索を行う検索技術に対する需要が増大している。
【0007】
検索することに対する異なるアプローチが多数ある。一つのアプローチによると、検索は、以下のようにモデリングされ得る。いくつかの領域Σからの「n」個のエレメント「k1,k2,・・・,kn」を含むSセット(すなわち、S=(k1,k2,・・・,kn))、および、領域Σからのターゲットエレメントまたはクエリエレメントk(すなわち、k∈Σ)が与えられる場合、検索は、ターゲットエレメントkがセットSに含まれるかどうか(すなわち、k∈Sであるかどうか)を判定するプロセスである。検索プロセスは、さらに、Σにおける標的エレメントの位置を判定するためにプロセスする工程を含み得る。領域Σは、任意の不定領域、例えば、整数のセット、実数のセット、文字列のセット等であり得る。セットSは、種々の形態でそれ自体を明らかにし得る。例えば、セットSは、ファイルシステムを形成するファイルの集合、URIのリスト、リソースのリスト等であり得る。セットSの各エレメントknは、領域Σの文字セットからの1以上の文字を含み得る。検索技術は、典型的には、k∈Sであるかを判定するために必要な時間および処理リソースを最小にしようとする。
【0008】
検索技術の効率を測定する一つの方法は、クエリエレメントkがセットSに含まれるかを判定するために検索技術によって必要とされる比較の数を判定することである。各比較は実施されるべき特定の時間単位を要求するので、検索技術は、クエリエレメントkがセットSに含まれるかを判定するための比較の数を低減することに努める。一般に、用語「比較」は、任意の2つの値を比較することに言及し得る。値は、1以上の文字、領域Σの1エレメントの1文字その他を含む領域Σのエレメントに対応し得る。したがって、領域Σのエレメントを領域Σの別のエレメントと比較する比較は、「エレメント比較」と呼ばれる。領域Σのエレメントの文字を別のエレメントの文字と比較する比較は、「文字比較」と呼ばれる。エレメント比較は、1以上の文字比較を含み得る。例えば、第一のエレメントが第二のエレメントと比較される場合、その比較は、第一のエレメントの個々の文字を第二のエレメントの文字と比較し得る。Σの各エレメントは、任意の長さであり得る(すなわち、可変数の文字を有する)ので、各比較は、比較を行うために「時間単位」より多くを要求し得る。
【0009】
いくつかの従来の検索技術が、検索の問題を解決するために開発されてきた。一つのやみくもな力による(brute−force)検索技術によると、クエリエレメントkは、セットSのすべてのエレメントと比較される。この技術は、検索を行うために「n」エレメント比較までを要求し得る。ここで、nは、セットSのエレメントの数である。したがって、nが非常に大きい場合(これは、きわめてよくある場合である)、このような検索技術のランタイム性能は、全く最適とはいえない。
【0010】
いくつかの他の従来の検索技術は、セットSがソートされた順序であることを要求する。例えば、バイナリ検索技術は、k∈Sが提供された場合に、Sのエレメントがソートされた順序にあることを判定するために用いられ得る。バイナリ検索技術は、検索を完了するためにΘ(logn)エレメント比較を要求する(ここで、nは、セットSのエレメントの数である)。しかしながら、このような検索技術の用途は、検索されるべきエレメントのセットがソートされた順序である必要がある条件のため極めて制限される。ソートされた順序内のデータセットを維持する際に含まれるコストが、検索の全体のコストに加わり、このような検索技術の使用は、多くの用途において実用的ではなくなる(特に、検索されるべきデータセットが大きく、データセットからのエレメントの頻繁な追加および削除がある場合の用途、例えば、電子商業環境での用途において)。結果として、このような検索技術の使用は、制限される。
【0011】
他の検索技術は、Σがほぼ制限されるか、または、セットSがΣ上に所定の分布を有する等の仮定に基づく。例えば、Σ={1,2,...,N}である場合、P.van Emde Boas,R.KassおよびE.Zijlstraによる「Design and Implementation of an Efficient Priority Queue,Mathematical Systems Theory 10,1997,pp.99−127」に開示された検索技術(「内挿検索(interpolation search)」と呼ぶ)は、Ο(n)の全メモリを用いるΟ(loglogN)時間において検索を行い得る。van Emdeらの技術は、各オペレーションがΟ(loglogN)時間を利用する辞書(すなわち、挿入、削除、およびオペレーションをサポートするデータ構造)を用いる。例えば、Σがせいぜい150の長さの全文字列の領域である場合(およびΣのための文字セットに50文字があることを仮定する)、検索を行うために要求される比較の数は、少なくとも(loglog50150=10)の比較となる。すなわち、検索時間は、少なくとも10の比較になる。セットSが(0,1)に均一に分布されると仮定される場合、van Emdeらの技術(さらに、「内挿検索技術」と呼ぶ)は、予期されたΟ(loglogn)時間において検索し得る。しかしながら、これら検索技術の不都合は、それらは任意の不定領域Σに適用されることができないことである。さらに、これらの技術は、検索を行うために実質的なメモリリソースを要求し、結果として、検索されるべきデータセットが大きいときには全くコスト効率的でない。
【0012】
辞書は、また、k∈Sであるかを判定するために一つのみの比較が要求されるように規定され得る。例えば、Σ={1,2,...,N}である場合(すなわち、|Σ|=N;領域Σは、N個のエレメントを含む)である。大きさΩ(N)のメモリを有する場合、辞書は、以下のようにインプリメントされ得る。Σのエレメントを、1,2,...,Nとしてラベルする。アレイA[1:N](すなわち、アレイ「A」は、Nエレメントを含む)は、A[b]が領域Σのエレメントbに対応するように構成され得る。最初に、全ての位置が0に初期化される。次いで、セットSのすべてのエレメントkiに対して、A[ki]が1<i<nに対して1に設定される(ここで、nは、セットSにおけるエレメントの数である)。次いで、k∈Sであるかの判定が、A[k]=1(これは、エレメントの存在を示す)であるかを判定することによって行われ得る。この種の辞書がΟ(1)時間での検索を達成し得る一方で、この技術のために要求されるメモリリソースは、特に、Nが大きい場合に非常に大きくなり得る。例えば、Σがせいぜい150の長さの全ての文字列の領域である場合、Nは、50の異なる文字があると仮定して50150になる。したがって、このような技術のランタイム性能は、非常に最適である一方で、この技術によって要求される莫大な量のメモリリソースは、それを、大抵の用途に対して非実用的にする。
【0013】
上記を考慮して、検索を行うために要求されるメモリリソースを最小にしながら効率的な方法で検索を行い得る検索技術に対する必要がある。
【発明の開示】
【課題を解決するための手段】
【0014】
(発明の簡単な要旨)
本発明は、検索を行うために要求されるメモリリソースを最小にしながら効率的な方法で検索を行うための技術を提供する。本発明の技術によると、クエリエレメントがエレメントのセットに含まれているかを判定するために必要とされる比較の数は、クエリエレメントの長さに比例する。
【0015】
本発明の実施形態によると、クエリエレメントがエレメントのセットに含まれるかを判定するための技術が提供される。この実施形態によると、データ構造は、エレメントのセットを識別する情報に基づいて構築される。クエリエレメントを識別する情報を受け取る本発明の実施形態は、クエリエレメントがエレメントのセットに含まれるかを判定するために、そのデータ構造を用い、その結果、クエリエレメントがエレメントのセットに含まれるかを判定するために必要とされる比較の数は、クエリエレメントの長さに比例し、エレメントのセットにおけるエレメントの数とは無関係である。
【0016】
他の特徴を共に有する前述の実施形態、および本発明の利点は、以下の明細書、請求の範囲、および添付図面を参照するとより明らかになる。
【0017】
(発明の詳細な説明)
本発明は、検索を行うために要求されるメモリリソースを最小にして効率的検索を行うための技術を提供する。本発明の技術に従う検索技術は、任意の領域Σ(すなわち、k∈Σ)からの検索クエリエレメントkがセットSに含まれるか(すなわち、k∈Sであるか)を判定する。このセットSは、領域Σからの「n」個のエレメント「k1,k2,...,kn」を含む(すなわち、S=(k1,k2,...,kn)。領域Σにおける各エレメント(およびセットSにおける続く各エレメント)は、領域Σの文字セットからの1以上の文字を含み得る。
【0018】
図1は、本発明の実施形態を組み入れ得るコンピュータシステム100の簡略化されたブロック図である。図1に示されるように、コンピュータシステム100は、少なくとも1つのプロセッサ102を含む。このプロセッサ102は、バスサブシステム104を介して多数の周辺デバイスと通信する。これらの周辺デバイスは、格納サブシステム106を含み得る。この格納サブシステム106は、メモリサブシステム108およびファイル格納サブシステム110、ユーザインタフェース入力デバイス112、ユーザインタフェース出力デバイス114、およびネットワークインタフェースサブシステム116を含む。入出力デバイスは、コンピュータシステム100とのユーザの相互作用を可能にする。ユーザは、人ユーザ、デバイス、プロセス、別のコンピュータその他であり得る。
【0019】
ネットワークインタフェースサブシステム116は、他のコンピュータシステムおよび通信ネットワークにインタフェースを提供する。ネットワークインタフェースサブシステム116の実施形態は、イーサネット(R)カード、モデム(電話、衛星、ケーブル、ISDN等)、(非同期)デジタル加入者ライン(DSL)ユニットその他を含む。コンピュータネットワークは、インターネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、イントラネット、プライベートネットワーク、パブリックネットワーク、スイッチングされるネットワーク、その他を含み得る。
【0020】
ユーザインタフェース入力デバイス112は、キーボード、マウス等のポインティングデバイス、トラックボール、タッチパッド、またはグラフィックタブレット、スキャナー、バーコードスキャナー、ディスプレイに組み込まれたタッチスクリーン、音声認識システム等のオーディオ入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含み得る。一般に、用語「入力デバイス」の使用は、コンピュータシステム100を用いて情報を入力するためのすべての可能なタイプのデバイスおよび方法を含めることが意図される。
【0021】
ユーザインタフェース出力デバイス114は、ディスプレイサブシステム、プリンタ、ファックスマシン、または、オーディオ出力デバイス等の非視覚ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)等のフラットパネルデバイス、または投影デバイスであり得る。ディスプレイサブシステムは、さらに、オーディオ出力デバイスを介する等で非視覚ディスプレイを提供し得る。一般に、用語「出力デバイス」の使用は、コンピュータシステム100からの情報を出力する全ての可能なタイプのデバイスおよび方法を含めることが意図される。
【0022】
格納サブシステム106は、コンピュータシステムおよび本発明の機能性を提供する基本プログラミングおよびデータ構築を格納するように構成され得る。例えば、本発明の実施形態によると、本発明の機能性をインプリメントするソフトウェアモジュールが、格納サブシステム106に格納され得る。これらのソフトウェアモジュールは、プロセッサ(単数または複数)102によって実行され得る。分散された環境では、ソフトウェアモジュールは、複数のコンピュータシステム上に格納され、複数のコンピュータシステムのプロセッサによって実行され得る。格納サブシステム106は、さらに、本発明の教示による情報を格納するために用いられ得る種々のデータベースおよびデータ構造を格納するための貯蔵所を提供し得る。格納サブシステム106は、メモリサブシステム108およびファイル格納サブシステム110を含み得る。
【0023】
メモリサブシステム108は、プログラム実行の間インストラクションおよびデータを格納するための主要なランダムアクセスメモリ(RAM)118および固定されたインストラクションが格納されているリードオンリーメモリ(ROM)120を含む多数のメモリを含み得る。ファイル格納サブシステム110は、プログラムおよびデータファイルのための持続性(不揮発性)の格納を提供し、ハードディスクドライブ、取り外し可能なメディアおよびフロッピー(R)ディスクドライブ、コンパクトデジタルリードオンリーメモリ(CD−ROM)ドライブ、光学ドライブ、取り外し可能なメディアカートリッジ、および他の同様な格納メディアを含み得る。1以上のドライブが他の接続されたコンピュータ上の遠隔位置に位置付けられ得る。
【0024】
バスサブシステム104は、コンピュータシステム100の種々のコンポーネントおよびサブシステム意図されるように互いに通信させる機構を提供する。コンピュータシステム100の種々のサブシステムおよびコンポーネントは、同一の物理的位置にある必要はなく、種々の位置に分散され得る。バスサブシステム104は、単一バスとして概略的に示されるが、バスサブシステムの代わりの実施形態は、複数のバスを利用し得る。
【0025】
コンピュータシステム100自体は、パーソナルコンピュータ、ポータブルコンピュータ、ワークステーション、コンピュータ端末、ネットワークコンピュータ、メインフレーム、キオスク、携帯情報端末(PDA)、セルフォン等の通信デバイス、エンターテイメントコンソール(PS2、X−box)、または、任意の他のデータ処理システムを含む種々のタイプであり得る。コンピュータの常に変換する性質に起因して、図1に示されるンピュータシステム100の説明は、本発明の好ましい実施形態を例示する目的のための特定の例としてのみ意図される。例えば、AMDからのAthlonTMクラスのマイクロプロセッサ、Intel CorporationからのPentium(R)TMクラスまたはCeleronTMクラスのマイクロプロセッサ、Motorola,Inc.,からのPowerPCTMG3またはG4マイクロプロセッサ等の他のタイプのプロセッサ、Transmeta,IncからのCrusoeTMプロセッサその他が企図される。さらに、他のタイプのオペレーションシステムが、MicrosoftからのWindows(R)オペレーションシステム(例えば、Win95、Win98、Windows(R)NTTM、Windows(R)XPTM等)、Sun MicrosystemsからのSolaris、Apple Computer CorporationからのLINUX、UNIX(R)、MAC OS X、BeOSTMその他を含む代わりの実施形態において企図される。図1に示されるコンピュータシステムより多いまたはより少ないコンポーネントを有するコンピュータシステムの多くの他の構成が可能である。
【0026】
本発明は、さらに、1以上のクライアントおよびサーバコンピュータを含む分散型ネットワーク環境において具体化され得る。このようなネットワーク環境では、本発明の教示に従って行われる処理および方法が、ネットワーク環境の1以上のコンピュータシステムの中で分散され得る。
【0027】
図2は、本発明の環境に従って検索を行う方法の高レベルに簡略化されたフローチャート200である。図2に示された方法は、コンピュータシステム100上で実行するソフトウェアモジュール、コンピュータシステム100に接続されたハードウェアモジュール、またはこれらの組み合わせによって行われ得る。図2に示されたフローチャート200は、本発明を組み入れる実施形態の例示に過ぎず、請求の範囲に列挙された本発明の範囲を制限しない。当業者は、変形、改変、および代替を認識する。
【0028】
図2に示されるように、本方法は、2つのフェーズを包含する。第一のフェーズの間、データ構造または他の同様なメモリ構造が、第2フェーズにおいて行われる検索オペレーションを促進するために生成される。第1フェーズの間に生成されたデータ構造は、検索されるべきデータセットに含まれるエレメントについての情報を封じ込める(すなわち、データ構造は、セットSに含まれるエレメントに基づいて構築される)。本発明の実施形態によると、第1フェーズの間、コンピュータシステム100は、セットSのエレメントを識別する情報を受け取り得る(ステップ202)。エレメント自体は、コンピュータシステム100のメモリサブシステムまたはコンピュータシステム100にアクセス可能ななんらかのメモリに格納され得る。次いで、ステップ202において受け取られた情報に基づいて、コンピュータシステム100は、第2フェーズにおいて行われる検索を容易にするためのデータ構造(または任意の他のメモリ格納構造)を構築し得る(ステップ204)。
【0029】
種々の異なる種類のデータ構造が検索オペレーションを容易にするために用いられ得る。これらは、テーブル、データベース、リンクされたリスト、ツリー、定方向グラフ、その他を含む。一実施形態では、データ構造は、コンピュータシステム100によって生成される一方で、本発明の代わりの実施形態では、セットSのエレメントに関する情報を封じ込めるデータ構造は、別のコンピュータシステムによって構築され、そして、コンピュータシステム100に提供され得る(例えば、データ構造は、別のシステムまたはデバイスによって生成され、コンピュータシステム100にアクセス可能なメモリに格納され得る)。コンピュータシステム100は、次いで、第2フェーズに従って検索を行うために格納されたデータ構造にアクセスし得る。
【0030】
セットSのエレメントに関する情報を格納するデータ構造が第1フェーズに従って構築された後、本発明は、次いで、本発明の教示に従って検索を行うためにデータ構造を用いる。本発明の実施形態によると、第2フェーズの間、コンピュータシステム100は、検索クエリエレメント「k」がセットSに含まれるかを判定するために検索要求を受け取り得る(ステップ206)。検索クエリは、コンピュータシステム100に接続された1以上の入力デバイスを用いてコンピュータシステム100のユーザによって特定され得る。あるいは、検索クエリは、コンピュータシステム上で実行するプロセスから、コンピュータシステム100に接続されたデバイスまたはシステム(例えば、ネットワークインタフェース106を介してコンピュータシステム100に接続されたシステム)から、および/または、他のシステムまたはプロセスから構成および受け取られ得る。
【0031】
ステップ204において生成されたデータ構造は、次いで、ステップ206において受け取られた検索要求で識別されたエレメントkがセットSに含まれるかを判定するために用いられる(ステップ208)。コンピュータシステム100は、次いで、エレメントkがセットSにおいて見出されたかどうかを示す信号を出力し得る(ステップ210)。あるいは、コンピュータシステム100は、ステップ208の結果に基づいて1以上の活動を行うように構成され得る。
【0032】
本発明によると、種々の異なるデータ構造が検索プロセスを容易にするために、(第1フェーズの間に)構築され得る。さらに、種々の異なる検索技術が、第1フェーズの間に構築されたデータ構造によって格納された情報に基づいて特定のクエリエレメントkがセットSに含まれるかを判定するために用いられ得る。以下のセクションは、検索を行うために要求されたメモリリソースを最小にして効率的に検索を行うために用いられ得る2つの検索技術を記載する。以下に記載される検索技術の双方において、クエリエレメントkがセットSに含まれるかを判定するために必要とされる比較の数は、クエリエレメントの長さに比例する(すなわち、クエリエレメントに含まれる文字の数に比例する)。
【0033】
(第1の検索技術)
この節は、クエリエレメントkがセットSに含まれるかどうかを判定するために用いられ得る第1の検索技術を説明する。図3は、本発明の実施形態に従う第1の検索技術を用いて検索演算を容易にするために、(図2のステップ204で)構築され得るツリーデータ構造300の一部を示している。図3で示されたデータ構造300は、本発明を組み込んだ実施形態を単に示しただけであり、特許請求の範囲に記載されたような本発明の範囲を制限しない。当業者は、改変、修正および代替物を認識する。
【0034】
図3に示すように、ツリーデータ構造300は、複数のノードまたはメモリ構造302、308、310等を含む。ツリー300の各ノードは、第1のメモリ位置304を含む複数のメモリ位置、および、メモリ位置のアレイ(アレイ[]と呼ぶ)を含む。本発明の実施形態に従って、メモリ位置は304は、セットSに関する情報を格納し得る。例えば、メモリ位置304は、セットSのエレメントに対するポインタまたは参照、セットSのエレメントに関連する情報に対するポインタまたは参照等を格納し得る。あるいは、メモリ位置304は、ヌル(またはゼロ)値を格納し得る。メモリ位置304がセットSのエレメントに関する情報を格納するまたは指し示すので、メモリ位置304は、以下において「エレメントポインタ」として参照される。
【0035】
アレイ306におけるメモリ位置は、データ構造300の他のノードに対するポインタまたは参照を格納し得、あるいは、ヌル(またはゼロ)値に設定され得る。第1の検索技術を組み込んだ実施形態に従って、アレイ306における各メモリは、任意の領域Σに関連する文字セットからの文字に対応する。例えば、領域Σに対する文字セットが「m」個の文字を含む場合、アレイ306は、(図3で示されたような)「m」個のメモリ位置を含む。各メモリ位置は、文字セットからの特定の文字に対応する。従って、図3で示されるように、ツリー300の各ノードは、「m」個のメモリ位置を含むアレイArray[1:m]を含む。ここで、Array[1]は、領域Σに対する文字セットにおける第1の文字に対応し、Array[2]は、領域Σに対する文字セットにおける第2の文字対応し、Array[3]は、領域Σに対する文字セットにおける第3の文字に対応する(以下同様)。概して、Array[i]は、領域Σの文字セットにおけるi番目の位置の文字(ときに、領域Σのi番目の文字として参照される)に対応する(1≦i≦m)。例えば、領域Σに対する文字セットが英語のアルファベット(例えば、a,b,c,・・・,z)で構成されている場合、m=26である。この実施形態において、Array[1]は、文字「a」に対応し、Array[2]は、文字「b」に対応し、Array[3]は、文字「c」に対応し、Array[26]は、文字「z」に対応する(以下同様)。
【0036】
図3に示された実施形態において、様々なノードがルートノード302を頭としたツリー構造の形態で組織されている。ツリー300は、いくつかのレベルを含み得、各レベルは、一つ以上のノード(唯一のノード(すなわち、ルートノード302)を含む「レベル0」を除く)を含む。概して、特定のノードに対する「レベル」は、ルートノード302で開始し、特定のノードに到達するために移動する必要のあるノードの数を示す。ルートノード(例えば、図3におけるノード302)は、レベル0にある。なぜなら、ルートノードに到達するために移動する必要のあるノードが無いからである。図3に示されるノード308は、レベル1にある。なぜなら、ルートノード302は、ノード308に到達するために移動する必要があるからである。同様に、ノード310はまた、レベル1にある。ノード308および310に結合されたノードは、レベル2にあると考えられる(以下同様)。
【0037】
第1の検索技術を適用する本発明の実施形態によると、特定のレベルLにおける各ノードは、少なくとも(L+1)の長さの文字を有するセットSのエレメントに関する情報を格納する。詳細には、図3で示された実施形態において、特定のレベルLにある各ノードは、少なくとも(L+1)の長さの文字を有するセットSのエレメントの(L+1)番目の位置の(または、エレメント(L+1)番目の文字と呼ばれる)文字に関する情報を格納する。この情報は、ノードのアレイ306に格納される。
【0038】
第1の検索技術を適用する本発明の実施形態によると、セットSが少なくとも(L+1)の長さの文字を有する少なくとも一つのエレメントを含み、エレメントがエレメントの(L+1)番目の位置におけるArray[i]に対応する文字(すなわち、領域Σの文字セットのi番目の文字)を有する場合、ツリー300のレベルLにおけるノードのアレイメモリ位置Array[i](1≦i≦m)は、非ヌル値に設定され、レベル(L+1)におけるツリー300の他のノードを指し示すポインタまたは参照を格納する。メモリ位置Array[i]が何らかのiに対して設定され、ポインタArray[i]がエレメントの(L+1)番目のArray[i]に対応する文字を有するセットSにおけるエレメントに対応する一つ以上のノードのサブツリーを指し示す。逆に、本発明の教示に従って、ツリー300のレベルLにおけるノードのアレイメモリ位置Array[i](1≦i≦m)は、セットSがエレメント(L+1)番目の位置におけるArray[i]に対応する文字を有する任意のエレメントを含まない場合、ヌル(または、ゼロ)に設定される。
【0039】
従って、セットS(このセットSに対してデータ構造300が構築される)が、少なくとも1つの文字長さを有する少なくとも1つのエレメントであって、エレメントの第1の位置におけるArray[i]に対応する文字を有する少なくとも一つのエレメントを含む場合、ツリー300におけるルートノード302(レベル0)のアレイメモリ位置Array[i](1≦i≦m)は、非ヌル値に設定され、ツリー300のレベル1にある別のノードを指し示すポインタまたは参照を格納する。例えば、図3に示されるように、ルートノード302のArray[2]は、レベル1でノード308に対するポインタを格納し、これにより、セットSは、少なくとも1つの文字長さを有する少なくとも1つのエレメントであって、エレメントの第1の位置のArray[2]に対応する文字を有する少なくとも1つのエレメントを含む(言い換えると、セットSは、領域Σの第2の文字で開始する少なくとも1つのエレメントを含む)。ルートノード302のArray[2]は、エレメントの第1の位置におけるArray[2]に対応する文字を有するセットSのエレメントに対応するノードを構成するノード308を頭としたサブツリー320を指し示す。
【0040】
同様に、図3で示されるように、ルートノード302のArray[m]は、レベル1のノード310に対するポインタを格納し、これにより、セットSが少なくとも1つの文字長さを有し、かつ、エレメントの第1の位置におけるArray[m]に対応する文字を有する少なくとも1つのエレメントを含む(または、言い換えると、セットSは、領域Σのm番目の文字で開始する少なくとも1つのエレメントを含む)ことを示す。ルートノード302のArray[m]は、エレメントの第1の位置にあるArray[m]に対応する文字を有するセットSにおけるエレメントに対応するノードを含むノード310を頭としたサブツリー330を指し示す。
【0041】
図3に示されるように、(レベル1の)ノード308のArray[l]は、レベル2のノード(図示せず)に対するポインタを格納し、これにより、セットSが少なくとも2つの文字長さを有する少なくとも1つのエレメントを含み、かつ、エレメントの第1の位置におけるArray[2]に対応する文字およびエレメントの第2の位置におけるArray[l]に対応する文字を有する(または、言い換えると、セットSは、エレメントの第1の位置における領域Σの第2の文字を有し、かつ、エレメントの第2の位置における領域Σの第1の文字を風する少なくとも1つのエレメントを含む。)ことを示す。ノード308のArray[l]は、エレメントの第1の位置におけるArray[2]に対応する文字、および、エレメントの第2の位置におけるArray[l]に対応する文字を有するセットSのエレメントに対応するノードを構成するサブツリー322を指し示す。
【0042】
図3に示すように、(レベル1である)ノード308のArray[m]は、レベル2であるノード(図示せず)に対するポインタを格納し、これにより、セットSは、少なくとも2つの文字長さを有し、エレメントの第1の位置におけるArray[2]に対応する文字を有し、そして、エレメントの第2の位置におけるArray[m]に対応する文字を有する少なくとも1つのエレメントを含む(または、言い換えると、セットSは、エレメントの第1の位置における領域Σの第2の文字、および、エレメントの第2に位置における領域Σのm番目の文字を有する少なくとも1つのエレメントを含む)ことを示す。ノード308のArray[m]は、エレメントの第1の位置におけるArray[2]に対応する文字、および、エレメントの第2の位置におけるArray[m]に対応する文字を有するセットSにおけるエレメントに対応するノードを構成するサブツリー324を指し示す。
【0043】
図3に示されるように、(レベル1である)ノード310のArray[2]は、レベル2であるノード(図示せず)に対するポインタを格納し、これにより、少なくとも2つの文字長さを有し、エレメントの第1の位置におけるArray[m]に対応する文字を有し、エレメントの第2の位置におけるArray[2]に対応する文字を有する少なくとも1つのエレメントを含む(または、言い換えると、セットSは、エレメントの第1の位置における領域Σのm番目の文字、および、エレメントの第2の位置における領域Σの2番目の文字を有する少なくとも1つのエレメントを含む)ことを示す。ノード310のArray[2]は、エレメントの第1の位置におけるArray[m]に対応する文字、および、エレメントの第2の位置におけるArray[2]に対応する文字を有するセットSのエレメントに対応するノードを構成するサブツリー332を指し示す。
【0044】
図3で示されるように、ルートノード302のArray[l]が(図3で「0」で示される)NULLに設定されるので、このことは、セットSがエレメントの第1の位置におけるArray[l]に対応する文字を有する任意のエレメントを含まない(または、言い換えると、セットSは、領域Σの1番目の文字で開始する任意のエレメントを含まない)ことを示す。同様に、ノード308のArray[2]は、NULLに設定され、これにより、セットSがエレメントの第1の位置におけるArray[2]に対応する文字、および、エレメントの第2の位置におけるArray[2]に対応する文字を有する任意のエレメントを含まないことを示す。同様に、ノード310のArray[l]は、NULLに設定され、これにより、セットSがエレメントの第1の位置におけるArray[m]に対応する文字と、エレメントの第2の位置におけるArray[l]に対応する文字との両方を有する任意のエレメントを含まないことを示す。
【0045】
データ構造300が構築される様態の結果として、本発明の実施形態に従って、データ構造300の最大レベル(Lmax)は、セットSにおける最大長さを有するエレメントの長さに等しい。上記のように、レベル「L」(ここで、1≦L≦Lmax)におけるツリー300のノードは、少なくともLの文字を有するセットSのエレメントに対応する。従って、ツリー300におけるレベルLのノードの存在は、セットSが少なくともLの文字を構成する少なくとも1つのエレメントを含むことを示す。さらに、レベルLにおけるノードのアレイメモリ位置Array[i]は、セットSがエレメントにおける(L+1)番目の位置における領域Σのi番目の文字を含む少なくとも1つのエレメントを含む場合、非NULLである。
【0046】
セットSが正確にLの文字を含み(すなわち、エレメントの長さがLである)、かつ、ルートノードから開始する特定のノードに到達するために移動する様々なノードのアレイポインタに対応する文字を含む少なくとも1つのエレメントを含み、文字が、移動したノードに1を加えたレベルで示される位置にある場合、レベルLの特定のノードのメモリ位置304(または、エレメントポインタ304)が設定される。このようなエレメントがセットSに存在しない場合、メモリ位置304は、(図3でゼロで示された)ヌル値に設定され得る。ノードのエレメントポインタ304は、エレメント自身を指し示し得る、あるいは、代わりに特定のエレメントに関するまたは関連する情報を指し示し得る。例えば、各エレメントがリソースに対応するアクセス制御アプリケーションにおいて、特定のエレメントに対応するエレメントポインタは、リソースにアクセスし得るユーザのリストを指し示し得る。第1の検索技術を用いる実施形態に従って、ルートノードのエレメントポインタは、常にヌル値に設定される。
【0047】
例えば、図3で示されるように、ノード308のエレメントポインタ304は、非ヌル値に設定され、セットSのエレメントに関するデータを指し示す。これは、セットSが(L+1)=0+1=1の丁度の文字長さを有するエレメントを含み、文字がArray[2]に対応する領域Σの文字(すなわち、領域Σの文字セットの2番目の文字)であることを示す。同様に、ノード310のエレメントポインタ304は、非ヌル値に設定され、セットSのエレメントに関連するデータを指し示し、これにより、セットSが1つの文字の丁度の長さを有し、文字がArray[m]に対応する領域Σの文字(すなわち、領域Σの文字セットのm番目の文字)であることを示す。
【0048】
図4は、領域Σに属するエレメントを含む特定のセットSのための第1の検索技術を適用する本発明の実施形態に従って構築されたツリーデータ構造400を示す。領域Σに対する文字セットは5つの文字(すなわち、「1」、「2」、「3」、「4」および「5」)から構成されると仮定される。さらに、セットSが以下の6つのエレメントS=(「1」、「123」、「13」、「134」、「21」、「25」)を含むことを想定する。これらの仮定に基づいて構築されたツリーデータ構造は、図4に示される。
【0049】
図4で示されるように、ツリー400の各ノードは、エレメントポインタおよびメモリ位置アレイArray[1:5]を含む。ツリー400は、セットSにおけるエレメント(エレメント「123」および「134」)の最大長さに対応するLmax=3である4つのレベル(レベル0、レベル1、レベル2、レベル3)を有する。例えば、エレメント「123」は、ツリー400のレベル3におけるノード416によって示される。ノード416のエレメントポインタは、エレメント「123」、または、エレメント「123」に関連する情報を指し示す。同様に、ノード404のエレメントポインタは、エレメント「1」を指し示し、ノード410のエレメントポインタは、エレメント「13」を指し示し、ノード418のエレメントポインタは、エレメント「134」を指し示し、ノード412のエレメントポインタは、エレメント「21」を指し示し、そして、ノード414のエレメントポインタは、エレメント「25」を指し示す。
【0050】
図5は、第1の検索技術を適用する本発明の実施形態に従う検索を容易にするデータ構造を構築する方法の高レベルに単純化されたフローチャート500である。図5で示される方法は、コンピュータシステム100、コンピュータシステム100に結合されたハードウェアモジュール、または、それらの組み合わせで実行するソフトウェアモジュールによって実施され得る。図5で示されるフローチャート500は、本発明を組み込んだ実施形態を単に示しており、請求項に記載された本発明の範囲を制限するものではない。当業者は、改変、修正および代替物を認識する。
【0051】
このプロセスは、構築されるべきデータ構造としてルートノードが存在するかしないかを判定することによって開始する(ステップ502)。ルートノードがまだ存在しない場合、新規のルートノードが生成され、かつ、初期化される(ステップ504)。ノード初期化プロセスの一部として、エレメントポインタおよびメモリ位置のアレイを含む全てのメモリ位置は、ヌル(または、ゼロ)値に初期化される。
【0052】
次いで、データ構造おける挿入されるべきセットSのエレメント(または、エレメントを識別する情報)がアクセスされる(ステップ506)。セットSの第1のエレメント(または、セットSの第1のエレメントを識別する情報)は、図5で示されたフローチャートの第1のパス中にアクセスされる。他のエレメント(または、セットSの他のエレメントを識別する情報)は、セットS中の全てのエレメントが処理されるまで次のパス中でアクセスされる。
【0053】
次いで、ポインタ変数「CurrPtr」は、(ポインタ変数がまだ存在しない場合)インスタント化され、ルートノードを指し示すまたは参照するように初期化される(ステップ508)。ポインタ変数CurrPtrは、データ構造を移動させるために用いられ得る。数字変数「i」は、1に初期化される(ステップ510)。この変数は、データ構造において挿入されるべきセットSの各エレメントの様々な文字を移動させるように用いられる。文字変数「c」は、ステップ506においてアクセスされるエレメントのi番目の位置における文字に初期化される(ステップ512)。数字変数「p」は、領域Σに対する文字セットにおける変数cによって格納される文字の位置に初期化される(ステップ514)。例えば、文字セットが英語のアルファベット(例えば、a、b、c、・・・、z)である場合、変数cが文字「a」を格納するなら変数pは1に設定され、変数cが文字「f」を格納するなら変数pは6に設定され、変数cが文字「z」を格納するなら変数pは26に設定される(以下同様)。
【0054】
次いで、CurrPtrによって指し示されたノードのメモリ位置Array[p]は、次いで、メモリ位置がヌル値を格納するかどうかを判定するためにチェックされる(ステップ516)。CurrPtrによって指し示されたノードのArray[p]がヌル値を格納しない(すなわち、データ構造のノードにポインタを格納する)場合、CurrPtrは、CurrPtrによって現在指し示されているノードのArray[p]によって指し示されたノードを指し示すまたは参照するように更新される(ステップ518)。次いで、以下のように、プロセスがステップ526に続く。
【0055】
次いで、CurrPtrによって指し示されたノードのArray[p]がヌル値を格納することをステップ516において判定される場合、新規のノードが生成され、かつ、初期化される(ステップ520)。ノード初期化プロセスの一部として、エレメントポインタおよびメモリ位置のアレイを含む全てのメモリ位置がヌル(またはゼロ)値に初期化される。CurrPtrによって指し示されたノードのメモリ位置Array[p]は、次いで、ステップ520において生成された新規のノードに対する参照またはポインタを格納するように更新される(ステップ522)。CurrPtrはまた、ステップ520で生成されたノードを指し示すまたは参照するように更新される(ステップ524)。次いで、処理は、ステップ526に続く。
【0056】
次いで、ステップ506においてアクセスされたエレメントの全ての文字が処理されるかどうかを判定するようにチェックが行われる(ステップ526)。言い換えると、ステップ506においてアクセスされたエレメントのエンドに到達したかどうかが判定される。エレメントのエンドに到達していない(すなわち、エレメントがまだ1つ以上の処理されていない文字を含む)場合、数字変数iの値は、1つだけ上がる(ステップ528)。次いで、処理は、ステップ512に続く。ここで、処理されているエレメントの次の文字がアクセスされる。エレメントのエンドに到達する(すなわち、エレメントの全ての文字が処理される)場合、CurrPtrによって指し示されたノードのエレメントポインタは、ステップ506でアクセスされたエレメントを指し示すように更新される(ステップ530)。あるいは、エレメントポインタは、ステップ506においてアクセスされたエレメントと関連する情報を指し得る。
【0057】
次いで、セットSにおける全てのエレメントが処理されているかどうかを判定するためにチェックが行われる(ステップ532)。セットSの全てのエレメントが処理されていない場合、処理は、ステップ506に続く。ここで、セットSの次の処理されていないエレメントがアクセスされる。しかし、セットSにおける全てのエレメントが処理されたことが判定された場合、図5で示されたプロセスは、終了する。
【0058】
図5で示されたフローチャートに従って構築されたデータ構造は、次いで、第1の検索技術に従う検索を容易にするために用いられ得る。このデータ構造は、格納サブシステムに格納され得る。この格納サブシステムから、データ構造が検索演算中にアクセスされ得る。本発明の教示によると、データ構造の構造は、エレメントが挿入される順序に独立しており、挿入されているエレメント、および、エレメントの文字の長さにのみ依存している。データ構造のレベルの数は、セットSにおける最長エレメントの長さに依存している。概して、データ構造のレベルの数は、Zの値に依存している(ここで、「Z」は、領域Σにおけるエレメントの最大の可能な長さ(結果として、セットSにおけるエレメントの最大の可能な長さ)である)。例えば、セットSが長さZのエレメントを含む場合、第1の検索技術に従って構築されたデータ構造は、Lmax=Zである全体で(Z+1)レベルを有する。データ構造は、任意のレベルにおいて格納された二重の情報が無いので、スペースに効率的である。
【0059】
データ構造の最大サイズが固定され、小さく、そして、セットSにおけるエレメントの数に独立している。図5に示されたフローチャートに従って生成されたデータ構造(例えば、図3および図4で示されたデータ構造)に対して、用いられたメモリは、ビットアレイ(Array[])ポインタに対してZm(m+1)であり、エレメントポインタに対して2Zmバイトである(ここで、「Z」は、領域Σにおけるエレメントの最大可能長さであり、「m」は、領域Σに対する文字セットにおける文字長さである)。例として、領域Σにおけるエレメントの最大長さが255である場合(例えば、領域Σがコンピュータベースのファイルシステムにおけるストリングに対応する場合)、そして、文字セットのサイズが91である場合(アルファベットの文字である場合)、データ構造に必要とされるメモリは、約300KBである。データ構造の効率的表示が与えられたために、検索要求の効率的処理に対して複数の位置(例えば、ウェブサーバ、プロキシサーバ等)でキャッシュされ得る。
【0060】
図6は、セットSが第1の検索技術を適用する本発明の実施形態に従う検索クエリエレメントkを含むかどうかを判定する方法の高レベルに単純化されたフローチャート600である。図6で示された方法は、コンピュータシステム100、コンピュータシステム100に結合されたハードウェアモジュール、または、それらの組み合わせ上で実行するソフトウェアモジュールによって実施され得る。図6で示されたフローチャート600は、本発明を組み込んだ実施形態を単に示すのみであり、特許請求の範囲に記載されたような本発明の範囲を制限しない。当業者は、改変、修正および代替物を認識する。
【0061】
図6で示されるように、セットSが検索クエリエレメントkを含むかどうかを判定するための検索要求をコンピュータシステム100が受け取るとき、処理が初期化され得る(ステップ602)。上記されたように、検索要求は、コンピュータシステム100に結合された1つ以上の入力デバイスを用いるコンピュータシステム100のユーザによって特定され得る。あるいは、検索クエリは、また、コンピュータシステム100上で実行するプロセスから、コンピュータシステム100に結合されたデバイスまたはシステム(例えば、ネットワークインタフェース106を介してコンピュータシステム100に結合されたシステム)から、および/または、他のシステムまたはプロセスから構成され得る、または、受け取られる。
【0062】
次いで、コンピュータシステム100は、処理用に用いられるべき変数を初期化する。次いで、ポインタ変数「CurrPtr」は、(ポインタ変数が存在しない場合)インスタント化され、(図5によって構築された)セットSのために構築されたデータ構造のルートノードを指し示すまたは参照して、検索用に用いられるように初期化される(ステップ604)。データ構造は、検索を実行するコンピュータシステム100にアクセス可能なメモリからアクセスされ得る。ポインタ変数CurrPtrは、データ構造を移動するために用いられる。数字カウンタ変数「i」は、次いで、1に初期化される(ステップ606)。この変数は、クエリエレメントkの様々な特徴を移動するために用いられる。文字変数「c」は、次いで、クエリエレメントkのi番目の位置における文字に初期化される(ステップ608)。フローチャートを最初に通過する間、変数cは、エレメントkの第1の文字に初期化される。数字変数「p」は、次いで、領域Σに対する文字セットにおける変数cによって格納された文字の位置に初期化される(ステップ610)。例えば、文字セットが英語のアルファベット(例えば、a、b、c、・・・、z)のセットである場合、変数cが文字「a」を格納すると変数pは1に設定され、変数cが文字「f」を格納すると変数pは6に設定され、変数cが文字「z」を格納すると変数pは26に設定される(以下同様)。
【0063】
CurrPtrによって指し示されたノードのメモリ位置Array[p]は、次いで、メモリ位置がヌル値を格納しているかどうかを判定するためにチェックされる(ステップ612)。CurrPtrによって指し示されたノードのArray[p]がヌル値を格納する場合、Array[p]は、セットSがエレメントkを含まないことを示す。次いで、セットSがクエリエレメントkを含まないことを示す検索要求のソースに、信号が出力され得る(ステップ614)。他の適切な行動は、また、ステップ614において実施され得る。
【0064】
CurrPtrによって指し示されるノードのArray[p]が非ヌル値を格納する(すなわち、データ構造における別のノードに対するポインタまたは参照を格納する)ことがステップ612において判定される場合、CurrPtrは、CurrPtrによって現在示されているノードのArray[p]によって示されているノードを指し示すまたは参照するように更新される(ステップ616)。次いで、本発明は、クエリエレメントkの全ての文字が処理されているかどうかをチェックする(ステップ618)。言い換えると、本発明は、クエリエレメントkのエンドに到達しているかどうかを判定する。クエリエレメントkのエンドに到達していない(すなわち、クエリエレメントkがまだ一つ以上の未処理の文字を含んでいる)場合、数字変数iの値は、1つ加えられる(ステップ620)。次いで、プロセスは、ステップ608に続く。ここで、クエリエレメントkの次の文字がアクセスされる。
【0065】
クエリエレメントkのエンドに到達したことがステップ618で判定される(すなわち、クエリエレメントkの全ての文字が処理された)場合、CurrPtrによって指し示されたノードのエレメントポインタは、エレメントポインタが非ヌル値を格納するかどうかを理解するためにチェックされる(ステップ622)。あるいは、CurrPtrによって指し示されたノードのエレメントポインタは、エレメントポインタがエレメントkを指し示す、または、エレメントkに関連する情報を指し示すかどうかを理解するためにチェックされる。エレメントポインタがヌル値を格納する場合、エレメントポインタは、セットSがエレメントkを含まず、処理がステップ614に続くことを示す。
【0066】
しかし、CurrPtrによって指し示されたノードのエレメントポインタが非ヌル値を格納する(エレメント自身、または、エレメントに関連する情報を指し示し得る)ことがステップ622において判定される場合、エレメントポインタは、セットSがクエリエレメントkを含むことを示す。次いで、信号は、セットSがクエリエレメントkを含むことを示す検索要求のソースに出力され得る(ステップ624)。エレメントポインタによって指し示された情報を用い得る他の適切なアクションがまた、ステップ624で実施され得る。
【0067】
上記されたように、図6で示された方法は、第1の検索技術を適用する本発明の実施形態に従うクエリエレメントを検索するように用いられ得る。例えば、図6で示された方法は、図4で示されたツリー400のクエリエレメント「234」を検索するように適用され得る。処理の開始して、エレメント「234」がセットS={「1」、「123」、「21」、「13」、「134」、「21」、「25」}にあるかどうかを判定するように検索を要求するステップ602において、クエリ要求が受け取られ得る。ステップ604を通して、CurrPtrは、ルートノード402に初期化される。変数iは、(ステップ606を通して)1に設定される。変数cは、クエリエレメント「234」の第1の文字である「2」に初期化される。変数pは、2(領域Σに対する文字セットにおける文字「2」の位置)に初期化される。次いで、本発明は、ノード402のArray[2]がNULLであるかどうかをチェックする。ノード402のArray[2]が(図4で示されるような)NULLではないので、CurrPtrは、ステップ616を通してノード406(すなわち、ノード402のArray[2]によって指し示されたノード)を指し示すように設定される。次いで、エレメント「234」のエンドに到達したかどうかを理解するために、(ステップ618を通して)チェックが行われる。エンドに到達していないので、変数iの値は、1を加えて2となり、処理はステップ608に続く。ここで、変数cは、クエリエレメント「234」の第2の文字である「3」に設定される。変数pは、3(領域Σに対する文字セットにおける文字「3」の位置)に初期化される。次いで、本発明は、ノード406のArray[3]がNULLであるかどうかをチェックする。(図4で示されるように)ノード402のArray[2]がNULLであるので、Array[2]は、ストリング「234」がセットSに含まれないことを示す。次いで、(ステップ614を通して)セットSがクエリエレメント「234」を含まないことを示す検索要求のソースに信号が出力され得る。上記されたように、(ビットアレイArray[]の値をチェックする)2つの文字のみの比較は、エレメント「234」がセットSに含まれるかどうかを判定するために必要とされる。
【0068】
別の実施例として、検索クエリエレメントは、ステップ602において、検索クエリで受信され得る「12」であると考える。ステップ604により、CurrPtrがルートノード402に初期化される。変数iは1に設定される(ステップ606により)。変数cは、クエリエレメント「12」の第1文字である「1」に初期化される。変数pは1に初期化される(領域Σに対する文字セットにおける文字「1」の位置)。次いで、本発明は、ノード402のArray[1]がNULLであるか否かをチェックする。(図4に示されるように)ノード402のArray[1]がNULLでないので、ステップ616により、CurrPtrがノード404(すなわちノード402のArray[1]によって指し示されるノード)を指し示すように設定される。(ステップ618により)次いでエレメント「12」の終わりが達されるか否かを見るためにチェックがされる。終わりが達されていないので、変数iの値が1だけ増やされ2になり、処理がステップ608に回帰され、これにより変数cは、クエリエレメント「12」の第2の文字である「2」に設定される。変数pは2に初期化される(領域Σに対する文字セットにおける文字「2」の位置)。次いで、本発明は、ノード404のArray[2]がNULLであるか否かをチェックする。(図4に示されるように)ノード404のArray[2]がNULLでないので、ステップ616により、CurrPtrがノード408(すなわちノード404のArray[2]によって指し示されるノード)を指し示すように設定される。次いで、(ステップ618によって)エレメント「12」の終わりが達されるか否かを見るためにチェックされる。終わりが達されるので、本発明は、(ステップ622によって)ノード408のエレメントポインタがヌル値に設定されるか否かをチェックする。(図4に示されるように)ノード408のエレメントポインタがNULLに設定されるので、このポインタは、ストリング「12」がセットSに含まれないことを示す。次いで、信号は検索リクエストのソースに出力され得る。(ステップ614によって)セットSがクエリエレメント「12」を含まないことを示す。上述のように、エレメント「12」がセットSに含まれるか否かを決定するために、二つの文字比較のみが必要とされる。
【0069】
第3の例として、検索クエリが「134」であると仮定する。フローチャート600に説明されるように、処理がルートノード402で開始する。次いで、ルートノードおよび次のノードのアレイポインタは、クエリエレメントがセットSにあるか否かを決定するために移動される。例えば、エレメントクエリ「134」について、ルートノード402のArray[1]がノード404に達するように移動される。次いで、ノード404のArray[3]がノード410に達するように移動される。次いで、ノード410のArray[4]がノード418に達するように移動される。次いで、本発明は、(ステップ622によって)ノード418のエレメントポインタがNULLに設定されるか否かをチェックする。ノード418のエレメントポインタがNULLに設定されていないので、このポインタはエレメント「134」がセットSに含まれることを示す。信号が(ステップ624によって)セットSがクエリエレメント「134」を含むことを示しす検索リクエストのソースに出力され得る。次いで、本発明は適切なアクションを実行し得る。上記で説明されたように、三つの比較のみが、エレメント「134」がセットSに含まれるか否かを決定するために必要とされる。
【0070】
概して、第1の検索技術によると、所与の検索クエリエレメントkに「klength」個の文字がある場合、図6に示される方法を適用することにより、kがセットSに含まれるか否かを決定するために、せいぜい「klength」個の文字比較を行う。最悪のケースシナリオにおいて、klengthがZに等しい(ここで「Z」は領域Σのエレメントの可能な最大な長さである)。従って、せいぜい一つのエレメント比較が必要とされる。従って、検索を実行するために必要とされる比較の数はクエリエレメントの長さに比例する。従って、上記で説明された第1の検索技術は、特定の検索クエリエレメントが特定のデータセットにあるか否かを決定するために必要とされる比較の数に関して最適化される。第1の検索技術は、メモリ内検索について高度に最適化される。比較の数はセットSのサイズに依存していない。所与のクエリエレメントがデータ構造内に存在しない(すなわちセットSのメンバでない)場合、(アレイポインタの)数ビット比較のみがエレメントがセットSにないことを決定するために必要とされる。これは、複数のエレメント比較を必要とし得る従来の検索技術と対照的である。
【0071】
第1の検索技術の教示に従って構築されたデータ構造はまた、エレメントの前置きマッチングに用いられ得る。前置きマッチングは、所与の(またはユーザ特定の)クエリサブストリングで始まる全てのストリングを見出すプロセスを参照する。例えば、セットSがURIを表示するストリングを含む場合、ユーザは、(クエリを表示する)「http://www.arcot.」で始まる全てのURIを決定することを望み得る。これは、第1の技術に従って構築されたデータ構造を用いて実行され得る。上述された態様で、クエリに含まれた文字に基づいて、ルートノードで始まるデータ構造が特定レベル「L」で特定のノードに到達するように移動される。特定のノードでルーティングされた全てのサブツリーは、「http://www.arcot.」で始まるセットSのエレメント(または任意の他のクエリストリング)を表示する。例えば、図3に示されるように、サブツリー322は、エレメントの第1の位置にあるArray[2]に対応する文字とエレメントの第2の位置にあるArray[1]に対応する文字とを有する、セットSのエレメントに対応する。同様に、サブツリー324は、エレメントの第1の位置にあるArray[2]に対応する文字とエレメントの第2の位置にあるArray[m]に対応する文字とを有する、セットSのエレメントに対応する。サブツリー332は、エレメントの第1の位置にあるArray[m]に対応する文字とエレメントの第2の位置にあるArray[2]に対応する文字とを有する、セットSのエレメントに対応する。従って、第1の技術に従って構築されたデータ構造は前置きマッチングを容易にする。
【0072】
第1の検索技術はまた、ツリーデータ構造にエレメントを挿入する演算(「インサート」演算と呼ばれる)と、ツリーデータ構造からエレメントを削除する演算(「デリート」演算と呼ばれる)を容易にする。「インサート」演算は、新しいエレメントがセットSに追加されるときに必要とされ得、一方で、「デリート」演算は、エレメントがセットSから除去されるときに必要とされ得る。
【0073】
「インサート」演算は、本発明の実施形態に従う以下の態様で達成され得る。新しいエレメント「R」がセットSに挿入されると仮定する。ここで、R=c1c2...cq、いくつかのq≦Z(「Z」は領域Σのエレメントの最大可能な長さ)、およびci∈Σ,1≦i≦q。挿入演算は、図5に示されるフローチャートを用いて実行され得る(一つのエレメントのみが挿入される予定の場合、ステップ532が必要とされない)。例えば、ツリーのルートノードで始まると、データ構造ツリーは、アレイポインタArray[c1],Array[c2],Array[c3],...,Array[cq]を用いて横切られ、特定のノードに達する。次いで、特定のノードのエレメントポインタが新しいエレメント「R」または新しい「R」に対応する情報に向けられる。1以上の新しい中間ノードが挿入を達するように作製される必要がある。
【0074】
「デリート」演算は、本発明の1実施形態に従う以下の態様で達成され得る。(上記で挿入された)エレメント「R」は、ここでセットSから削除されると仮定する。ツリーデータ構造からエレメントを削除するために、ツリーのルートノードで始まり、アレイポインタArray[c1],Array[c2],Array[c3],...,Array[cq]が特定のノードに達するように移動される。特定のノードのエレメントポインタが削除されるべきエレメントを指し示す。次いで、エレメントポインタは、NULLに設定され、セットSからエレメント「R」の削除を完了する。
【0075】
第1の検索技術を適用する本発明の1実施形態に従って、「インサート」および「デリート」演算がO(Rlength)時間をとる。ここで「Rlength」とは挿入または削除されるべきエレメントの長さである(すなわちRlength=|R|)。さらに、インサートおよびデリート演算が並列に実行され得る。
【0076】
従って、上述のツリーデータ構造等のデータ構造を用いて、「サーチ」,「インサート」,および「デリート」演算は、クエリエレメントまたは挿入または削除されるべきエレメント内の文字の数に比例する時間で実行され得る。特に、所与のクエリエレメントkが「klength」個の文字から構成される場合、演算は、せいぜい「klength」個の文字比較を用いて実行され得る。
【0077】
上述の第1の検索技術はまた、セットSが1エレメントの複数のコピー(例えば二重、三重等)を含む状況で用いられ得る。このシナリオにおいて、複数のコピーを有するエレメントに対応するノードのエレメントポインタは、エレメントの複数のコピーに対応する構造のリンクされたリストを指し示し得るか、または照会し得る。上記データ構造によって用いられるメモリはO(D)ノードである。ここでDはセットSの全てのエレメントにある文字の総計、すなわち
【0078】
【数1】
である。従って、用いられるメモリはO(Dm)バイトである。このメモリ限界は、以下に説明される技術を用いてさらに低減され得る。
【0079】
メモリ要件を低減するために、ツリーデータ構造が用いられ得る。ツリーのそれぞれのノードに対するArray[]ポインタのアレイは、(2−3ツリー、赤−黒ツリー(red−black tree)等)バランスツリー(balanced tree)と置き換えられる。「ポインタのアレイ」ツリーの場合において、ツリーのそれぞれのノードに必要とされるメモリがmであった。他方、メモリを節約する目的で改良されたバージョンのそれぞれのノードに必要とされるメモリがO(q)に過ぎない。ここでqはそのノードの非NULLポインタの数である。従って、全ツリーに必要とされるメモリはO(D)バイトだけである。
【0080】
また、前回のケースでは、ノードの任意のポインタを得ることはO(1)回で行われ得る。改変された「メモリセーバー」バージョンでは、それぞれのポインタアクセスはO(logq)回必要である。ここでqはそのノードの非NULLポインタの数である。従って、上記に基づいて、本発明の実施形態に従って、ディクショナリーは、それぞれの演算がO(H log m)回必要であるように実施され得る。ここで「H」は検索クエリエレメントの文字の数であり、m=|Σ|である。本発明の本実施形態に従って必要とされるメモリはO(D)バイトだけである。ここで
【0081】
【数2】
である。
【0082】
(log m)の典型的な値は5または6である。従って、「メモリセーバー」技術は、(最悪のケース)、従来の検索技術の平均ケース性能と非常に競合的な性能を有する。
【0083】
(第2の検索技術)
このセクションは、効率の高い態様で検索を実行する一方で、検索を実行するために必要とされるメモリリソースを最小限にする第2の検索技術を説明する。上述された第1の検索技術に関して、以下で説明される第2の検索技術は、任意の領域Σからの検索クエリエレメントk(すなわちk∈Σ)が、「n」個のエレメント「k1,k2,...kn」(すなわちX=(k1,k2,...,kn))を含むセットSのメンバ(すなわちk∈Σである場合)であるか否かを決定するように用いられ得る。領域Σのそれぞれのエレメント(次には、セットSのそれぞれのエレメント)は、領域Σの特定の文字セットからの1以上の文字を含み得る。
【0084】
第2の検索技術は、図1に示されたコンピュータシステム100等のコンピュータシステムで具体化され得る。図1が本発明を組み込んでいる実施形態の例示に過ぎず、請求項に記載された本発明の範囲を限定しないことは明らかであるべきである。当業者は、他の変更、改変および代替を理解する。
【0085】
上述のように、第2の検索技術の処理は図2に示される二つのフェーズを含む。第1フェーズの間、データ構造または他の同様のメモリ構造が生成され、第2フェーズで実行される検索演算を容易にする。第1フェーズの間に生成されたデータ構造は検索されるべきデータセットに含まれるエレメントに基づいている(すなわちデータ構造はセットSのエレメントに基づいて構築される)。第2の検索技術を実施する本発明の実施形態に従って、第1フェーズの間、コンピュータシステム100はセットSのエレメントを識別する情報を受信し得る(ステップ202)。エレメント自体がコンピュータシステム100のメモリサブシステムまたはコンピュータシステム100にアクセス可能ないくつかのメモリに格納され得る。次いで、ステップ202で受信された情報に基づいて、コンピュータシステム100は、データ構造(任意の他のメモリストレージ構造)を構築し得、第2フェーズで実行される検索を容易にし得る(ステップ204)。
【0086】
データ構造の様々な異なる種類は、検索演算を容易にするために用いられ得る。特定のデータ構造が以下で説明されるが、第2の検索技術の範囲はそのデータ構造に制限されない。1実施形態においてデータ構造がコンピュータシステム100によって生成される一方で、本発明の別の実施形態では、セットSのエレメントに関連されるデータ構造カプセル化情報が別のコンピュータシステムによって構築され得、コンピュータシステム100に提供され得る(例えば、データ構造は、別のシステムまたはデバイスによって生成され得、コンピュータシステム100にアクセス可能なメモリに格納され得る)。次いで、コンピュータシステム100は、第2の検索技術に従って検索を実行するように格納されたデータ構造にアクセスし得る。
【0087】
セットSのエレメントに関連する情報を格納しているデータ構造が第1フェーズに従って構築された後、次いで、データ構造は、第2の検索技術を用いて、第2フェーズで実行される検索を容易にするために、用いられる。本発明の実施形態に従って、第2フェーズの間、コンピュータシステム100は、検索クエリ「k」がセットSに含まれるか否かを決定するために検索リクエストを受信し得る(ステップ206)。検索クエリは、コンピュータシステム100に接続される一つ以上の入力デバイスを用いてコンピュータシステム100のユーザによって特定され得る。あるいは、検索クエリはまた、構成され得、コンピュータシステムで実行するプロセスから、コンピュータシステム100に接続されたデバイスまたはシステム(例えばネットワークインターフェース106を介してコンピュータシステム100に接続されたシステム)から、および/または他のシステムまたはプロセスから、受信され得る。
【0088】
次いで、第2の検索技術に従って、ステップ204で生成されたデータ構造は、ステップ206で受信された検索リクエストにて識別されたエレメントkがセットSに含まれるか否かを決定する(ステップ208)ために用いられる。次いで、コンピュータシステム100は、エレメントkがセットSに見出されたか否かを示す(ステップ210)信号を出力し得る。コンピュータシステム100はまた、ステップ208の結果に基づいて1以上のアクションを実行するように構成され得る。
【0089】
図7は、第2の検索技術を適用する本発明の実施形態に従って検索演算を容易にするために、(図2のステップ204で)構築され得るデータ構造700を示す。図7に示されたデータ構造700は、本発明を組み込んでいる実施形態の例示に過ぎず、請求項に記載された発明の範囲を限定しない。当業者は、変更、改変および代替を認識する。
【0090】
図7に示されるように、データ構造700は、Z個のノードまたはメモリ構造(702−1〜702−Z)を含む。Zは領域Σのエレメントの最大可能な長さである。それぞれのノード702は、セットSのエレメント内の特定の位置にある文字に対応する。例えば、第1のノード702−1はエレメントの第1の位置にある文字に対応し、第2のノード702−2はエレメントの第2の位置にある文字に対応し、第3のノード702−3はエレメントの第3の位置にある文字に対応するなど。従って、Z番目のノード702−ZがエレメントのZ番目の位置にある文字に対応する。
【0091】
それぞれのノード702はmスロット(704−1〜704−m)を含む。mは領域Σの文字セットにある文字の数である。それぞれのスロット704は領域Σの文字セット内の文字に対応する。例えば、第1のスロット704−1は領域Σの文字セットの第1の文字に対応し、第2のスロット704−2は領域Σの文字セットの第2の文字に対応し、第3のスロット704−3は領域Σの文字セットの第3の文字に対応するなど。例えば、領域Σの文字セットが英語のアルファベット(例えばa,b,c,...,z)から構成される場合、m=26。本実施形態において、それぞれのノードは26個のスロットから構成される。第1のスロット704−1は文字「a」に対応し、第1のスロット704−2は文字「b」に対応し、第1のスロット704−3は文字「c」に対応するなど。
【0092】
図7に示される実施形態において、それぞれのスロット704は、順に、(m+1)ビット位置を含むビットアレイ706(Array[]として参照される)を含む。mは領域Σの文字セット内の文字の数である。それぞれのビットアレイArray[]706の最初のmビットは領域Σの文字セットの文字に対応する。例えば、Array[1]は領域Σの文字セットの第1の文字に対応し、Array[2]は領域Σの文字セットの第2の文字に対応し、Array[3]は領域Σの文字セットの第3の文字に対応するなど。例えば、領域Σの文字セットが英語のアルファベット(例えばa,b,c,...,z)から構成される場合、m=26。本実施形態において、ビットアレイArray[]は、27ビットを含む。Array[1]は文字「a」に対応し、Array[2]は文字「b」に対応し、Array[3]は文字「c」に対応するなど。それぞれのビットアレイの最後のビット(すなわち、Array[m+1])は、エレメントの終わりを示すために用いられる。
【0093】
本発明の実施形態に従って、それぞれのノードのそれぞれのスロットはまた、セットSの(単数または複数の)エレメントに関連する情報を格納し得るメモリ位置708を含む。メモリ位置708は、ポインタまたはリファレンスをテーブルまたはセットSの(複数の)エレメントに対する情報を格納する他のメモリ構造に格納し得る。あるいは、メモリ位置708はヌル(またはゼロ)値を格納し得る。メモリ位置708はセットSの1以上のエレメントに関連する情報を格納または指し示すので、メモリ位置708は、本明細書後半で、特定のノードのスロットの「エレメントポインタ」と呼ばれる。
【0094】
次の表記は第2の検索技術を説明する目的で用いられる。図7に示されたデータ構造は、DS[1:Z][1:m]によって示される。詳細には、DS[x][y]は、データ構造700のx番目のノードにおけるy番目のスロット(すなわちスロットが領域Σの第yの文字に対応する)を示す。
【0095】
データ構造を構築するために、データ構造700内の全てのノードに対する全てのスロットのビットアレイは、ヌル(またはゼロ)値に初期化される。セットSからエレメントR(いくつかのq≦Zに対してR=c1c2...cqで、「Z」は領域Σのエレメントの最大可能な長さであり、ci∈Σ,1≦i≦qである)を挿入するために、スロットDS[1][c1に対応するスロット]のArray[文字セットのc2の位置](すなわち文字c2に対応するビット)内のビットが非ヌル値に設定され(例えば1に設定され)、スロットDS[2][スロットはc2に対応する]のArray[文字セットのc3の位置](すなわち文字c3に対応するビット)内のビットが非ヌル値に設定され、...スロットDS[q−1][スロットはcq−1に対応する]のArray[文字セットのcqの位置](すなわちビットは文字cqに対応する)内のビットが非ヌル値に設定され、スロットDS[q][スロットはcqに対応する]のArray[m+1]内のビットが非null値に設定される。スロットDS[q][cqに対応するスロット]のエレメントポインタは更新され、エレメントRに関連する情報を指し示すか、エレメントRに関連する情報を照会する。
【0096】
図8は、第2の検索技術を適用して本発明の実施形態に従って検索を容易にするための、データ構造を構築する方法の高度に単純化されたフローチャート800である。図8に示された方法は、コンピュータシステム100、コンピュータシステム100に接続されたハードウェアモジュールまたはこれらの組み合わせ上で実行するソフトウェアモジュールによって実行され得る。図8に示されたフローチャート800は、本発明を組み込む実施形態の単なる例示であり、請求項に記載された本発明の範囲を限定しない。当業者は、変更、改変および代替を認識する。
【0097】
処理は、m(mは領域Σの文字セットの文字の数である)個のスロットを含むZ(Zは領域Σのエレメントの最大の長さである)個のノードを生成することによって初期化され、それぞれのスロットは、[m+1]個のメモリ位置およびエレメントポインタを含むビットアレイArray[]を含む(ステップ802)。ステップ802の一部として、ビットアレイ位置およびエレメントポインタがヌル(またはゼロ)値に全て初期化される。
【0098】
数値変数「m」は、領域Σの文字セットの文字の数に設定される(ステップ804)。次いで、データ構造に挿入されるべきセットSのエレメント(またはエレメントを識別する情報)がアクセスされる(ステップ806)。セットSの第1のエレメントは、図8に示されたフローチャートの第1のパスの間にアクセスされる。セットSの他のエレメント(または、他のエレメントを識別する情報)は、セットSの全エレメントが処理されるまでの次のパスの間にアクセスされる。
【0099】
次いで、数値変数「q」は、ステップ806においてアクセスされるエレメントの長さ(すなわちエレメント内の文字数)である(ステップ808)。次いで、カウンタ変数「i」が1に初期化される(ステップ810)。この変数は、データ構造に挿入されるべきエレメントの様々な文字を移動するように用いられる。次いで、文字変数「c1」は、ステップ806においてアクセスされるエレメントのi番目の位置にある文字に初期化される(ステップ812)。次いで、数値変数「p1」は、領域Σの文字セットに変数c1に格納される文字の位置に初期化される(ステップ814)。例えば、文字セットが英語のアルファベットのセットである場合、次いで、変数c1が文字「a」で格納される場合、変数p1は1に設定され、次いで、変数c1が「f」で格納される場合、変数p1は6に設定され、変数c1が文字「z」で格納される場合、変数p1が26に設定されるなど。
【0100】
変数iに格納された値がqの値に等しいか否かを決定するためにチェックが為される(ステップ816)。これは、ステップ806でアクセスされるエレメントの終わり(すなわちエレメントの最後の文字)が到達されたか否かを決定するために為される。iがqに等しいことがステップ816で決定される(すなわちエレメントの終わりが到達される)場合、スロットDS[i][pl]のArray[m+1]が非ヌルに設定される(ステップ818)。スロットDS[i][pl]のエレメントポインタがステップ806でアクセスされたエレメントまたはステップ806にてアクセスされるエレメントに関連する情報を指し示すか、または照会するように設定される(ステップ820)。次いで、本発明は、セットSの全てのエレメントが処理されたか否かをチェックする(ステップ822)。セットSの全てのエレメントが処理されていない場合、処理がステップ806で続行し、セットSの次の処理されていないエレメントがアクセスされる。しかし、セットSの全てのエレメントが処理された場合、図8に示されたプロセスは終了する。
【0101】
iがqに等しくないとステップ816で決定される(すなわちステップ806でアクセスされるエレメントの終わりが到達されていない)場合、文字変数「c2」がステップ806でアクセスされたエレメントの(i+1)番目の位置の文字に設定される(ステップ824)。次いで、数値変数「p2」は、領域Σの文字セット内の変数c2によって格納された文字の位置に設定される(ステップ826)。次いで、スロットDS[i][p1]のArrayビットArray[p2]が非ヌル値に設定される(ステップ828)。次いで、変数iの値が1だけ増やされる(ステップ830)。次いで、変数c1は、変数c2に格納された文字に設定される(ステップ832)。変数p1は、変数p2の値に設定される(ステップ834)。次いで、処理が上述のようにステップ816で続行する。
【0102】
次いで、図8に示されたフローチャートに従って構築されたデータ構造は、第2の検索技術を適用することによって検索を容易にするために用いられ得る。データ構造は、ストレージサブシステムに格納され得る。データ構造は検索演算の間、ストレージサブシステムからアクセスされ得る。本発明の教示に従って、図8に示されたフローチャートに従って構築されたデータ構造は、エレメントが挿入される順番と無関係であり、挿入されるべきエレメント、領域Σの文字セットの文字の数(「m」)および領域Σのエレメントの最大可能な長さ(「z」)のみに依存する。データ構造は、二重の情報が任意のノードに格納されないように効率の高い空間である。
【0103】
データ構造の最大サイズは固定され、小さく、セットSのエレメントの数と独立である。図7に示されるデータ構造に関して、用いられるメモリは、ビットアレイポインタに対してZm(m+1)であり、エレメントポインタに対して2Zmバイトである(「Z」は領域Σの最大可能な長さであり、「m」が領域Σの文字セットの文字の数である)。例として、領域Σのエレメントの最大長さが255であり(例えば、領域Σがコンピュータベースのファイルシステム内のストリングに対応する場合)、文字セットのサイズが91である場合、データ構造に必要とされるメモリは約300KBである。データ構造の効率の高い表示が与えられると、データ構造は、検索リクエストの効率の高い処理のために、複数の位置(例えば、ウェブサーバ、プロキシサーバ等)でキャッシュされ得る。
【0104】
図9は、本発明の実施形態に従って、ドメインΣに属するエレメントを含む特定のセットSに対する第二の検索技術の教示に従って構築されたデータ構造900を示す。図9で示された実施形態に関して、ドメインΣに対する文字のセットは、5つの文字、すなわち「1」、「2」、「3」、「4」および「5」からなり、ドメインΣにおけるエレメントの最大の長さが4であることが仮定される。さらに、セットSは、続く8エレメントS=(「1」、「123」、「13」、「21」、「134」、「4321」、「25」、「3421」)を含むことが仮定される。
【0105】
図9に示されるように、同じ長さおよび同じ最後の文字を有するエレメントは、同じエレメントポインタにマッピングされる。例えば、図9に示されるようにエレメント「4321」および「3421」は、同じエレメントポインタ902にマッピングされる。本発明の一実施形態によると、エレメントは、エレメントポインタ902によって指し示されたテーブル、リンクされたリストまたは他のメモリ構造に格納され得る。
【0106】
図8において示されたフローチャートに従って構築されたデータ構造は、次いで、特定のクエリエレメントkがセットSのエレメントであるかどうかを判定するために使用され得る。ここで、kは、任意のq≦Zに対して(ここでZはドメインΣにおけるエレメントの可能な限りの最大の長さである。)k=c1c2...cqであり、ci∈Σ、1≦i≦qである。本発明の一実施形態によれば、検索はビットアレイにおける次のビットがノンヌル値である場合、照合によって実行され得る。非ヌル値は、その命令において、スロットDS[q][cqに対応するSlot]のArray[m+1]、スロットDS[q−1][cq−1に対応するSlot]のArray[文字のセットにおけるcqの位置](すなわち、文字cqに対応するビット)...、スロットDS[2][c2に対応するSlot]のArray[文字セットにおけるc3の位置](すなわち、文字c3に対応するビット)およびスロットDS[1][c1に対応するスロット]のArray[文字のセットにおけるc2の位置](すなわち、文字c2に対応するビット)。検索が任意のこのビットにおいて失敗する場合(すなわち、任意のビットがヌル値にセットされる場合)、クエリエレメントkは、セットSの成分ではないことが判定され得る。次いで、上記のビットの全てが設定される場合、クエリエレメントkはセットSに含まれ得る事が示される。次いで、スロットDS[q][cqに対応するSlot]のエレメントポインタは、エレメントkまたはエレメントkに関連のある情報に指し示すかどうかを判定するために使用される。エレメントポインタが、一つ以上のエレメントを含むテーブルまたはリンクされたリスト(例えば、クエリエレメントkとして同じ長さおよび同じ最後の文字を有するエレメント)に指し示される場合、テーブルまたはリンクされたリストは、次いで、エレメントkがセットSのエレメントであるかどうかを判定するために検索され得る。
【0107】
図10は、セットSが第二の検索技術に適用される本発明の一実施形態に従った検索クエリエレメントkを含むかどうかを判定する方法の高レベルで簡易化されたフローチャート1000である。図10において示された方法は、コンピュータシステム100上で実行されるソフトウェアモジュール、コンピュータシステム100に接続されたハードウェアモジュールまたはその組み合わせによって実行され得る。図10において示されたフローチャート1000は、本発明を援用する一実施形態の単なる図であり、請求項において列挙されたような本発明の範囲を限定しない。ある当業者は、変形、改良、代替を理解する。
【0108】
図10に示されたように、処理は、セットSが検索クエリエレメントkを含むかどうか判定するためにコンピュータシステム100が検索要求を受け取る時に初期化される(ステップ1002)。前に図示したように、検索要求は、コンピュータシステム100に接続された一つ以上の入力デバイスを使用してコンピュータシステム100のユーザによって指定され得る。検索クエリはまた、コンピュータシステム上で実行されるプロセスから、コンピュータシステム100接続されるデバイスまたはシステム(例えば、ネットワークインターフェース106を介するコンピュータシステム100に接続されているシステム)から、および/または他のシステムまたはプロセスから構成され受け取られ得る。
【0109】
数値変数「m」は、次いで、ドメインΣに対する文字セット内の文字の数に設定される(ステップ1004)。他の数値変数「q」は、クエリエレメントkの長さに(すなわち、クエリエレメントkにおける文字の数に)初期化される(ステップ1006)。数値変数「i」は、変数qによって格納される値に設定される(ステップ1008)。この変数は、クエリエレメントの種々の文字を移動するために使用される。
【0110】
次いで、文字変数「cl」は、クエリエレメントkのi番目の位置内の文字に初期化される(ステップ1010)。次いで、数値変数「pl」は、ドメインΣに対する文字設定において変数clによって格納された文字の位置に初期化される(1012)。例えば、文字セットが英語のアルファベットのセットであった場合、次いで変数clが数値「a」を格納した場合、変数plは1に設定され、変数clが文字「f」を格納した場合、次いで変数plは、6に設定され、変数clが数値「z」を格納した場合、次いで変数plは、26に設定されるなどである。数値変数「H」は変数plによって格納される値に設定される(ステップ1014)。
【0111】
チェックが、スロットDS[i][pl]のビットArray[m+1]がヌルに設定されるかどうかを判定するためになされる(ステップ1016)。スロットのArray[m+1]がヌル(またはゼロ)値に格納される場合、セットSはクエリエレメントkを含まないことを示す。信号は、セットSがクエリエレメントkを含まないことを示す(ステップ1018)検索要求のソースに出力され得る。他の適切な処理もまた、ステップ1018において実行され得る。
【0112】
スロットDS[i][pl]のビットArray[m+1]がノンヌル値を格納することがステップ1016において判定される場合、次いで、チェックは、変数iが1に等しくなるかどうかを見るためになされる(ステップ1020)。iが1に等しい場合、クエリエレメントkの全ての文字が処理されたことを示す。次いで、スロットDS[q][H]のエレメントポインタが、それがエレメントkまたはエレメントkに関連した情報に指し示すまたは参照するかどうかを見るためにチェックされる(ステップ1022)。上述のように、エレメントポインタは、クエリエレメントと同じ長さであり、クエリエレメントと同じ最後の文字を有する複数のエレメントに指し示し得る。エレメントポインタが、一つ以上のエレメントを含むリストまたはテーブルに指し示す場合、次いでステップ1022においてエレメントのリストまたはテーブルは、クエリエレメントkがリストまたはテーブルに含まれるかどうかを判定するために検索される。スロットDS[q][H]のエレメントポインタがエレメントk(またはエレメントkに関する情報)に指し示さない場合、またはエレメントポインタがエレメントkを含まないエレメントのリストまたはテーブルに指し示す場合、次いで信号は、セットSがステップ1018に従ってクエリエレメントkを含まないことを示す検索要求のソースに出力され得る。他の適切な処理はまた実行され得る。スロットDS[q][H]のエレメントポインタがエレメントk(またはエレメントkに関する情報)に指し示す場合、またはエレメントポインタがエレメントkを含むエレメントのリストまたはテーブルに指し示す場合、次いで信号は、セットSがクエリエレメントkを含むことを示す検索要求のソースに出力され得る(ステップ1024)。他の適切な処理はまた、ステップ1024において実行され得る。
【0113】
ステップ1020に戻って参照して、変数iが1でないと判定される場合(すなわち、エレメントkの全ての文字が処理されなかった場合)、次いで変数iの値は、1だけ減少される(ステップ1026)。文字変数「c2」は、次いでクエリエレメントkのi番目の位置における文字に初期化される(ステップ1028)。数値変数「p2」は、次いで、ドメインΣに対する文字セット内の変数c2によって格納される文字の位置に初期化される(ステップ1030)。チェックは、スロットDS[i][p2]のビットArray[p1]がヌルに設定されているかを判定する(ステップ1032)。スロットのArray[p1]がヌル(またはゼロ)値を格納する場合、セットSがクエリエレメントkを含まないことを示し、信号は、セットSがステップ1018に従ってクエリエレメントkを含まないことを示す検索要求のソースに出力され得る。他の適切な処理もまた、ステップ1018において実行され得る。スロットDS[i][p2]のArray[p1]がノンヌル値を格納する場合、変数c1は次いで、変数c2によって格納される文字に設定され(ステップ1034)、変数p1は変数p2の値に設定される(ステップ1036)。次いで、処理は、上述のようにステップ1020に続く。
【0114】
上述のように、セットSにおける複数のエレメントが同じ長さおよび同じ最後の文字を有する場合、次いで、複数のエレメントは、第二の検索技術の教示に従って確立されたデータ構造の、特定のノードの特定のスロットの同じエレメントポインタにマッピングする。この場合において、エレメントポインタは、テーブル、リンクされたリストおよび同様なものの中のベクトルに指し示し得る。与えられたクエリエレメントkがエレメントポインタにマッピングする場合、次いで、エレメントポインタによって指し示されたベクトルは、クエリエレメントkがセットSの成分であるかどうかを判定するために検索される。このシナリオにおいて、図7において示されたデータ構造は、ハッシュ関数の計算の必要なしに効率的に検索され得る小さなセットに対して検索されるべきその可能なエレメントのセットを効率的に引き下げるという点でハッシュメカニズムと同様に振舞う。
【0115】
本発明の教示に従って、いくつかの異なった技術はベクトルを維持するために使用され得る。一実施形態に従って、ベクトルは、格納されたリストとして維持され得るので、バイナリ検索は、クエリエレメントkがベクトル内に含まれるかどうかを判定するためにベクトルを検索するために利用され得る。他の実施形態に従って、ベクトルは、安定した(balanced)バイナリツリー(例えば、赤黒ツリー)として維持され得る。このような安定したバイナリツリーはO(logQ)時刻において検索され得る。ここでQはベクトル内のエレメントの数である。さらに別の実施形態に従って、ベクトルは第一の検索技術の教示に従って確立されたデータ構造(すなわち、図3において示されたデータ構造、および図5において示されたフローチャートに従った確立されたデータ構造)を使用して維持され得る。この実施形態では、ベクトルの検索に必要な時間は、クエリエレメントkの長さに比例している(すなわち、クエリエレメント内の文字の数に比例)。
【0116】
第二の技術に従った検索を実行するために必要とされる比較の数は、クエリエレメントの長さに比例している。従って、上述の第二の検索技術は、特定の検索クエリエレメントが特定のデータセット内にあるかどうかを判定するために必要とされる比較の数に対して最適化される。第二の検索技術は、メモリ内検索に対して高度に最適化される。比較の数は、セットSの大きさに依存しない。所与のクエリエレメントがデータ構造内に存在しない場合(すなわち、セットSのエレメントでない場合)、(アレイポインタの)数個のビット比較のみが、エレメントがセットS内にないことを判定するために必要とされる。これは、複数のエレメント比較を必要とし得る従来の検索技術と対照的である。
【0117】
第二の検索技術の教示に従って確立されたデータ構造は、極端に効果的な検索のための任意のツリーの移動なしに、文字比較を命令することを可能にする。結果として、検索内部のパラレル技術(例えば、バイナリスプリット検索など)はまた、検索を実行するために使用され得る。全てのクエリエレメントのハッシュがハッシュバケットを判定するために計算されることが必要である従来のハッシュベースの検索技術と比較する際、本発明はクエリエレメントの長さのみとして計算されるために任意のハッシュを必要とせず、文字位置はクエリエレメントがセットSの成分であるかどうかを判定するために使用される。
【0118】
上述のように、二つの検索技術がクエリエレメントkがセットS内に含まれるかどうかを判定するために示された。しかしながら,請求項に列挙されたような、本発明の範囲は、上述の検索技術に限定されない。当業者に通常公知の他の検索技術のいくつかはまた、本発明の範囲内に含まれる。
【0119】
図11は、本発明の一実施形態に従った第一および/または第二の検索技術をインプリメントするために使用され得る種々のモジュールおよび/またはエンジンを示す簡易化されたブロック図である。図11に示されたモジュールは、ソフトウェアまたはハードウェアまたはその組み合わせでインプリメントされ得る。図11において示されたように、モジュールは、ユーザインターフェース(UI)モジュール1102、データ構造ビルダモジュール1104、検索モジュール1106および通信モジュール1108を含み得る。
【0120】
データ構造ビルダーモジュール1104は、本発明の教示に従った検索を実行するために使用される一つ以上のデータ構造を確立するために構成され得る。例えば、データ構造モジュール1104は、、図3(第一の検索技術に従った)および図7(第二の検索技術に従った)に示されたデータ構造を確立するために構成され得る。データ構造ビルダーモジュール1104は、データベース1110からセットSのエレメントに関する情報にアクセスし得る。ネットワーク化された実施形態において、データ構造ビルダモジュール1104は、通信モジュール1108を介する他のネットワークまたはコンピュータシステムからセットSに関する情報を受け取っても良いし、アクセスしてもよい。セットSに関する情報はまた、ユーザインターフェース1102を介してユーザによって提供され得る。データ構造ビルダ1104によって確立されたデータ構造は、後の使用のためにメモリシステム内に(例えば、コンピュータシステムのRAM内に)格納され得る。
【0121】
検索モジュール1106は、検索クエリ内の特定のクエリエレメントが、データ構造ビルダモジュール1104によって確立されるデータ構造(複数)を使用して、セットSに含まれるかどうかを判定するために検索を実行するよう構成され得る。検索モジュール1106は、ユーザインターフェースモジュール1102を介して検索クエリを受け取り得る。検索は、第一の検索技術、第二の検索技術または他の技術に従って実行され得る。検索モジュール1106によって実行された検索の結果は、ユーザインターフェースモジュール1102を介してユーザに出力され得る。ネットワーク化された実施形態において、検索モジュール1106は、他のコンピュータシステムから、および通信モジュール1108を介して検索クエリを受け取り得、検索結果は、通信モジュール1108を介して検索要求のソースに通信され得る。ネットワーク環境において、検索モジュール1106は、通信モジュール1108を介する検索のために使用されたデータ構造にアクセスし得る。検索を実行するために検索モジュール1106によって使用されたデータ構造はまた、通信モジュール1108を介して外部のコンピュータまたはネットワークから受け取られ得る。
【0122】
通信モジュール1108は、本発明の教示に従って実行し処理するコンピュータシステムに、および、そこから情報およびデータの通信を容易にするために構成され得る。通信モジュール1108は、外部コンピュータシステムおよびネットワークを含む外部エンティティからの検索要求を受け得る。検索を容易にするために使用されるデータ構造はまた、外部エンティティから通信モジュール1108によって受け取られ得る。検索モジュール1106によって実行される検索の結果は、通信モジュール1108によって要求のソースに通信される。
【0123】
ユーザインターフェースモジュール1102は、インターフェースを提供する。インターフェースを介し、ユーザは、検索クエリを入力し得、検索クエリの結果を受け取り得る。本発明の一実施形態に従って、ユーザはまた、インターフェースモジュール1102を介してセットSに関する情報を提供し得る。
【0124】
データ格納場所1110は、データ構造ビルダモジュール1104および検索モジュール1106によって実行される処理に関する情報を格納するために貯蔵所として働き得る。例えば、セットSのエレメント(または、エレメントそれ自体)に関する情報は、データ格納場所1110内に格納され得る。
【0125】
上述した本発明に従った技術は、種々の異なる用途において使用され得る。例えば、コンピューターの技術は、URIのセットが、特定のURIがそのセットに含まれるかどうかを判定するために検索される暗号化目的のために使用され得る。この技術は、クレジットカードの特定の数字がセットに含まれるかどうかを判定するためのセットまたはリストを検索するために使用され得る。目録リストまたはセットは、ユーザが購入を望む特定の項目が目録に含まれるかどうかを判定するために検索され得る。本発明によって提供される検索技術はまた、効率的な検索が望まれる種々の他の環境において使用され得る。
【0126】
上述したことは、本発明の特定の実施形態のみを示すことが理解されるべきであり、請求項に列挙されたような本発明の範囲に限定されない。本発明の特定の実施形態が示されたが、種々の変形、改変、代替、および等価物はまた、本発明の範囲内に含まれる。示された発明は、所定の特定のデータ処理環境内で動作することに制限されないが、複数のデータ処理環境内で自由に動作する。さらに、本発明は、特定の一連の処理およびステップを使用して示され、本発明の範囲が、示された一連の処理およびステップに制限されないことが当業者に理解されるべきである。
【0127】
さらに、本発明は、ハードウェアおよびソフトウェアの特定の組み合わせを使用して示されたので、他のハードウェアおよびソフトウェアの組み合わせもまた本発明の範囲内であることが理解されるべきである。本発明は、ハードウェアにおいてのみまたはソフトウェアにおいてのみ、またはその組み合わせを使用してインプリメントされ得る。
【0128】
従って、説明および図は、限定的な意味ではなく例示的に考慮されるべきである。しかしながら、付加、除去、削除、および他の変形および変化は、請求項で示されたような発明のより広い意図および範囲から逸脱することなしになされ得ることが明らかである。
【図面の簡単な説明】
【0129】
【図1】図1は、本発明の実施形態を組み入れ得るコンピュータシステムの簡略化されたブロック図である。
【図2】図2は、本発明の実施形態に従って検索を行う方法の高レベルに簡略化されたフローチャートである。
【図3】図3は、本発明の実施形態に従う第一の検索技術を用いて検索オペレーションを促進するために構築され得るツリーデータ構造の部分を示す。
【図4】図4は、領域Σに属するエレメントを含む特定のセットSのために第一の検索技術を適用する本発明の実施形態に従って構築されたツリー構造を示す。
【図5】図5は、第一の検索技術を適用する本発明の実施形態に従って検索を促進するためにデータ構造を構築する方法の高レベルに簡略化されたフローチャートである。
【図6】図6は、第一の検索技術を適用する本発明の実施形態に従ってセットSがを検索クエリエレメントkを含むかを判定する方法の高レベルに簡略化されたフローチャートである。
【図7】図7は、第二の検索技術を適用する本発明の実施形態に従って検索オペレーションを促進するために構築され得るデータ構造を示す。
【図8】図8は、第二の検索技術を適用する本発明の実施形態に従って検索を促進するためにデータ構造を構築する方法の高レベルに簡略化されたフローチャートである。
【図9】図9は、本発明の実施形態に従って領域Σに属するエレメントを含む特定のセットSのための第二の検索技術の技術に従って構築されたデータ構造を示す。
【図10】図10は、第二の検索技術を適用する本発明の実施形態に従ってセットSが検索クエリエレメントkを含むかを判定する方法の高レベルに簡略化されたフローチャートである。
【図11】図11は、本発明の実施形態に従って第一および/または第二の検索技術をインプリメントするために用いられ得る種々のモジュールおよび/またはエンジンを示す簡略化されたブロック図である。
Claims (40)
- クエリエレメントがエレメントのセットに含まれるかどうかを判定するコンピュータにインプリメントされた方法であって、
該エレメントのセットにおけるエレメントを識別する情報に基づいてデータ構造を構築するステップと、
該クエリエレメントを識別する情報を受け取るステップと、
該クエリエレメントが該エレメントのセットに含まれるかどうかを判定するために必要とされた比較の数が該クエリエレメントの長さに比例し、該エレメントのセットのエレメントの数から独立しているように、該クエリエレメントが該エレメントのセットに含まれているかどうかを判定するために該データ構造を使用するステップと
を含む、クエリエレメントがエレメントのセットに含まれるかどうかを判定するコンピュータにインプリメントされた方法。 - 前記クエリエレメントは、長さ「q」であり、該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために、多くとも「q」文字の比較が必要とされる、請求項1に記載の方法。
- 前記エレメントのセットは、「m」文字の文字セットを有する領域Σからのエレメントを含み、「Z」は、領域Σのエレメントの最大可能長さであり、「Y」は、1≦Y≦Zであるように該エレメントのセットの最長のエレメントの長さであり、
前記データ構造を構築するステップは、ルートメモリ構造によってヘッダーが付けられた複数のメモリ構造を含む該データ構造を構築するステップを含み、該複数のメモリ構造における各メモリ構造は、第1のメモリ位置および「m」のメモリ位置のアレイを含む、請求項1に記載の方法。 - 前記データ構造は、全体で(Y+1)レベルを含み、
該データ構造の各々のメモリ構造は、レベルL(0≦L≦Y)に属し、特定のメモリ構造に対するレベルは、該メモリ構造の数を表し、前記ルートメモリ構造から開始し、該ルートメモリ構造は、該特定のメモリ構造に到達するように移動される必要があり、該ルートメモリ構造はレベル0に属する、請求項3に記載の方法。 - 前記エレメントのセットのエレメントを識別する情報に基づいて前記データ構造を構築するステップは、i=1で開始する該エレメントのセットの各エレメント「R」(あるf≦Y、各ci(1≦i≦f)に対して、R=c1c2...cfである)に対して、
(a)レベル「(i−1)」でメモリ構造を選択するステップと、
(b)該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置が前記データベース内で別のメモリ構造を参照しない場合、該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置にレベル「i」で新しいメモリ構造のアドレスを格納するステップと、
(c)該レベル「i」でメモリ構造を選択するステップであって、該メモリ構造のアドレスは、該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置に格納される、該レベル「i」におけるメモリ構造を選択するステップと、
(d)「i」が「f」に等しい場合に、ステップ(c)において選択された該メモリ構造の第1のメモリ位置にエレメント「R」への参照を格納するステップと、
(e)「i」の値を1だけインクリメントするステップと、
(f)「i」≦「f」である各ciに対してステップ(b)、(c)、(d)、および(e)を繰り返すステップと
を含む、請求項4に記載の方法。 - 前記クエリエレメントを識別する情報を受け取るステップは、クエリエレメントk(あるq≦Zに対して、k=c1c2...cqである)を識別する情報を受け取るステップを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するステップは、1≦i≦fである、i=1で開始する、kの各ciに対して、
(a)レベル「(i−1)」で前記データベースのメモリ構造を選択するステップと、
(b)該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置が、前記データベース内で別のメモリ構造を参照しない場合、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するステップと、
(c)該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置が、レベル「i」の該データベースのメモリ構造のアドレスを格納する場合、該レベル「i」でメモリ構造のアドレスが格納される、該レベル「i」のメモリ構造を選択するステップと、
(d)該「i」の値を1だけインクリメントするステップと、
(e)「i」≦「q」の間、ステップ(b)、(c)、および(d)を繰り返すステップであって、該クエリエレメントは、該エレメントのセットに含まれないことを示す信号は、出力されていない、ステップとを含み、
該クエリエレメントが該エレメントのセットに含まれないことを示す信号が出力されていない場合に、
ステップ(c)において選択された該メモリ構造の該第1のメモリ位置が該クエリエレメントを参照するかどうかを判定するステップと、
ステップ(c)において選択された該メモリ構造の第1のメモリ位置が該クエリエレメントを参照する場合、該クエリエレメントが該エレメントのセットに含まれることを示す信号を出力し、他の場合は、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力する、請求項5に記載の方法。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するステップは、前記エレメントのセットにおける各々のエレメント「R」(あるf≦Y、各ciに対するR=c1c2...cfである)に対して、各文字ciは、領域Σの文字セットに属し、エレメントRにおける各文字の位置およびアイデンティティを示す情報を前記データベースに格納するステップを含む、請求項3に記載の方法。
- 前記クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するステップは、該クエリエレメントが、前記データベースによって格納された情報、ならびに、文字および該クエリエレメントにおけるそれらの位置を識別する情報に基づいてエレメントのセットに含まれるかどうかを判定するステップを含む、請求項7に記載の方法。
- 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するステップは、該エレメントのセットにおける各エレメント「R」に対して、
(a)前記選択されたメモリ構造として該データ構造の前記ルートメモリ構造を選択するステップと、
(b)該エレメントRの第1の文字を選択するステップと、
(c)該選択されたメモリ構造のメモリ位置のアレイにおいて選択された文字に対応するメモリ位置が、該データ構造における別のメモリ構造を参照しない場合、該現在選択されたメモリ構造のメモリ位置のアレイにおいて該選択された文字に対応する該メモリ位置に新しいメモリ構造のアドレスを格納するステップと、
(d)該メモリ構造のアドレスが、該選択されたメモリ構造のメモリ位置のアレイにおいて該選択された文字に対応する該メモリ位置に該選択されたメモリ構造として格納される該メモリ構造を選択するステップと、
(e)該選択された文字がエレメントRの最後の文字である場合、ステップ(d)において選択された該メモリ構造の前記第1のメモリ位置においてエレメントRへの参照を格納するステップと、
他の場合では、エレメントRの次の文字を選択し、ステップ(c)、(d)、および(e)を繰り返すステップと
を含む、請求項3に記載の方法。 - 前記クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するステップは、
(a)前記選択されたメモリ構造として該データ構造の前記ルートメモリ構造を選択するステップと、
(b)該クエリエレメントの第1の文字を選択するステップと、
(c)該選択されたメモリ構造のメモリ位置のアレイにおいて選択された文字に対応するメモリ位置が、該データ構造における別のメモリ構造を参照しない場合、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するステップと、
他の場合では、該メモリ構造のアドレスが該選択されたメモリエレメントとして格納される該メモリ構造を選択するステップと、
(d)該選択された文字が該クエリエレメントの最後の文字である場合、
ステップ(c)で選択された、該メモリ構造の第1のメモリ位置が該クエリエレメントを参照するかどうかを判定するステップと、
ステップ(c)において選択された該メモリ構造の第1のメモリ位置が該クエリエレメントを参照する場合、該クエリエレメントが該エレメントのセットに含まれることを示す信号を出力し、他の場合は、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するステップと、
他の場合では、該クエリエレメントの次の文字を選択し、ステップ(c)および(d)を繰り返すステップと
を含む、請求項9に記載の方法。 - 前記データ構造のサイズは、前記エレメントのセットのエレメントの数から独立している、請求項1に記載の方法。
- 前記エレメントのセットは、文字「m」の文字セットを有する領域Σからのエレメントを含み、「Z」は、領域Σのエレメントの最大可能長さであり、
前記データ構造は、「Z」メモリ構造を含み、各メモリ構造は、「m」スロットを含み、各スロットは、第1のメモリ位置およびメモリ位置のアレイを含み、メモリ位置の各アレイは、「(m+1)」メモリ位置を含む、請求項11に記載の方法。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づく前記データ構造を構築するステップは、
各メモリ構造における各スロットのメモリ位置のアレイにおける前記第1のメモリ位置およびメモリ位置をゼロ値に初期化するステップと、
該エレメントのセットにおける各エレメント「R」(あるf≦Y、各ci(1≦i≦f)に対してR=c1c2...cfである)に対して、
「i」<「f」である場合、メモリ構造iのciに対応するスロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置にゼロでない値を格納するステップと、
「i」=「f」である場合、メモリ構造iのciに対応するスロットのメモリ位置のアレイの内の(m+1)番目のメモリ位置にゼロでない値を格納するステップと、
メモリ構造iのciに対応する該スロットの第1のメモリ位置にエレメント「R」への参照を格納するステップと
を含む、請求項12に記載の方法。 - 前記クエリエレメントを識別する情報を受け取るステップは、クエリエレメント「k」(あるq≦Zに対してk=c1c2...cqである)を識別する情報を受け取るステップを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するステップは、kの各c1に対して
「i」<「q」である場合、ゼロでない値がメモリ構造iのciに対応する前記スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置に格納される場合、
「i」が「q」に等しい場合、ゼロでない値がメモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける(m+1)番目のメモリ位置に格納され、メモリ構造iのciに対応する該スロットの前記第1のメモリ位置が該クエリエレメントを参照する場合、
該クエリエレメントが、前記エレメントのセットに含まれることを示す信号を出力するステップを含む、請求項13に記載の方法。 - 前記クエリエレメントを識別する情報を受け取るステップは、クエリエレメント「k」(あるq≦Zに対してk=c1c2...cqである)を識別する情報を受け取るステップを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するステップは、kの任意のciに対して
「i」が「q」に等しい場合、ゼロでない値がメモリ構造iのciに対応する前記スロットのメモリ位置のアレイにおける(m+1)番目のメモリ位置に格納されるか、またはメモリ構造iのciに対応するスロットの前記第1のメモリ位置が該クエリエレメントを参照しない場合、
「i」<「q」である場合、ゼロでない値が、メモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置に格納される場合、
該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するステップを含む、請求項13に記載の方法。 - クエリエレメントがエレメントのセットに含まれるかどうかを判定するためのシステムであって、
プロセッサと、
該プロセッサに接続され、該プロセッサによって実行可能な複数のコードモジュールを格納するために構成されたメモリとを含み、該複数のコードモジュールは、
該エレメントのセットのエレメントを識別する情報に基づいてデータ構造を構築するためのコードモジュールと、
該クエリエレメントを識別する情報を受け取るためのコードモジュールと、
該クエリエレメントが該エレメントのセットに含まれるかどうかを判定するために必要とされた比較の数が該クエリエレメントの長さに比例し、該エレメントのセットのエレメントの数から独立しているように、該クエリエレメントが該エレメントのセットに含まれるかどうかを判定するために該データ構造を用いるためのコードモジュールと
を含む、クエリエレメントがエレメントのセットに含まれるかどうかを判定するためのシステム。 - 前記クエリエレメントは、長さ「q」であり、該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために、多くとも「q」文字の比較が必要とされる、請求項16に記載のシステム。
- 前記エレメントのセットは、「m」文字の文字セットを有する領域Σからのエレメントを含み、「Z」は、領域Σのエレメントの最大可能長さであり、「Y」は、1≦Y≦Zであるように該エレメントのセットの最長のエレメントの長さであり、
前記データ構造を構築するためのコードモジュールは、ルートメモリ構造によってヘッダーが付けられた複数のメモリ構造を含む該データ構造を構築するためのコードモジュールを含み、該複数のメモリ構造における各メモリ構造は、第1のメモリ位置および「m」のメモリ位置のアレイを含む、請求項16に記載のシステム。 - 前記データ構造は、全体で(Y+1)レベルを含み、
該データ構造の各々のメモリ構造は、レベルL(0≦L≦Y)に属し、特定のメモリ構造に対するレベルは、該メモリ構造の数を表し、前記ルートメモリ構造から開始し、該ルートメモリ構造は、該特定のメモリ構造に到達するように移動される必要があり、該ルートメモリ構造はレベル0に属する、請求項18に記載のシステム。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づく前記データ構造を構築するためのコードモジュールは、i=1で開始する該エレメントのセットの各エレメント「R」(あるf≦Y、各ci(1≦i≦f)に対して、R=c1c2...cfである)に対して、
(a)レベル「(i−1)」でメモリ構造を選択するためのコードモジュールと、
(b)該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置が、前記データベース内で別のメモリ構造を参照しない場合に、該選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置にレベル「i」で新しいメモリ構造のアドレスを格納するためのコードモジュールと、
(c)該レベル「i」でメモリ構造を選択するためのコードモジュールであって、該メモリ構造のアドレスは、該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置に格納される、該レベル「i」でメモリ構造を選択するためのコードモジュールと、
(d)「i」が「f」に等しい場合、ステップ(c)において選択された該メモリ構造の第1のメモリ位置にエレメント「R」への参照を格納するためのコードモジュールと、
(e)「i」の値を1だけインクリメントするためのコードモジュールと、
(f)「i」≦「f」である各ciに対してステップ(b)、(c)、(d)、および(e)を繰り返すためのコードモジュールと
を含む、請求項19に記載のシステム。 - 前記クエリエレメントを識別する情報を受け取るためのコードモジュールは、
クエリエレメントk(あるq≦Zに対して、k=c1c2...cqである)を識別する情報を受け取るためのコードモジュールを含み、
i=1で開始する、1≦i≦fであるkの各c1に対して、該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するように前記データ構造を使用するためのコードモジュールは、
(a)レベル「(i−1)」で前記データベースのメモリ構造を選択するためのコードモジュールと、
(b)該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置が、前記データベース内で別のメモリ構造を参照しない場合、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するためのコードモジュールと、
(c)該現在選択されたメモリ構造のメモリ位置のアレイにおける文字ciに対応するメモリ位置が、レベル「i」の該データベースのメモリ構造のアドレスを格納する場合、該レベル「i」のメモリ構造のアドレスが格納される、該レベル「i」でメモリ構造を選択するためのコードモジュールと、
(d)該「i」の値を1だけインクリメントするためのコードモジュールと、
(e)「i」≦「q」の間、ステップ(b)、(c)、および(d)を繰り返すためのコードモジュールであって、該クエリエレメントが該エレメントのセットに含まれないことを示す信号が出力されていない、コードモジュールと、
該クエリエレメントが該エレメントのセットに含まれないことを示す信号が出力されていない場合、
ステップ(c)において選択された該メモリ構造の第1のメモリ位置が該クエリエレメントを参照するかどうかを判定するためのコードモジュールと、
ステップ(c)において選択された該メモリ構造の該第1のメモリ位置が該クエリエレメントを参照する場合、該クエリエレメントが該エレメントのセットに含まれることを示す信号を出力し、他の場合は、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するためのコードモジュールと
を含む、請求項20に記載のシステム。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するためのコードモジュールは、前記エレメントのセットにおける各エレメント「R」(あるf≦Yに対してR=c1c2...cfである)に対して、各文字ciは、領域Σの文字セットに属し(1≦i≦f)、エレメントRにおける各文字の位置およびアイデンティティを示す情報を前記データベースに格納するためのコードモジュールを含む、請求項18に記載のシステム。
- 前記クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードモジュールは、該クエリエレメントが前記データベースによって格納された情報、文字および該クエリエレメントにおけるそれらの位置を識別する情報に基づいてエレメントのセットに含まれるかどうかを判定するためのコードモジュールを含む、請求項22に記載のシステム。
- 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するためのコードモジュールは、該エレメントのセットにおける各エレメント「R」に対して、
(a)前記選択されたメモリ構造として該データ構造の前記ルートメモリ構造を選択するためのコードモジュールと、
(b)該エレメントRの第1の文字を選択するためのコードモジュールと、
(c)該選択されたメモリ構造のメモリ位置のアレイにおいて選択された文字に対応するメモリ位置が、該データ構造における別のメモリ構造を参照しない場合に、該現在選択されたメモリ構造のメモリ位置のアレイにおいて該選択された文字に対応する該メモリ位置に新しいメモリ構造のアドレスを格納するためのコードモジュールと、
(d)該メモリ構造のアドレスが、該選択されたメモリ構造のメモリ位置のアレイにおいて該選択された文字に対応する該メモリ位置に該選択されたメモリ構造として格納される該メモリ構造を選択するためのコードモジュールと、
(e)該選択された文字がエレメントRの最後の文字である場合、ステップ(d)において選択された該メモリ構造が前記第1のメモリ位置におけるエレメントRへの参照を格納するためのコードモジュールと、
他の場合では、エレメントRの次の文字を選択し、ステップ(c)、(d)、および(e)を繰り返すためのコードモジュールと
を含む、請求項18に記載のシステム。 - 前記クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードモジュールは、
(a)前記選択されたメモリ構造として該データ構造の前記ルートメモリ構造を選択するためのコードモジュールと、
(b)該クエリエレメントの第1の文字を選択するためのコードモジュールと、
(c)該選択されたメモリ構造のメモリ位置のアレイにおいて選択された文字に対応するメモリ位置が、該データ構造における別のメモリ構造を参照しない場合に、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するためのコードモジュールと、
他の場合では、該メモリ構造のアドレスが該選択されたメモリエレメントとして格納される該メモリ構造を選択するためのコードモジュールと、
(d)該選択された文字が該クエリエレメントの最後の文字である場合、
ステップ(c)で選択された、該メモリ構造の第1のメモリ位置が該クエリエレメントを参照するかどうかを判定するためのコードモジュールと、
ステップ(c)において選択された該メモリ構造の第1のメモリ位置が該クエリエレメントを参照する場合、該クエリエレメントが該エレメントのセットに含まれることを示す信号を出力するコードモジュールと、他の場合は、該クエリエレメントが該エレメントのセットに含まれないことを示す信号を出力するためのコードモジュールと、
他の場合では、該クエリエレメントの次の文字を選択し、ステップ(c)および(d)を繰り返すためのコードモジュールと
を含む、請求項24に記載のシステム。 - 前記データ構造のサイズは、前記エレメントのセットのエレメントの数から独立している、請求項16に記載のシステム。
- 前記エレメントのセットは、「m」文字の文字セットを有する領域Σからのエレメントを含み、「Z」は、領域Σのエレメントの最大可能長さであり、
前記データ構造は、「Z」メモリ構造を含み、各メモリ構造は、「m」スロットを含み、各スロットは、第1のメモリ位置およびメモリ位置のアレイを含み、メモリ位置の各アレイは、「(m+1)」メモリ位置を含む、請求項26に記載のシステム。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するためのコードモジュールは、
各メモリ構造における各スロットのメモリ位置のアレイにおける前記第1のメモリ位置およびメモリ位置をゼロ値に初期化するためのコードモジュールと、
該エレメントのセットにおける各エレメント「R」(あるf≦Y、各ci(1≦i≦f)に対してR=c1c2...cfである)に対して、
「i」<「f」である場合、メモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置にゼロでない値を格納するためのコードモジュールと、
「i」=「f」である場合、メモリ構造iのciに対応する該スロットのメモリ位置のアレイの内の(m+1)番目のメモリ位置にゼロでない値を格納するためのコードモジュールと、
メモリ構造iのciに対応する該スロットの第1のメモリ位置におけるエレメント「R」への参照を格納するためのコードモジュールと
を含む、請求項27に記載のシステム。 - 前記クエリエレメントを識別する情報を受け取るためのコードモジュールは、クエリエレメント「k」(あるq≦Zに対してk=c1c2...cqである)を識別する情報を受け取るためのコードモジュールを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードモジュールは、kの各ciに対して
「i」<「q」である場合、ゼロでない値がメモリ構造iのciに対応する前記スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置に格納される場合、
「i」が「q」に等しい場合、ゼロでない値がメモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける(m+1)番目のメモリ位置に格納され、メモリ構造iのciに対応する該スロットの前記第1のメモリ位置が該クエリエレメントを参照する場合、
該クエリエレメントが前記エレメントのセットに含まれることを示す信号を出力するためのコードモジュールを含む、請求項28に記載のシステム。 - 前記クエリエレメントを識別する情報を受け取るためのコードモジュールは、クエリエレメント「k」(あるq≦Zに対してk=c1c2...cqである)を識別する情報を受け取るためのコードモジュールを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードモジュールは、kの任意のciに対して
「i」が「q」に等しい場合、ゼロでない値がメモリ構造iのciに対応する前記スロットのメモリ位置のアレイにおける(m+1)番目のメモリ位置に格納されるか、またはメモリ構造iのciに対応する該スロットの前記第1のメモリ位置が該クエリエレメントを参照しない場合、
「i」<「q」である場合、ゼロでない値がメモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置に格納される場合、
該クエリエレメントが、前記エレメントのセットに含まれないことを示す信号を出力するためのコードモジュールを含む、請求項28に記載のシステム。 - クエリエレメントがエレメントのセットに含まれるかどうかを判定するためのコンピュータ読み出し可能記録媒体に格納されたコンピュータプログラム製品であって、
該エレメントのセットにおけるエレメントを識別する情報に基づいてデータ構造を構築するためのコードと、
該クエリエレメントを識別する情報を受け取るためのコードと、
該クエリエレメントが該エレメントのセットに含まれるかどうかを判定するために必要とされた比較の数が該クエリエレメントの長さに比例し、該エレメントのセットのエレメントの数から独立しているように、該クエリエレメントが該エレメントのセットに含まれているかどうかを判定するためにデータ構造を使用するためのコードと
を含む、コンピュータプログラム製品。 - 前記クエリエレメントは、長さ「q」であり、該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために、多くとも文字「q」の比較が必要とされる、請求項31に記載のコンピュータプログラム製品。
- 前記エレメントのセットは、「m」文字の文字セットを有する領域Σからのエレメントを含み、「Z」は、領域Σのエレメントの最大可能長さであり、「Y」は、1≦Y≦Zであるように該エレメントのセットの最長のエレメントの長さであり、
前記データ構造を構築するためのコードは、ルートメモリ構造によってヘッダーが付けられた複数のメモリ構造を含む該データ構造を構築するためのコードを含み、該複数のメモリ構造における各メモリ構造は、第1のメモリ位置および「m」のメモリ位置のアレイを含む、請求項31に記載のコンピュータプログラム製品。 - 前記データ構造は、全体で(Y+1)レベルを含み、
該データ構造の各々のメモリ構造は、レベルL(0≦L≦Y)に属し、特定のメモリ構造に対するレベルは、該メモリ構造の数を表し、前記ルートメモリ構造から開始し、該ルートメモリ構造は、該特定のメモリ構造に到達するように移動される必要があり、該ルートメモリ構造はレベル0に属する、請求項33に記載のコンピュータプログラム製品。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するためのコードは、該エレメントのセットにおける各エレメント「R」(あるf≦Yに対してR=c1c2...cfである)に対して、各文字ciは、領域Σの文字セットに属し(1≦i≦f)、エレメントRにおける各文字の位置およびアイデンティティを示す情報を前記データベースに格納するためのコードを含む、請求項33に記載のコンピュータプログラム製品。
- 前記クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードは、該クエリエレメントが、前記データベースによって格納された情報、ならびに、文字および該クエリエレメントにおけるそれらの位置を識別する情報に基づいてエレメントのセットに含まれるかどうかを判定するためのコードを含む、請求項35に記載のコンピュータプログラム製品。
- 前記データ構造のサイズは、前記エレメントのセットのエレメントの数から独立しており、
前記エレメントのセットは、「m」文字の文字セットを有する領域Σからのエレメントを含み、「Z」は、領域Σのエレメントの最大可能長さであり、
前記データ構造は、「Z」メモリ構造を含み、各メモリ構造は、「m」スロットを含み、各スロットは、第1のメモリ位置およびメモリ位置のアレイを含み、メモリ位置の各アレイは、「(m+1)」メモリ位置を含む、請求項31に記載のコンピュータプログラム製品。 - 前記エレメントのセットにおけるエレメントを識別する情報に基づいて前記データ構造を構築するためのコードは、
各メモリ構造における各スロットのメモリ位置のアレイにおける前記第1のメモリ位置およびメモリ位置をゼロ値に初期化するためのコードと、
該エレメントのセットにおける各エレメント「R」(あるf≦Y、各ci(1≦i≦f)に対してR=c1c2...cfである)に対して、
「i」<「f」である場合、メモリ構造iのciに対応するスロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置にゼロでない値を格納するためのコードと、
「i」=「f」である場合、メモリ構造iのciに対応するスロットのメモリ位置のアレイの内の(m+1)番目のメモリ位置にゼロでない値を格納するためのコードと、
メモリ構造iのciに対応する該スロットの第1のメモリ位置におけるエレメント「R」への参照を格納するためのコードと
を含む、請求項37に記載のコンピュータプログラム製品。 - 前記クエリエレメントを識別する情報を受け取るコードは、クエリエレメント「k」(あるq≦Zに対してk=c1c2...cqである)を識別する情報を受け取るためのコードを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードは、kの各ciに対して
「i」<「q」である場合、ゼロでない値がメモリ構造iのciに対応する前記スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置に格納される場合、
「i」が「q」に等しい場合、ゼロでない値がメモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける(m+1)番目のメモリ位置に格納され、メモリ構造iのciに対応するスロットの前記第1のメモリ位置が該クエリエレメントを参照する場合、
該クエリエレメントが前記エレメントのセットに含まれることを示す信号を出力するためのコードを含む、請求項38に記載のコンピュータプログラム製品。 - 前記クエリエレメントを識別する情報を受け取るためのコードは、クエリエレメント「k」(あるq≦Zに対してk=c1c2...cqである)を識別する情報を受け取るためのコードを含み、
該クエリエレメントが前記エレメントのセットに含まれるかどうかを判定するために前記データ構造を使用するためのコードは、kの任意のciに対して
「i」が「q」に等しい場合、ゼロでない値がメモリ構造iのciに対応する前記スロットのメモリ位置のアレイにおける(m+1)番目のメモリ位置に格納されるか、またはメモリ構造iのciに対応する該スロットの前記第1のメモリ位置が該クエリエレメントを参照しない場合、
「i」<「q」である場合、ゼロでない値がメモリ構造iのciに対応する該スロットのメモリ位置のアレイにおける文字ci+1に対応するメモリ位置に格納される場合、
該クエリエレメントが前記エレメントのセットに含まれないことを示す信号を出力するためのコードを含む、請求項38に記載のコンピュータプログラム製品。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US26232001P | 2001-01-17 | 2001-01-17 | |
US61790101A | 2001-12-04 | 2001-12-04 | |
PCT/US2002/001367 WO2002057883A2 (en) | 2001-01-17 | 2002-01-15 | Efficient searching techniques |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004531789A true JP2004531789A (ja) | 2004-10-14 |
Family
ID=33302590
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002558102A Withdrawn JP2004531789A (ja) | 2001-01-17 | 2002-01-15 | 効率的検索技術 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004531789A (ja) |
-
2002
- 2002-01-15 JP JP2002558102A patent/JP2004531789A/ja not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7634470B2 (en) | Efficient searching techniques | |
US7866542B2 (en) | System and method for resolving identities that are indefinitely resolvable | |
US7469253B2 (en) | Associative hash partitioning using pseudo-random number generator | |
JP4771321B2 (ja) | データをジャバ・システム・データベース・エントリ及びldapディレクトリ・サービスの間で交換するための方法及びデータ・フォーマット | |
US7171419B2 (en) | Method, apparatus, and program to efficiently serialize objects | |
US20090138706A1 (en) | Techniques for searching encrypted files | |
US7890510B2 (en) | Method and apparatus for analyzing community evolution in graph data streams | |
US20040054671A1 (en) | URL mapping methods and systems | |
US20070198566A1 (en) | Method and apparatus for efficient storage of hierarchical signal names | |
US20100121848A1 (en) | Multi-interval quicksort algorithm for complex objects | |
EP1304627A2 (en) | Methods, systems, and articles of manufacture for soft hierarchical clustering of co-occurring objects | |
US20080235208A1 (en) | Method For Fast Large Scale Data Mining Using Logistic Regression | |
US6735600B1 (en) | Editing protocol for flexible search engines | |
EP1290579A2 (en) | Method and apparatus for automatically converting the format of an electronic message | |
JP2014238892A (ja) | 保護されているデータを検索する方法、コンピュータシステム及びコンピュータプログラム | |
US8521875B2 (en) | Identity for data sources | |
US7010520B2 (en) | Method and system for searching documents with numbers | |
JP2004531789A (ja) | 効率的検索技術 | |
AU2002241912A1 (en) | Efficient searching techniques | |
Zhou et al. | Cuckoo linear algebra | |
JP2003006231A (ja) | コンピュータ文字情報のインデックス作成及び検索を行なうための方法及びシステム | |
CN115757435A (zh) | 一种支持语义感知密文检索加速的筛选因子确定方法 | |
US20050278283A1 (en) | Search via fast case insensitive ASCII tree | |
Rosen et al. | Information Structures | |
US20040068503A1 (en) | Method and apparatus for managing a set of data structures associated with a large file |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20050405 |