JP3722231B2 - コンパクトにエンコードされて記憶されたストリングの組を有する製品 - Google Patents

コンパクトにエンコードされて記憶されたストリングの組を有する製品 Download PDF

Info

Publication number
JP3722231B2
JP3722231B2 JP19122993A JP19122993A JP3722231B2 JP 3722231 B2 JP3722231 B2 JP 3722231B2 JP 19122993 A JP19122993 A JP 19122993A JP 19122993 A JP19122993 A JP 19122993A JP 3722231 B2 JP3722231 B2 JP 3722231B2
Authority
JP
Japan
Prior art keywords
subsequence
data
information
item
string
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.)
Expired - Lifetime
Application number
JP19122993A
Other languages
English (en)
Other versions
JPH0785047A (ja
Inventor
エム カプラン ロナルド
ケイ マーティン
ティー マックスウェル ザ サード ジョン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xerox Corp
Original Assignee
Xerox Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xerox Corp filed Critical Xerox Corp
Priority to JP19122993A priority Critical patent/JP3722231B2/ja
Publication of JPH0785047A publication Critical patent/JPH0785047A/ja
Application granted granted Critical
Publication of JP3722231B2 publication Critical patent/JP3722231B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Document Processing Apparatus (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

【0001】
【産業上の利用分野】
本発明は、コンパクトにエンコードされた形態で記憶されたデータに係る。
【0002】
【従来の技術】
1993年1月の「ソフトウェアプラクティス・アンド・エクスペアリアンス(Software-Practice and Experience)」第23(1)巻、第15ないし30ページに掲載されたルチェシC.L.及びコワルトフスキーT.著の「多数の用語を表す有限オートマトンの応用(Applications of Finite Automata Representing Large Vocabularies) 」には、効率的なスペルチェッカを実施するという問題が動機となって、非常に多数の用語集を最小の非繰り返し確定有限オートマトンに圧縮するための技術が開示されている。図4は、幾つかの英語の動詞の全ての形態に対するオートマトンを示している。オートマトンを形成する技術は18ページの始めに記載されており、この技術は最小化の段階を含む。データ構造は、19ないし20ページに記載されており、各状態は、アルファベットのサイズをNとすれば、N個のエントリーを有するアレイとして表される。ほとんどのエントリーは非存在の遷移に対応しており、従って、状態アレイは、存在するエントリーが衝突しないようにシフトしそしてオーバーラップすることができる。各状態には、その状態に対して存在する遷移を選択する1つのNビットベクトルが添付される。アレイのパッキングはグリーディアルゴリズムによって行われ、該アルゴリズムは、1つ、2つ又は3つの遷移をもつ状態の割合が非常に大きいためにほぼ何時でも最適な結果を与える。又、個別ビットベクトルの数は状態の数より相当に小さいので、多数が共有される。状態アレイをパッキングする他に、短い(相対的)及び長い(絶対的)状態指示子が使用される。ポルトガル語の場合には、文字がその区分発音符から剥がされ、その位置がワード終止符の後にエンコードされる。
【0003】
【発明の構成】
本発明は、ワードや数字のような1組のストリング、及び他のストリングを定めるデータをコンパクトに記憶するという問題を軽減するものであり、上記他のストリングは、アルファベット的、発音的、署名的又は象形的エレメント;番号のような数字エレメント;句読点符号;区分発音符;数学及び論理記号;及び言語の筆記又は印刷形態で見かけることのある他の個別のエレメントを含み、これらは全てここでは「文字」と称する。本発明は、1組のストリングを表すのに必要なデータの量を減少する多数の関連技術の発見に基づくものである。
【0004】
第1の技術は、データの項目の順序を使用し、さもなくば追加データを必要とするであろうある情報を保持するものである。1組のストリングの情報は、文字の識別に関する情報と、1つの文字ストリングでその1組のストリングをいかにサーチするかに関する情報とを含む種々の形式の情報を含むことができる。この第1の技術は、いかにサーチするかを指示するに必要なデータを減少するデータ順序付け技術である。
【0005】
このデータ順序付け技術は、データの項目をシーケンス内に位置付ける。シーケンス内の第1のデータ項目は、ラベル情報とサーチ情報とを含んでいる。ラベル情報は、1組の文字形式のうちの1つ、例えば、アルファベットの文字の形式を指示することができる。サーチ情報は、次の情報及び別の情報を含む。
【0006】
次の情報とは、ストリングの現在文字がラベル情報に一致する場合に第1のデータ項目がサーチを続けることのできる次のデータ項目を有するかどうかを指示するものである。次のデータ項目は、第1のデータ項目のシーケンス内の位置に基づいてアクセスすることができる。
【0007】
別の情報とは、ストリングの現在文字がラベル情報に一致しない場合に第1のデータ項目がサーチを続けることのできる別のデータ項目を有するかどうかを指示するものである。別のデータ項目は、第1のデータ項目のシーケンス内の位置に基づいてアクセスすることができる。
【0008】
データ順序付け技術は、次のデータ項目を有する各データ項目の直後に該次のデータ項目が続くようにデータ項目を配置することによって実施することができる。又、データ項目が次のデータ項目を有していないが別のデータ項目を有している場合には、該別のデータ項目がデータ項目の直後に続く。更に、データ項目が次のデータ項目も別のデータ項目も有していない場合には、その直後に続くことができるのは、次のデータ項目及び別のデータ項目の両方を有するシーケンス内の手前の最も近いデータ項目に対する別のデータ項目である。
【0009】
この順序付けの結果、データ項目の次の及び別のデータ項目の位置を指示するためのポインタ又は他の付加的なデータが不要となる。これは、ストリングの組を表すのに必要なデータを著しく減少することができる。
【0010】
1つの文字ストリングでシーケンスをサーチするために、そのシーケンス内のデータの項目のラベル情報に対してそのストリングの文字を一致させることができる。文字が一致しそしてデータの項目が次のデータ項目を有する場合には、サーチはその直後のデータ項目へと進み、ストリングの次の文字を一致させようと試みる。その文字が一致せずそしてデータの項目が別のデータ項目を有している場合には、サーチはその別のものへと進み、これは、次の項目をもたない項目が別の項目をもつ項目と同数に到達するまでデータ項目を通して進むことによって行うことができ、その到達直後のデータ項目が、シークされた別の項目となる。文字が一致せずそしてデータ項目が別の項目をもたない場合には、そのストリングがその組にはないことになる。同様に、ストリングの最後の文字が、その組のストリングの最終文字ではないデータの項目によって一致された場合にも、そのストリングがその組にはないことになる。
【0011】
第2の技術は、データの項目をコンパクトにエンコードすることにより第1の技術の上に構築される。データがNビットの単位で取り扱われるシステムにおいては、データの各項目を単一のNビット単位でエンコードすることができる。更に、データのある項目は、2つのNビット単位でエンコードするのが効果的である。
【0012】
例えば、各データ項目は、上記したラベル情報、次の情報、及び別の情報と、一致されつつある文字のストリングが、その最後の文字がラベル情報に一致する場合に1組のストリング内にあるかどうかを指示する最終情報とを含むことができる。この場合に、最終情報、次の情報及び別の情報について6つの組み合わせが考えられる。即ち、最終情報+次の情報+別の情報;最終情報+次の情報+別の情報なし;最終情報+次の情報なし+別の情報;最終情報+次の情報なし+別の情報なし;最終情報なし+次の情報+別の情報;及び最終情報なし+次の情報+別の情報なし、である。
【0013】
それ故、Nビットの単位でのエンコードは、アルファベット文字のようなラベルの数をLとすれば、2N ≧6Lの場合に可能となる。8ビットバイトの場合には、N=8であり、従って、42個の異なったラベル(即ち、256を6で除算した商)をもつデータの項目をこのようにエンコードすることができる。
【0014】
或いは又、データ項目が次の項目をもたないことを特殊なバイト値で指示することができ、各データ項目をそれが次の項目をもつ場合は1バイトでエンコードしそして次の項目をもたない場合は2バイトでエンコードすることができる。この場合に、第1バイトにおける最終情報と別の情報との組み合わせは4つしか考えられない。即ち、最終情報+別の情報;最終情報+別の情報なし;最終情報なし+別の情報;及び最終情報なし+別の情報なし、である。それ故、最終情報と別の情報の各々は、各バイトのうちの1ビットを使用することができる。8ビットバイトの場合には、64個の異なるラベル(即ち、256を6で除算した商)をもつデータの項目をこのようにエンコードすることができる。
【0015】
又、第3の技術も、ポインタで冗長度を減少することによって第1及び第2の技術の上に構築される。ストリングの組全体がデータ項目のシーケンスで表される場合には、そのシーケンスの一部分は同じであってもよい。例えば、英語においては、文字「ing」は多くのストリングの終わりに生じ、これらのストリングの終わりを表すシーケンスの部分は同じであってもよい。この場合に、その同じ部分を一度しか含まず、それが生じるシーケンス内の他の位置の各々にはそれに対するポインタをもたせることにより、シーケンスの長さを減少することができる。
【0016】
この技術は、データの項目をエンコードするのに使用されないバイト値を用いて実施することができる。1バイトエンコードの場合に、2N >6Lであれば、(2N −6L)バイト値がポインタとして使用できる。特殊な非次バイトでエンコードする場合には、ポインタとして使用できるバイト値の数は(2N −4L)であり、2Lだけ多数のポインタとなる。
【0017】
しかしながら、有用なサイズのストリングの組の場合に、1バイトポインタではシーケンス内の独特の位置を指示するに充分な情報が与えられない。というのは、シーケンスは256個以上の位置を含んでいるからである。それ故、ポインタとして得られるバイト値の各々を使用して、シーケンス内の独特の位置を指示する2バイト以上の全長ポインタを得るための追加データをアクセスすることができる。これらバイト値の1つは、例えば、全長ポインタを得るために使用されるその直後に続くバイトの数を指示することができる。或いは又、バイト値は、全長ポインタを含むルックアップテーブル内のエントリーを指示することができる。
【0018】
この技術は、データが記憶される記憶媒体を含む製品において実現することができる。記憶されたデータは、1組のストリングを指示するストリング組データを含んでいる。このストリング組データは、複数のデータ項目を含んでいる。ある項目は、ラベル情報と、次の情報と、別の情報とを含み、そしてこれらの項目は、上記したように、データ項目の位置に基づいてマシンのサーチで項目の次のデータ項目及び別のデータ項目に到達できるように順序付けされる。データの各項目は、上記した方法の1つでエンコードすることができる。これら項目はシーケンス内において順序付けすることができ、そしてシーケンスは冗長度を減少するためにポインタを含むことができる。又、記憶されたデータは、短い長さのポインタでアクセスして全長ポインタを得られるようにするエントリーを有したルックアップテーブルも含むことができる。
【0019】
上記製品は、記憶されたデータをアクセスするように接続されたプロセッサを含むことができる。記憶されたデータは、ストリングが上記組のストリングの1つであるかどうかを決定するためにプロセッサが実行することのできる命令も含むことができる。
【0020】
上記した技術は、ストリングの組を表すのに必要なデータ量を減少するので効果的である。更に、この技術は、ストリングがストリングの組の中にあるかどうかを判断するように迅速にサーチすることができる。
【0021】
【実施例】
A.エンコードしたデータ
1組のストリングを指示するデータを有する製品は多数の方法で製造することができる。図1ないし4は、コンパクトにエンコードしたデータを形成する基本的なエンコード技術を示している。
【0022】
図1は、簡単な有限状態マシン(FSM)データ構造体の一部分をグラフ形態で示しており、各状態は円として示されそして状態間の遷移は矢印付きの線として示されている。状態60はスタート状態と称し、状態62、66、70及び72は全て最終状態で、円内に文字「F」で示されており、これは、データ構造体によってカバーされたストリングの1つがこれら状態の各々において終了することを意味している。図1のデータ構造体は、最終と表示された状態に最終的に至るような遷移のみを含んでいるが、最終的にこのような最終状態に至らない遷移は省略されていることに注意されたい。更に、文字は、文字AないしEで表されており、従って、これらの文字は、結局は最終状態に至る状態間の遷移のラベルとして働く。状態62は、最終状態がデータ構造体の分岐路の終わりに来る必要がなく、データ構造体内の任意の状態にあってもよいことを示している。
【0023】
図2は、図1のデータ構造体を遷移ユニットにエンコードする一例を示している。エンコードされたデータ構造体の情報はアルファニューメリック文字として示されているが、これは典型的に2進形態でメモリに記憶される。メモリアドレスは左のカラムに示されており、その後のカラムは各アドレスにおけるラベルフィールドを示している。ラベルフィールドの後に、各アドレスにはポインタのための2つのフィールドがあり、その1つは、ラベルが受け取った文字に対応する場合に続く遷移ユニットに対するものであり、そしてもう1つは、それに続く別の出力遷移ユニット(もしあれば)に対するものである。各遷移ユニットは、図示されたように、多数のビットフィールドも備えており、これらは、対応する遷移又は到達する状態に関する情報を与えるものである。
【0024】
図2の情報は図1のFSMデータ構造体に単純に対応する。遷移ユニットは、例えば、アドレス1において、状態60と62との間の遷移に対応し、それ故、そのラベルフィールドに文字Aを有している。その後続ポインタフィールドは、状態62の第1出力遷移ユニットのアドレスを含んでおり、これは状態64への遷移に対応する。受け取った文字がアドレス1のラベルAに対応する場合には、アドレス2の遷移ユニットが、次に受け取る文字との比較のためにアクセスされる。状態60は出力遷移が1つしかないので、別の出力遷移ユニットはなく、従って、アドレス1の別のポインタフィールドはポインタを含まず、別のビットは0にセットされる。図1に示すように、状態62は最終状態であり、従って、アドレス1の最終ビットは1にセットされる。状態62は2つの出力遷移を有しているので、データ構造体の分岐路の終わりではなく、アドレス1の分岐終了(EOB)ビットも0にセットされる。同様に、アドレス2の遷移ユニットは状態62と64との間の遷移に対応し、アドレス3は状態64と66との間の遷移に対応し、アドレス4は状態62と68との間の遷移に対応し、アドレス5は状態68と70との間の遷移に対応し、そしてアドレス6は状態68と72との間の遷移に対応する。
【0025】
図2の情報は、図1の遷移に関する情報を含むだけでなく、状態及び状態と遷移の関係に関する情報も含んでいる。図1の各遷移に関する情報は、当然そのラベルを含んでおり、そして各状態に関する情報は、それが最終的なものであるかどうかの指示を含む。ラベルは、遷移に対応する各遷移ユニットのラベルフィールドにエンコードされ、そして最終ビットは、最終状態へと至る遷移の1つに対応する各遷移ユニットにおいてエンコードされ、従って、これら情報項目は遷移ユニットにおいて完全にエンコードされる。同様に、状態と遷移との関係に関する全ての情報もエンコードされるが、これはあまり単純ではない。ある状態に至る遷移の組は、後続ポインタフィールドがその状態からの第1出力遷移のアドレスを有しているような遷移ユニットを探すことによって見つけることができる。ある状態を去る遷移の組は、その状態に至る遷移ユニットのいずれかから簡単に見つけることができ、そして入力遷移ユニット各々の後続ポインタフィールドにアドレスを有する第1出力遷移ユニットと、該第1出力遷移ユニット又は1つの他の別の遷移ユニットの別のポインタフィールドに各アドレスをもつ別の遷移ユニットとを備えている。
【0026】
図2の情報についての上記分析から、別のビット及びEOBビットが冗長であることが明らかであろう。別のビットは別のポインタがあるときだけ1にセットされ、一方、EOBビットは後続ポインタがないときだけ1にセットされる。これは、これらのビットを除去できることを示唆する。図3はこれらビットが保持された同じデータ構造体をエンコードしたものであるが、後続ポインタ及び別のポインタが除去されており、別のビット及びEOBビットが除去される場合よりもエンコードデータ構造体に必要なスペースが大巾に減少されている。このコンパクト化は部分的に可能である。というのは、遷移ユニットがサブシーケンスに順序付けされて、各状態からの第1出力遷移ユニットがその状態に至る遷移ユニットの1つの直後に続くようにされるからである。又、遷移ユニットは、各その後の別の出力遷移ユニットが同じ状態からの手前の出力遷移ユニットから従属する遷移ユニットの直後に続くように順序付けされる。
【0027】
図3において、遷移ユニットのサブシーケンスの1つはアドレス1ないし3を含み、その全てが第1の出力遷移ユニットを含んでいる。別のサブシーケンスはアドレス4及び5を含み、アドレス4の遷移ユニットは、第1出力遷移ユニットがアドレス5にあるような状態へ通じる。換言すれば、図1のFSMデータ構造体の第1出力遷移ユニットの各々は、それに通じる遷移ユニットの直後に続くようにエンコードされる。それ故、受け取った文字が遷移ユニットからのラベルに対応する場合には、それにより生じる状態から第1出力遷移ユニットを探すのに後続ポインタは必要なく、アクセスされているメモリアドレスを増加するだけで簡単に見つけることができる。
【0028】
同様に、図3の遷移ユニットは、アドレス4及び6のその後の別の出力遷移ユニット各々がアドレス2及び5の手前の出力遷移ユニットから各々従属する遷移ユニットの直後に続くように順序付けされる。別のビットを有する遷移ユニットから従属してそれを含む各組の遷移ユニット内で、最後の遷移ユニットは、遭遇したEOBビットの全数が遭遇した別のビットの数に等しくなる唯一のユニットである。従って、アドレス3のEOBビットは、アドレス2の別のビットと対にされそしてそれに対してバランスされ、一方、アドレス5のEOBビット及び別のビットは互いにバランスする。各々の場合に、その後の別の出力遷移ユニットは、アドレスを経て進めていって、別のビット及びEOBビットを追跡し、そしてこれら別のビット及びEOBビットがバランスしたときに次のアドレスへ増加することにより見つけることができる。ここでも、別のポインタは必要ない。
【0029】
図2及び3に示すエンコードは各々図1の全FSMデータ構造体を含むが、FSMデータ構造体のいずれかの適当な部分にエンコード技術を適用することができる。更に、以下で明らかとなるように、エンコードされたデータ構造体にポインタを保持して、適宜、そのサイズを減少するか、又は受け取ったストリングとの比較の速度を高めることができる。又、以下で詳細に述べるように、図3の各遷移ユニットの情報は、更に圧縮することができる。というのは、主として、欠陥状態をもたないFSMデータ構造体の場合に、EOBビットが1であるときに最終ビットが0になり得ないからである。又、このような更なる圧縮は、1より大きい長さのポインタデータユニットを効率的に使用できるようにする。
【0030】
エンコードされたFSMデータ構造体は、典型的に、8ビット長さのバイトを有するメモリに記憶される。図4は、8ビットバイトがとる全部で256の値のバイトマップの一例であり、ラベル及び追加情報を含む値と、ポインタデータユニットに割り当てられた値との両方を含んでいる。
【0031】
ポインタデータユニットに割り当てられるバイト値は、説明上、ポインタデータユニットの3つの形式の第1バイトに対応する3つのブロックに分割され、これらは、各々、短い長さ及び中間長さのポインタインデックス並びに全長ポインタであって、例えば、1、2及び3バイト長さである。短い長さ又は中間長さの各ポインタインデックスは、実際には、アクセスされるべき遷移ユニットに対する全長ポインタが記憶されたテーブルエントリーをアクセスするのに使用されるオフセットであり、一方、各全長ポインタはポインタそれ自体を形成するものであって、もし必要であれば、使用される全ての位置をアドレスするために3バイトより大きな長さであってもよい。相当な数の短い長さのポインタインデックスを与えるために、ポインタデータユニットバイト値のほとんどがそれらに割り当てられるのが好ましい。図示された例では、8つのバイト値を除く全てが短いポインタインデックスに割り当てられ、これら残りの8つのうちの6つは中間長さポインタインデックスの第1バイトに割り当てられ、そして2つは全長ポインタの第1バイトに割り当てられる。しかしながら、この構成はある程度任意のものであり、バイト値の別の分割も適当である。図4において、バイト値の第1ブロックは、短い長さのポインタインデックスに割り当てられ、次の6つのバイト値は、中間サイズ即ち中間長さのポインタインデックスに割り当てられ、そして最後の2つのバイト値は、長いポインタ即ち全長ポインタに割り当てられる。
【0032】
図4は、ラベルがN個の個別の値のいずれか1つをとり、そして英語のアルファベット文字の場合に、Nが26より大きな整数であって、ハイフンやアポストロフィーのような文字も含むことができることを仮定している。このような余分な文字の各々は、通常のアルファベット文字に組み合わせて単一の逃避文字としてエンコードすることができる。これは、Nを小さく保持し、より多くのバイト値をポインタデータユニットとして使用するように残す。最終ビット、別のビット及びEOBビットの6つの考えられる組み合わせの各々に対し、N個の値のブロックは図示されたように割り当てられる。図4のバイトマップにおいて、各ブロックに1の値を有するビットはそのブロックに示されているが、図4におけるブロックの特定の構成はある程度任意であり、ブロックは多数の他の構成で順序付けすることもできる。
【0033】
上記したように、最終ビットが0であり且つEOBビットが1である2つの組み合わせは、FSMデータ構造体が欠陥状態を含まない限り生じることはなく、従って、ビット値の8つの考えられる組み合わせの中から6つだけを使用することは、欠陥状態のないデータ構造体をもつことに依存している。実際に、受け取ったストリングがデータ構造体内の一連の遷移(その最後の遷移が最終ビット1である)によって一致できないときに、欠陥状態に到達する。
【0034】
テーブル1は、バイト値のスペースを割り当てることのできる別の方法を示している。テーブル1は、8ビットバイト値を0から255までの範囲内で図4に示されたものと同様に割り当てる。Nは以下で詳細に述べる個別ラベルの数であり、P1 は長いポインタバイトコードの数であり、そしてP2 は中間サイズのポインタバイトコードの数である。テーブル1から明らかなように、短いポインタバイトコードの数は、255−(4N+P1 +P2 )である。
Figure 0003722231
Figure 0003722231
【0035】
図4のバイト値割り当てはテーブル1とは多数の点で異なる。図4では、バイト値のブロックが6つの異なる形式の文字に割り当てられ、各形式は、「最終」と、「別」と、分岐路の終わりを意味するEOBとのある組み合わせである。しかしながら、テーブル1では、特殊なEOBバイトに値0が割り当てられ、このバイトは、分岐路の終わりを表すいかなるバイトにも続くことができる。このバイトが短いポインタバイトとして処理される場合には、最終でなく且つそれ自身へ循環して戻るサブシーケンスを開始するデータユニットを指すことができ、EOBバイトの後に最終データユニットに到達することがないよう確保できる。
【0036】
このEOBバイトの結果、各文字は、4つの異なる形式、即ち、「最終」(受け入れられるとも称する)及び「別」(altとも称する)の4つの考えられる文字の組み合わせしかもたない。4つの形式の文字しかもたないことは効果的である。というのは、各文字の形式を、比較のためにマスクできる2つのビットで表すことができ、テーブルルックアップや他の複雑なバイト値のデコードを行う必要がないからである。それ故、図4のようにブロックを割り当てるのではなくて、テーブル1は、4つの連続するバイト値をN−1個の文字の各々に割り当てる。
【0037】
もう1つの相違は、テーブル1は4つの連続するバイト値をテーブルラベルに割り当て、これは、ポインタ又は文字として解釈されるものではなく、次のバイトがテーブルに対するポインタであることを指示するものである。テーブルラベルは、FSMの状態が非常に多数の出力遷移を有する場合にFSMから形成されたストリング組データに到達するのに必要な時間を節減するために使用することのできる任意の技術である。テーブルラベルは、FSMトランスジューサが一般的なルールを要約する場合や、FSMが受け入れられるストリングの合成を許す場合や、又は受け入れられるストリングと句読点マークのような他のエレメントとの複合であるストリングを分類するのにFSMが使用される場合に効果的であると分かっている。このような状況における状態は、非常に多数の出力遷移を有するFSMのスタート状態としばしば類似している。
【0038】
各テーブルは、各文字について1つづつのN−1個のエントリーで実施することができ、従って、他のラベル値、即ち文字バイトの各々に対して1つのエントリーがあり、テーブルラベルは最も高いラベル値を有するので、テーブルはテーブルラベル自体についてのエントリーを有する必要はない。これらエントリーは等しい長さのものであり、従って、所与のラベル値のエントリーは、ラベル値にエントリーの長さを乗算してテーブルに対するオフセットを得ることにより、アクセスすることができる。
【0039】
各エントリーはラベルバイトで開始する。ラベル値を、テーブルラベルに先行する位置から一致できる場合には、ラベル値のエントリーは、同じラベル値のラベルバイトを有する。しかし、ラベル値を、テーブルラベルに先行する位置から一致できない場合には、ラベル値のエントリーは、異なったラベル値のラベルバイトを有し、例えば、テーブルラベルバイトは、一致することのできない各エントリーに対するラベルバイトとして使用することができる。というのは、そのラベル値がいずれのエントリーのラベル値とも異なるからである。
【0040】
又、各エントリーは、ラベルバイトの後にポインタフィールドも備えており、このポインタフィールドは、全長ポインタを保持するに充分な大きさである。各全長ポインタは、例えば、3バイトであって、エントリーの長さが4バイトとなる。ラベル値をテーブルラベルに先行する位置から一致できる場合は、ラベル値のテーブルエントリーのポインタフィールドは、次のサブシーケンスがない場合に、ラベル又は特殊なEOBバイトに対する次のサブシーケンスを指すポインタを含む。
【0041】
上記したテーブルは、テーブルエントリーの幾つかが不適当となる状態により分担することができる。これは、テーブルラベルが常に最後の遷移となるように各状態の出力遷移を順序付けする場合に行うことができる。手前の出力遷移を用いて、テーブルエントリーが不適当となる遷移の情報を与えることができる。
【0042】
一般に、どの状態の後にテーブルラベルが続くかの選択は、時間と空間の複雑な兼ね合いを伴い、これは主として特殊なデータ及びタスクに依存している。多数のテーブルを使用すると、サーチ速度が改善されるが、テーブルを含むストリング組データを記憶するのに必要な空間が増加される。ある状態においては、これらテーブルは著しい速度の改善を生じると共に、全空間を減少する。というのは、非常に多数の状態が所与のテーブルを分担できるからである。
【0043】
文字に対する第1バイト値は256−4N(4の整数倍)である。それ故、各文字バイトの2つの下位ビットをマスクして、その文字を識別する6つの上位ビットを得ることができる。
【0044】
文字バイトは逃避コードを含むことができる。この逃避コードと、ストリング組データにおいてそれに続く別のバイトとを使用して、文字の全数がN−1より大きい場合にそれら文字をエンコードすることができる。各サイズのポインタの数を最適にするようにNを選択した場合にこのようになり勝ちである。
【0045】
図1ないし4及びテーブル1に示すエンコードの基本的な特徴は多数の方法で適用することができ、これら特徴の幾つかを含むエンコード方法の例を以下に説明する。
【0046】
B.エンコード方法
FSMデータ構造体は、従来、データ構造体の状態に対応するデータのユニットでエンコードされるので、FSMデータ構造体をエンコードする完全なプロセスは、通常、これら従来の状態ユニットから遷移ユニットを発生しそしてこれら遷移ユニットを適当に順序付けすることを含む。更に、エンコードプロセスは、エンコードされたFSMデータ構造体を圧縮する効果を奏する段階を含んでもよい。図5は、遷移ユニットの発生及び順序付けの間に多数の点において圧縮を与える段階が生じるエンコードプロセスを示すフローチャートである。図6ないし9は、図5のエンコードプロセスの一部を詳細に示すフローチャートである。
【0047】
図5のエンコードプロセスは、ボックス80で示すように、状態に関するデータと、これら状態の対応する出力遷移に関するデータとを含むデータの本体を受け取ることによって開始する。このようなデータ本体は、例えば、1組のストリングに対応するFSMデータ構造体である。各状態に関するデータは、一般に、その状態から導かれる遷移のリストと、その状態がその組における1つ以上のストリングの終わりであるかどうかの指示とを含む。各遷移に関するデータは、そのラベルと、その行き先である状態の指示とを含む。
【0048】
次いで、ボックス82において、関連遷移ユニットの順序を決定する各状態に関するデータを得なければならない。上記したように、遷移ユニットはあるシーケンスに順序付けされ、エンコードされたデータ構造体におけるポインタの必要性を減少することができる。というのは、このシーケンスを通して進むことにより第1及び別の出力遷移に到達することができるからである。しかしながら、データ構造体が手前の状態にループする遷移を含む場合には、ポインタが依然として必要である。又、以下で詳細に述べるように、ある状態が2つ以上の入力遷移を有していてその状態から従属する遷移を1回しか記憶する必要がない場合及び遷移ユニットの非常に長いブロックがポインタを用いてサブブロックに分割されてシーケンスを通して進む速度が不当に遅くならない場合にも、ポインタが依然として所望される。異なる長さのポインタを効率的に割り当てるために、ボックス82に示すように、各状態に対する入力ポインタをカウントするのが有用である。又、ボックス82には、各状態のコスト(その状態に依存する遷移ユニットのブロックがエンコードされたファイルにおいて占有するバイト数を意味する)がサブブロックの分割によって制限されることも示されている。
【0049】
上記したように、ポインタは、2つ以上の入力遷移を有する各状態の後の遷移ユニットのブロックに割り当てられる。但し、ポインタが指す遷移ユニットのブロックよりそのポインタが短い場合である。このような状態を識別するために、各状態への入力ポインタのカウントは、例えば、第1遷移の後にその状態の入力遷移の各々について増加されてもよい。又、ポインタを、遷移ユニットの長さブロックから動かされたサブブロックに割り当て、エンコードされたデータ構造体においてそれに続く遷移ユニットのブロックの長さに関して状態のコストを制限することもでき、これは、別の遷移ユニットへの途中でその状態を通過するに必要な時間を制御する。又、このような各サブブロックの手前の状態に対する入力ポインタのカウントも追跡される。ボックス84では、入力ポインタの数に基づいて状態が分類され、そしてポインタのサイズ及びそのサイズのポインタ又はインデックスが、入力ポインタを有する状態の第1出力遷移ユニットであって遷移ユニットの従属ブロックがポインタサイズよりも大きい第1出力遷移ユニットに割り当てられることが示されている。最も短いポインタインデックスは、ほとんどの入力ポインタを有する状態に割り当てられ、等々となって、全てのポインタインデックスが割り当てられそして全長ポインタが割り当てられる。
【0050】
ポインタインデックス及びポインタがいったん割り当てられると、ボックス86に示すように、遷移ユニットが発生されそして遷移ユニットに位置が割り当てられる。これを行う1つの方法は、最終的に最終状態へと導かれる各出力遷移に関するデータを状態ユニットから取り出しそして位置を入れることのできるフィールドを含むようにそれを拡張することである。最終的に最終状態に至らない遷移は取り除くことができる。位置が割り当てられると、対応するポインタインデックスを用いて各実際のメモリ位置を得ることのできるポインタテーブルを完成できるようになる。更に、この段階中に、スタート状態からの遷移ユニットの位置を含むテーブルを形成して、アクセス速度を高めることができる。
【0051】
又、非常に多数の出力遷移を有する他の状態に対しても、同様のテーブルを形成して、例えば、その状態からの第1出力遷移を一緒に含ませ、アクセス速度を上げることができる。インデックスがテーブルとして使用されて、各ビットが、それに対応する文字が特定の状態からの遷移を有するかどうかを指示する場合には、多数の出力遷移を有する状態に対し空間の節約を実現することができる。というのは、出力遷移のラベルをテーブルとは個別に記憶する必要がなくなるからである。テーブルの使用を指示するために、次に続く一連のバイトが所定長さの文字テーブルであることを指示するものとして図4からの1バイト値を割り当てることができる。受け取った文字の値を現在アドレスに加算して、最終的に最終状態へ至る遷移をその文字が有するかどうかを指示するビットを見つけることができる。しかしながら、一般に、多数の出力遷移を有する状態についてはテーブルを使用するのが効果的である。というのは、文字バイトを、固定数のバイトをもつ遷移に置き換えるからである。
【0052】
ボックス88において、テーブル及び遷移ユニットは、それらの位置に基づく順序でファイルに書き込まれる。バイト値は、そのラベルに基づくと共に、上記したようにそれが別のものを有しているか最終のものであるか又は分岐路の終わりであるかに基づいて、各遷移ユニットに割り当てられる。しかしながら、バイト値が書き込まれる前に、受け取った文字を、遷移ユニットにおけるラベルの値に対応する値に変換するためのテーブルを形成するのが適当であろう。次いで、ファイル内の多数の位置を使用して、最初の遷移或いは第1文字テーブル及びポインタテーブルが記憶される。更に、遷移ユニット及びポインタ自体のシーケンスがファイルに入力されてもよい。この点において、ファイルが完成し、以下に述べるように使用に供することができる。
【0053】
図5の段階の詳細は、図5の段階の特定の実施を示すフローチャートである図6ないし9から更に良く理解することができよう。図6は、状態に関するデータをボックス82においていかに得るかを更に詳細に示している。図7は、ボックス84においてポインタをいかに割り当てるかを詳細に示している。図8は、ボックス86において位置をいかに割り当てるかを示している。図9は、ボックス88においてファイルをいかに書き込むかを示している。
【0054】
図6のフローチャートはサブルーチンの呼び出しで始まり、この呼び出しは、ボックス90に示すように、現在走査されている状態を識別することを含む。ボックス92において、その状態がサブルーチンによって以前に尋ねられたものであるかどうかをチェックするテストが行われる。もしそうであれば、それは既に走査されており、再び走査する必要はない。というのは、以下に述べるように、走査プロセスは、状態を記憶する準備段階において、その走査された状態に基づく全ての状態を繰り返し走査するからである。それ故、既に走査された状態に基づく遷移ユニットのブロックを再び記憶する必要はなく、既に走査された遷移ブロックを指すポインタと置き換えることができる。ボックス94において、その状態に対する入力ポインタの数であるInPointersが、使用されるポインタとして増加される。次いで、ボックス96において、走査の結果が、ポインタインデックスのサイズの推定値であるPointer Cost値に等しくセットされ、この走査結果は、次いで、図6のルーチンを呼び出したルーチンへ返送される。
【0055】
同様に、ボックス98において、以前に尋ねられなかった状態に対してテストを実行して、その状態が何らかの残りの出力遷移を有しているかどうかをチェックする。もしそうであれば、これら遷移が導かれる行き先が走査される。出力遷移は、任意の順序になるか、或いはエンコードプロセスに先行する分類の結果による順序になり、ボックス100において、上位の未走査遷移の行き先が、反復呼び出しの際に、図6に示されたルーチンの開始(それが呼び出されたルーチンの開始Aと区別するためにA’と示されている)へ送られる。反復呼び出しされたルーチンが完了すると、その走査結果をB’(それが呼び出されたルーチンの返送部Bと再び区別されている)において返送する。
【0056】
反復呼び出しされたルーチンの完了時に、ボックス101においてテストが行われて、行き先のコストがPointer Costを越えるかどうかの判断がなされる。もしそうであれば、現在状態からポインタを経てこの行き先に対する情報には通常は到達しない。しかしながら、現在状態の全コストが、許容最大コストである値Mを越える場合には、この行き先をリモート位置へ移動しそして現在状態のブロック内にそれを指すポインタを含ませるだけで、過剰なコストを減少することができる。それ故、行き先は、後で考慮するために、costryDestsと称するリストに入れられる。次いで、出力遷移が導かれてきたところの状態のコストが、ボックス102において、ラベルをもつ遷移ユニットのコストと返送された走査結果との和だけ増加される。走査結果は、もちろん、出力遷移の行き先のコストである。ラベルをもつ遷移ユニットのコストは、典型的に、1である。次いで、ルーチンはボックス98へ復帰し、同じ状態の更に別の出力遷移が走査のために残っているかどうかテストされる。
【0057】
FSMデータ構造体は1つのスタート状態しかもたないので、図6の反復ルーチンでは、スタート状態から始めて全データ構造体が走査される。スタート状態の出力遷移の各々が走査されるときには、その遷移から従属するデータ構造体の分岐路全体が走査される。それ故、スタート状態の全ての出力遷移が走査されたときには、ボックス98ないし102を含むループ内に含まれた反復の結果としてデータ構造体全体が走査されている。
【0058】
状態の出力遷移が全て走査されたときには、ボックス104においてその状態のコストがテストされ、許容最大コストである値Mを越えるかどうかの判断がなされる。この最大コストはある程度任意のものでよく、別の出力遷移に到達するために状態から従属する分岐路を通過するのに費やす時間を制限するように働くものである。時間が減少される理由は、ブロックが分岐路から除去されて、それらの位置を指すポインタと置き換えられたからである。別の分岐路が得られるときには、これらのポインタがスキップされる。時間が全く問題にならず、データ構造体を記憶するのに必要なメモリ量が主たる問題である場合には、ボックス104のテストは不要である。
【0059】
状態コストがMを越える場合には、ボックス101で決定されたその状態からのコストのかかる行き先が、ボックス106において、それらの各々のコストに基づいて分類される。次いで、ループはボックス108で始まり、costlyDestsからの最もコストのかかる行き先のInPointers値が増加される。次いで、ボックス110において、その最もコストのかかる行き先で始まりそしてそこから従属する遷移及び状態を含んでいるブロックがルートリストへ移動される。このルートリストは、ポインタによって常時アクセスされるブロックのリストであり、換言すれば、ルートリスト内の各ブロックは、そこに導かれるいずれの遷移ユニットの直後にも配置されない遷移ユニットで開始される。ルートリストは、スタート状態で始まるブロックをその最後のエレメントとして有し、そしてその他のブロックは、FSMデータ構造体のこの走査中にそれらに遭遇したときにリストの前部に押し込まれる。ブロックの相対的な位置は任意であるから、ルートリストにおいてブロックの別の構成を使用することもでき、そしてスタート状態をルートリストの最後に押し込むこともできる。
【0060】
ボックス112では、現在状態のコストがポインタコスト値によって増加されるが、ルートリストへ移動されたブロックのコストにより減少される。次いで、ボックス114において、コストが再び値Mと比較され、状態のコストを最大値より低くもっていくためにブロック108ないし114を繰り返すべきであるかどうか判断する。
【0061】
状態コストがもはや最大値Mを越えないときには、ボックス116においてそれが走査結果として返送される。この走査結果は、典型的に、図6のルーチンを繰り返し呼び出したルーチンのボックス100へ返送される。しかしながら、返送されているコストがスタート状態のコストであるときには、走査結果は図5の全ルーチンへ返送される。この情報項目に加えて、図6のルーチンは、状態のInPointersを記憶し、図5のボックス84において分類を行えるようにする。
【0062】
図7は、図5のボックス84を実施する一連の段階を詳細に示している。ボックス120において、FSMデータ構造体の状態は、既に決定されている各々のInPointers値に基づいて分類され、最も多数の入力ポインタをもつ状態が分類リストの始めに来るようにされる。次いで、ボックス122において、ポインタサイズ及びポインタもしくはポインタインデックスをその分類された状態に割り当てる反復プロセスが最も短いポインタサイズで開始される。最も短いポインタインデックスは1バイト長さであり、中間サイズのポインタインデックスは2バイト長さであり、そして長いポインタは全3バイト長さである。各サイズは、それに対応する数の使用可能な値を有し、これは、短い及び中間サイズのポインタに対するポインタインデックス値、及び全長ポインタに対するポインタ値となる。
【0063】
現在ポインタサイズにおける使用可能なポインタインデックス又はポインタの数は、ボックス124において、現在ポインタ又はポインタインデックスと比較され、そのサイズの全てのポインタ又はインデックスが割り当てられたかどうかのチェックがなされる。もしそうでなければ、ボックス126において、分類された状態のうちの上位の状態のInPointers値が0であるかどうか判断するためにテストが行われる。
【0064】
InPointers値が依然として0より大きい場合には、ボックス130においてテストを行って、現在状態のもとで、全3バイトポインタが当然に唯一の適当なポインタサイズであるかどうかの判断がなされる。これは、他のポインタが使い尽くされた場合だけでなく、InPointersの数が1に過ぎない場合又はInPointersの数が2であって且つ現在ポインタサイズが2である場合にも言えることである。これら後者の場合には、短いポインタサイズは有効でない。というのは、InPointersの数が小さいときには、ポインタインデックスとポインタテーブルのエントリーとによって占有される空間が、全長ポインタによって占有される空間より大きくなるからである。
【0065】
全長ポインタのみが適当である場合には、ボックス132においてテストを行って、使用されるメモリ空間を減少するという点で全長ポインタが有用であるかどうか判断される。これは、ポインタが現在状態より多くの空間を消費しないように現在状態のコストが現在ポインタサイズ以上であるかどうかを最初にテストすることによって行われる。ポインタサイズが3に等しい場合には、更にテストを行って、それでもポインタが有用であるかどうか判断することができる。というのは、現在状態のコストが3だからであり、或いは現在状態のコストが2で、その第1遷移の行き先が少なくとも2のコストを有しそしてその行き先の現在ポインタサイズが1でないからである。行き先のポインタサイズは1でないから、それが0であって、2以上のポインタサイズしか割り当てできないことを意味するか、又はそれが既に少なくとも2であって、現在状態の実際のコストが3以上であり、ポインタを有用なものにするかのいずれかである。全長ポインタが有用である場合には、ボックス134において、分類されたリストの上位の状態に全長ポインタサイズが割り当てられる。ボックス134の後に、又はボックス132のテストが否定結果であった場合に、ルーチンはボックス136において次の分類状態へ進み、ボックス124において上位状態として次の状態で別の反復を開始するように復帰する。
【0066】
ボックス130のテストが否定結果であった場合には、ボックス138のテストで、現在ポインタサイズのポインタが有用であるかどうか判断され、これは、現在状態のコストが現在ポインタサイズより大きい場合に真となる。又、現在ポインタサイズが2の場合には、全長ポインタについて上記した同じテストを行って、中間サイズ長さのポインタが有用であるかどうかを判断することができる。もしそうである場合には、ボックス140において、その上位の状態に現在ポインタサイズ及び現在ポインタインデックスが割り当てられる。次いで、ポインタインデックスはボックス142において増加され、ルーチンはボックス136において次の状態へ進む。しかしながら、ボックス138のテストが否定結果である場合には、ルーチンはボックス136の次の状態へ直ちに進む。
【0067】
ボックス124及び126のテストの一方が肯定結果となるまで反復が続けられる。次いで、ボックス144において、現在ポインタインデックスが、割り当てられたサイズのポインタの数として返送される。この値は、そのサイズの使用可能なポインタの数より小さいことがある。というのは、ポインタはそれが有用なときしか割り当てられないからである。現在ポインタサイズが最長のポインタサイズでないことがボックス146で決定された場合には、ルーチンはボックス148において次のポインタサイズへ進み、次いで、ボックス124へと復帰する。しかしながら、最長のポインタサイズが完了した場合には、ルーチンは図5のボックス86の機能へと進み、これは図8に示すように実施される。
【0068】
図8の機能は、図5のボックス84から入る。最初の段階であるボックス158では、尋ねられたルートリストの状態がマークされ、この走査中にこれら状態の1つが尋ねられたときにポインタが割り当てられるよう確保する。ボックス160でテストして、ルートリストに未処理の状態がある場合には、これら未処理の状態の1つがボックス162において与えられ、そしてボックス164において、その与えられた状態がチェックされて、それがポインタサイズを有するかどうか調べられる。もしそうであれば、遷移ユニットの全シーケンスにおけるバイトの現在割り当て位置を表すバイトナンバーが、ボックス166において、ポインタサイズに基づいて割り当てられる。ポインタサイズが長くて、全長ポインタが使用されることを意味する場合には、バイトナンバーが全長ポインタの値として割り当てられる。さもなくば、バイトナンバーは、その状態に割り当てられたポインタインデックスに対応する適当なポインタテーブル内の位置に割り当てられる。通常は、データの状態ユニットがエンコードされたFSMデータ構造体に含まれず、従って、バイトナンバーは状態自体に割り当てられる必要はなく、第1の出力遷移ユニットのみに割り当てられる。それ故、ボックス166におけるバイトナンバーの割り当ては、適宜に第1の出力遷移ユニットを指すポインタを与えるようにのみ働く。
【0069】
ボックス164が否定結果である場合又はボックス166におけるバイトナンバーの割り当てが完了したときには、バイトナンバーの値が現在状態から従属する遷移ユニットに割り当てられる。これは、ボックス168においてその状態からのいずれかの出力遷移が、遷移ユニットを発生させそして値を割り当てるべく残されているかどうかテストするところから始まる。もしそうであれば、残っている遷移の上位の1つに対して遷移ユニットが発生され、そしてボックス170において現在バイトナンバーがそれに割り当てられる。次いで、その遷移の行き先が、ボックス172において、ポインタリストを通る現在の反復中に既に尋ねられたという指示に対してチェックされる。その行き先を最初に尋ねる際には、その結果が否定であり、ボックス174において、その行き先が、この反復において尋ねられているという指示でマークされる。次いで、ボックス176においてバイトナンバーが増加され、ボックス178においてその行き先が与えられて図8のルーチンの一部分の反復呼び出しが開始される。この反復呼び出しはA’で開始され、これは、呼び出しルーチンが図8のルーチンに入る位置Aと区別される。同様に、反復呼び出しはB’で終わり、これも、呼び出しルーチンが図8のルーチンを出る位置Bと区別される。それ故、反復呼び出しされる図8の唯一の部分は、ボックス164ないし182を含む部分である。反復呼び出しが完了した後、残りの遷移に対する別のテストがボックス168において行われる。
【0070】
ボックス172が肯定結果を生じて、その行き先が以前に尋ねられていることを指示する場合には、ボックス180において別のテストが行われて、その行き先にポインタサイズが割り当てられているかどうかの判断がなされる。もし割り当てられていなければ、その行き先から従属している遷移ユニットはポインタが有用にならないほど僅かであり、ボックス174ないし178を経て行き先に対して同じ反復が行われる。しかしながら、ボックス174における尋ねられた行き先のマーク付けはこの場合は不要であり、プログラミングを簡単にするためにのみ行われる。一方、行き先がポインタサイズを有する場合には、ポインタ又はインデックスが現在遷移ユニットの後に上記エンコードされたデータ構造体に挿入されて、その行き先からの第1出力遷移を指す。それ故、バイトナンバー値を次の遷移ユニットに割り当てる前に、ボックス812においてバイトナンバーを1+行き先のポインタサイズだけ増加することが必要である。
【0071】
ボックス160ないし182の機能は、ルートリストの全ての状態にバイトナンバー値が割り当てられるまで繰り返し実行される。その時点で、ボックス160のテストが否定結果となり、ボックス190において、現在バイトナンバーが返送される。次いで、ボックス192においてテストを行い、バイトの全数が、現在ポインタテーブルエントリーサイズでアドレス可能な空間内に記憶することのできる数より大きいかどうか判断される。例えば、2バイトのテーブルエントリー即ち16ビットが使用されている場合には、65,535バイトがアドレス可能である。このエンコード技術は、より大きなデータ構造体にも等しく適用できる。このような場合は、3バイトテーブルエントリーを使用することができ、全長ポインタの第1バイトについては図4の空間からのバイト値の多くを使用することができる。
【0072】
ボックス192において、バイトの全数がアドレス可能なバイトを越えると判断した場合には、ポインタテーブルエントリーはそれらが指す幾つかの遷移ユニットのアドレスを記憶するのに不充分であるから、オーバーフローが生じる。このオーバーフローは、ボックス194において、テーブルフィールドのサイズを増加するような適当な技術によって調整されるか、或いはそれで不充分な場合には、影響を受けるポインタを全長ポインタに変更しそして対応するエントリーをポインタテーブルブランクに残すことによって調整される。しかしながら、これは全シーケンス内の他のバイトの位置に影響を与えるので、ボックス160ないし182における機能の別の反復を、既に使用されたものとは異なる尋ねマークで実行することが必要とされる。オーバーフローが修正されそしてバイトナンバー値が再び割り当てられると、ボックス192において否定結果が生じ、ルーチンは図5のボックス88へ進み、これは図9に示すように実施される。
【0073】
図9の機能は、図示されたように、図5のボックス86から入ることができ、エンコードされたFSMデータ構造体をファイルに書き込むものである。先ず、ボックス200において、ルックアップの間に必要な値を含むインデックスヘッダが書き込まれる。これらの値は、スタート状態が最終であるかどうかを指示するためのフラグ;アルファベットのサイズN;ポインタテーブルエントリーのサイズ;ポインタデータユニットの各形式が始まるバイト値マップにおけるバイト値;ラベルバイトが始まるバイト値マップにおけるバイト値(256−6N);及びファイル自体におけるデータのテーブル又はブロックの各々のスタート位置を含む。次いで、ボックス202において、文字のコードが書き込まれ、これは典型的にASCIIコードである。これらのコードは、受け取った文字を、エンコードされたデータ構造体においてそれらを表す値に変換するのに用いられるテーブルを形成する。次の段階は、ボックス204において短いポインタテーブルを書き込みそしてボックス206において中間サイズのポインタテーブルを書き込むことであり、各々の場合に一連のポインタが書き込まれる。
【0074】
次いで、ボックス208ないし214において、アルファベットの文字がシーケンスで与えられそして値が繰り返し割り当てられて、スタート状態の出力遷移に対する位置のテーブルが形成される。各文字に割り当てられる値は、その文字に一致するラベルを有した上記スタート状態からの第1出力遷移ユニットの位置である。ボックス208において値を割り当てるべき文字が残っているかどうかをテストした後に、ボックス210において、スタート状態からの遷移ユニットのいずれかがその残っている文字のうちの次の文字に一致するラベルを有しているかどうかを判断するテストが実行される。もし有していなければ、ボックス212において、スタート状態からの最後の出力遷移ユニットの位置である標準的な値が書き込まれる。というのは、この遷移ユニットは、確かに不一致の正しい結果を与えるが、別のものをもたないので、不一致が検出された後はそれ以上の比較が行われないからである。文字が一致する出力遷移ユニットを有していない場合には、その一致する遷移ユニットの位置がボックス214において書き込まれる。いずれの場合にも、残りの文字に対するボックス208のテストが繰り返される。ボックス208ないし214の反復サブルーチンは、スタート状態の出力遷移に対してより迅速にエントリーできるようにし、そして同様のサブルーチンを使用して、FSMデータ構造体内の他の状態の出力遷移をより速い速度でアクセスすることができる。このデータ構造体は、僅かな出力遷移を有するのではなくて、非常に多数の出力遷移を有していて、しかも、その多くは従属遷移ユニットの大きなブロックを有するものである。この特殊なケースは、1つの独特のバイト値をその目的で割り当てることによって指示することができる。ボックス208のテストが否定結果になったときには、第1文字位置のテーブルが完成する。
【0075】
図8の場合と同様に、ルートリストの状態は、ボックス216において、この走査で尋ねられたとして最初にマークされ、この走査中にこれら状態の1つが尋ねられたときにポインタが割り当てられるよう確保する。次いで、エンコードされたFSMデータ構造体の遷移ユニットの書き込みが、ボックス218ないし234を含む反復サブルーチンにおいて行われる。ボックス218のテストで、何らかの未処理の状態がルートリストに残されているかどうか判断される。上記したように、FSMデータ構造体の遷移ユニットは、ルートリストの状態から従属するブロックの1つの中にあり、ルートリストには当然スタート状態が含まれている。それ故、ルートリストを通して進むことにより、エンコードされたFSMデータ構造体の全ての遷移ユニットが処理され、適宜に書き込まれる。最後の遷移ユニットが書き込まれると、ボックス218が否定結果となる。この場合に、全ファイルの長さがボックス236においてファイルの第1位置に書き込まれ、そしてルーチンが終了となる。
【0076】
ルートリストからの未処理の状態は、ボックス220において、ボックス218のテストが肯定結果である場合に与えられる。次いで、ボックス222において、その状態が残りの出力遷移に対してテストされる。残りの出力遷移がない場合には、ボックス218のテストが何の書き込みもせずに繰り返され、従って、エンコードされたFSMデータ構造体は、状態ユニットなしに書き込まれるか、又は出力遷移をもたない状態に関連したデータの他の個別ユニットなしに書き込まれる。このような状態についての全ての必要な情報は、その状態に通じる遷移ユニットに含まれる。
【0077】
状態が残りの出力遷移を有する場合には、ボックス224において、更に別の反復サブルーチンが行われて、第1の即ち上位の遷移ユニットのバイト値で始めて適当なデータが書き込まれる。このバイト値は、図4と同様のバイト値マップに基づいており、その遷移ユニットのラベルである文字の値が適当なバイト値ブロック内の第1バイト値に加えられて、書き込まれるべきバイト値に到達する。どのブロックが適当であるかは、上記したように、別のビット、最終ビット及びEOBビットの値に基づいている。
【0078】
遷移ユニットのバイト値が書き込まれたときには、ボックス226のテストが行われて、その遷移ユニットの行き先がこの走査の前に尋ねられたかどうか判断される。もしそうであれば、ボックス228の更に別のテストで、行き先がそれを指すポインタを有しているかどうか判断される。これらテストのいずれかが否定結果を生じる場合には、その行き先がボックス230において尋ねられたとマークされ、ボックス232の反復呼び出しの際に与えられる。この呼び出しは、図9のルーチンの位置Aに対応するA’において繰り返し呼び出されるルーチンに入る。これは、図9の位置Bに対応するB’において繰り返し呼び出されるルーチンを出る。それ故、繰り返し呼び出されるルーチンは、ボックス222ないし234の反復サブルーチンしか含まない。上記した他の走査の場合と同様に、繰り返し呼び出しの作用は、ルートリストの状態から従属するFSMデータ構造体の全ブロックのバイト値及びポインタを書き込むことである。
【0079】
ボックス226及び228のテストが両方とも肯定結果である場合には、その行き先は既に尋ねられていてポインタを有しており、従って、ボックス220に復帰する前に、ボックス234でその行き先ポインタを書き込むことが必要とされるだけである。この場合に、ルーチンの繰り返し呼び出しは不要である。
【0080】
図9のルーチンが完了すると、エンコードされたFSMデータ構造体を含むファイルは、図10に示す内容をもつことになる。全ファイルの長さは、0と示された第1バイト位置に現れる。長さLのインデックスヘッダは、バイト位置1ないしLに現れる。次いで、シーケンス内の文字に対応するASCIIコードがバイト位置L+1ないしL+Nに現れる。次いで、長さSの短いポインタテーブルがバイト位置L+N+1で始まって現れる。次に、長さMの中間サイズのポインタテーブルがバイト位置L+N+S+1で始まって現れる。次いで、各文字のスタート状態からの第1遷移の位置が、各々長さBで、バイト位置L+N+S+M+1で始まって記憶される。最後に、ポインタリストにより全シーケンス内の遷移ユニット及びポインタがバイト位置(L+N(B+1)+S+M+1)で始まり、ファイルの終わりまで続く。
【0081】
図10に示すファイルは、ROMへの記憶又はディスケットのようなポータブルメモリ媒体への記憶を含む適当な形態で記憶することができる。受け取った文字ストリングの評価にこれを使用するときは、上記した比較的簡単な一連の段階が実行される。
【0082】
C.製品の使用
上記したエンコード技術は、エンコードされたFSMデータ構造体をどのように使用するかをほぼ決定する。エンコードされたFSMデータ構造体を通常使用する1つの特定のタスクは、受け取った文字ストリングをチェック又は評価してそれがFSMによりカバーされたストリングの組の中にあるものかどうかを決定することである。本質的に、FSMデータ構造体は、受け取ったストリングをルックアップするのに使用され、その受け取ったストリングが見つかったかどうかを指示する適当な信号が発生される。
【0083】
図11は、図10に示したものと同様のエンコードされたFSMデータ構造体に適したルックアップ方法を示すフローチャートである。
【0084】
エンコードされたFSMデータ構造体においてルックアップされるべき文字ストリングがボックス240において受け取られる。ボックス242における予めのテストによりそのストリングが文字を有しているかどうかが決定され、もし有していない場合には、ボックス244においてスタート状態の最終ビットの値が返送され、これは、FSMデータ構造体がナルストリングを受け入れるかどうかを指示する。上記したように、スタート状態の最終ビットがファイルのインデックスヘッダに記憶され、この段階を行えるようにする。しかしながら、ストリングが少なくとも1つの文字を有する場合には、ルーチンは、ボックス246において、そのストリングの第1文字に対し第1文字のルックアップテーブルに指定された位置へ進む。これは、文字をASCIIからデータ構造体内の対応する値に変換しそしてその値に対応する第1文字テーブル内のエントリーをアクセスして、その文字に対応するスタート状態からの遷移ユニットの位置を得ることによって行われる。テーブルエントリーは、シークされる遷移ユニットの実際の位置を得るためにデータ構造体内の第1のエンコードされた遷移ユニットの位置に加えられるオフセットである。
【0085】
次いで、反復サブルーチンがボックス248のテストで始まり、その文字が現在位置における遷移ユニットのラベルに等しいかどうか判断される。もしそうであれば、文字は一致する。通常は、第1の反復の際に、一致が生じなければならない。というのは、その文字を用いて位置が得られたからである。しかし、スタート状態からの出力遷移をもたない文字の場合には、一致が生じない。というのは、上記したように、第1文字テーブルのテーブルエントリーは、確実に一致しない遷移ユニットの位置だからである。
【0086】
ボックス248において一致が生じた場合には、ボックス250の更に別のテストでその文字がストリングの最後のものであるかどうか判断される。これは、文字の数をストリング内の文字の数と比較することによって行われる。もし最後の文字であれば、ストリングの全ての文字が遷移ユニットからのラベルと一致しており、残りの質問は、最後の遷移ユニットが最終であるかどうかだけである。それ故、現在位置における遷移ユニットの最終ビット値がボックス252において返送され、これは、受け取ったストリングがエンコードされたデータ構造体でカバーされた組の中にあったかどうかをその値で指示する。
【0087】
一致した文字が受け取ったストリングの最後のものでない場合には、ボックス254のテストで、現在位置が後続項目(その行き先が少なくとも1つの出力遷移ユニットを有することを意味する)を有するかどうかを判断する。後続項目がある場合には、ボックス258において、ルーチンがそこへ進み、即ち第1出力遷移ユニットの位置へ進む。ボックス254のテストは、現在位置におけるバイト値のEOBビットをチェックすることによって開始される。これが0の場合には、後続項目があり、データ構造体内の次の位置へ進むことによってこれに到達する。しかしながら、その値がポインタである場合には、そのポインタによって指示された位置へルーチンが進む。これは、全長ポインタの場合には直接そこへ進み、或いは短い又は中間サイズのポインタインデックスの場合には適当なポインタテーブルを入力してその位置を得ることによりそこへ進む。次の位置に記憶された値によって適当な動作を決定することができ、この値は、図4のバイトマップのラベル部分又はポインタ部分のいずれかの値であることに注意されたい。又、ボックス260においては、受け取ったストリングの次の文字へ進むことも必要とされ、その後に、ボックス248のテストへと復帰する。現在位置が後続項目を有していない場合には、ボックス256においてナルが返送される。というのは、現在状態が出力遷移を有していないためにストリングのそれ以上の文字を一致することができないからである。
【0088】
ボックス248において不一致が生じたときには、ルーチンは、ボックス262において、現在位置にある遷移ユニットが別の出力遷移ユニットを有するかどうか判断しなければならない。これは、現在遷移ユニットの別のビットをテストすることによって行われる。上記した最終ビット及びEOBビットについては、遷移ユニットのバイト値をテストして図4のラベルのブロックのどれがそれを含むかを判断することによりこのテストを簡単に行うことができる。遷移ユニットが別のものをもたない場合は、ボックス264においてナルが返送される。
【0089】
別の遷移ユニットがある場合には、ルーチンは、ボックス266においてその別の遷移ユニットの位置へと進む。ルーチンは、データ構造体を通して一度に1位置づつ進み、遭遇する各別のビットごとにカウンタを増加し、そして遭遇する各EOBビットごとにカウンタを減少することにより、カウンタが0の値に達するまで進む。データ構造体を通して進む間に遭遇するポインタはスキップされるが、カウンタは減少される。これは、別のビットの数が、指示されたブロック内のEOBビットの数よりも1だけ小さくなければならず、従って、ポインタにより指示された遷移ユニットのブロックを通して進まずにカウンタを1だけ減少させることが必要だからである。カウンタが最終的に0に達して、別のビット及びEOBビットの数がバランスすると、データ構造体を通る更に1つのステップがルックアップルーチンを別のビットの位置へもっていくか、又は別のビットを指すポインタ又はインデックスへもっていく。上記した一致の後の後続項目の探索については、次の位置にあるバイト値がテストされて、それがラベルを含んでいるか、或いは別の状態と分担される別のものの位置へ至るポインタデータユニットであるかの判断がなされる。別のものの位置へ到達すると、ルーチンはボックス248のテストに復帰する。
【0090】
D.FSMデータ構造体の形式
図5ないし10のエンコード技術は、各遷移が単一のアルファベット文字でラベル表示される図1の簡単な確定ループなしのデータ構造体に加えて、FSMデータ構造体に多数の他の変更を受け入れることができる。しかしながら、ある場合には、これらの変更は、FSMデータ構造体の変更によりルックアップ方法の修正を必要とする。
【0091】
図5ないし10の特定のエンコード技術は、例えば、非確定のFSMデータ構造体と共に使用することができる。しかしながら、非確定のデータ構造体の場合には、全ての一致をピックアップするために状態の全ての出力遷移をチェックできるように図11のルックアップ方法を修正しなければならない。というのは、非確定のデータ構造体の状態は、単一のラベルをもつ2つ以上の出力遷移を有することがあるからである。ルックアップ方法は、例えば、一致する出力遷移に遭遇した位置を追跡し、そして受け取ったストリングのその後の文字の別の一致に対してこのような各遷移へ復帰することができる。
【0092】
又、図5ないし10の特定のエンコード技術は、ループを含むデータ構造体と共に使用することもできる。FSMデー構造体にループを含むことにより、無限のストリング組をカバーすることができる。ループは、例えば、ポインタが適切に割り当てられれば、任意の順序で生じる接頭語のような多数のサブストリングをカバーするFSMデー構造体に使用される。ループにおいて到達する状態には当然ポインタが割り当てられるので、エンコード技術は何らの変更も必要としない。ポインタが適切に割り当てられる限りは、図11のルックアップ方法は、ループ式データ構造体として機能するはずである。
【0093】
ある非確定FSMデータ構造体は、ε又は空遷移と称する特殊な形式の遷移を含み、これは、受け取ったストリングの次のエレメントへ進むことなくデータ構造体を通して進むことができるものである。ε遷移は、多数の状態が出力遷移の異なるグループを有しているが、出力遷移の各グループが互いに他と共通のサブ組を分担する場合にFSMデータ構造体のサイズを減少するのに用いることができる。共通のサブ組は、状態の1つに対して適当な位置に記憶されるが、他の状態の各々は、その共通のサブ組へと通じるε出力遷移を有する。又、このε遷移は、以下に述べるように、他の目的で使用することもできる。
【0094】
ε遷移を使用する場合には、エンコード技術を若干変更する必要がある。例えば、文字の組は、ε遷移に対して少なくとも1つの個別の文字を含まなければならない。しかしながら、各ε文字を通常の文字として処理するのではなく、それに独特のバイト値を与えるのが適当である。それ故、独特のバイト値を各々もつ2つ以上のε文字が、別のビット及びEOBビットの考えられる組み合わせごとに1つづ、必要となる。しかしながら、ε遷移が常に状態からの最後の出力遷移であるならば多くの場合ε文字は不要となることに注意されたい。というのは、ε遷移は、その行き先の第1出力遷移を指すポインタとして簡単にエンコードできるからである。一般に、ルックアップ方法は、ε遷移に遭遇するときには位置を追跡するが、そのラベルを一致させるような試みはなされず、それが導かれる状態の第1出力遷移がアクセスされることになる。
【0095】
多数のその他の変更は、FSMデータ構造体内に記憶された付加的な情報に関するものである。例えば、データ構造体は、最終状態に達したときに適当な出力を与えてもよい。この適当な出力は、各最終遷移の直後の所定長さのフィールドに記憶され、受け取ったストリングに更に文字が残っている場合はルックアップ方法がこの出力をスキップするが、最後の文字が最終遷移に一致する場合はこの出力を与えるようにすることができる。この場合に、出力の存在は、ファイルのヘッダ内のビットによって指示され、状態コストを計算する際にこれを考慮に入れることもできる。別の解決策では最終状態からのε遷移が使用され、これらのε遷移はポインタを介してこれら出力に通じている。これは、多数の最終遷移の後に同じ出力が生じた場合に特に有用である。同様に、FSM内のインデックス又はポインタは、ε遷移を使用せずに出力に通じることができるが、これも、受け取ったストリングに更に文字が残っている場合にはインデックス又はポインタをスキップすることを必要とする。
【0096】
更に別の変更は、バイト値の1つのブロックを用いて、第2の文字が続くことを指示し、従って、遷移ユニットが一対の値を含むようなデータ構造体である。例えば、その一方の値は受け取ったストリングの文字と比較することができそしてその他方はその比較が特定の結果となる場合に出力できるものである。又は、2つのストリングを受け取り、その一方のストリングの文字を一方の値と比較しそして他方のストリングの文字を他方の値と比較することもできる。このようにして、有限状態トランスジューサを表すFSMデータ構造体をエンコードすることができる。
【0097】
一般に、エンコード技術は、適当に変更することによりいかなるFSMデータ構造体にも適用することができると共に、非FSMデータ構造体にも適用することができる。
【0098】
E.エンコード及びルックアップ装置
エンコード及びルックアップ技術は、FSMデータ構造体をエンコードしそしてこのエンコードしたデータ構造体において受け取ったエレメントのストリングをルックアップするという機能を果たすために適当な装置において実施することができる。図12はエンコード装置を示しそして図13はルックアップ装置を示している。
【0099】
エンコード装置300は、図12に示すように、中央処理ユニット(CPU)302を中心とするもので、これは、エンコードを実行するようにプログラムすることのできる何らかのデータ処理システムである。
【0100】
CPU302は、FSM入力バッファ304からエンコードされるべきFSMデータ構造体を受け取る。バッファ304は、データ構造体を記憶することのできるメモリであるが、エンコードされるべきFSMデータ構造体を発生するのにもCPU302が使用される場合には、バッファ304は、CPU302の作用メモリの単なる一部分である。同様に、CPU302は、エンコードされたデータ構造体を出力ファイルバッファ306に与え、該バッファは、CPU302の作用メモリの一部であってもよいし、又は何らかの他の出力バッファであってこれを通してファイルを出力し使用するものであってもよい。
【0101】
CPU302のプログラムメモリ310は、実行すべきプログラムを記憶している。このプログラムメモリ310は、説明上、図5の方法と同様に多数のサブルーチンを呼び出すメインエンコードルーチン312を含んでいる。図示したサブルーチンは、図6ないし9に関連して上記した機能に一般的に対応している。サブルーチン314は、FSMデータ構造体の状態ユニットに関する情報、例えば、入力ポインタの数及びコストを収集し、そして状態のコストを制限する機能を実行することができる。サブルーチン316は、ポインタサイズ及びポインタインデックスを適当な状態に割り当て、状態の種類に基づいてこのように行うことができる。サブルーチン318は、遷移ユニットを発生しそしてそれらに位置を割り当て、ポインタテーブルを完成できるようにする。サブルーチン320はファイルを書き込み、そしてサブルーチン322を呼び出して、図4と同様のバイト値マップに基づいて遷移ユニットに特定のバイト値を割り当てることができる。
【0102】
プログラムメモリ310のプログラムを実行する間に、CPU302は、作用データメモリ330を使用して、データ構造体及びこれをエンコードするのに用いる他のデータを記憶する。作用データメモリ330は、説明上、一連の状態ユニット(SU)を備え、その各々の後には出力遷移から発生された出力遷移ユニット(TU)があり、そして更に、ポインタインデックステーブルのような一連のテーブルも備えている。プログラムの実行が完了すると、CPU302は、エンコードされたデータ構造体を出力ファイルバッファ306へ送る。
【0103】
図13のルックアップ装置350は、CPU352を中心とすることにより図12のエンコード装置300に類似している。実際に、同じCPUを両装置に使用できるが、実行すべき機能に対し異なったプログラムがなされる。CPU352は、文字入力バッファ354を経て文字のストリング又はルックアップすべき他のエレメントを受け取り、この入力バッファは、受け取った文字ストリングを一時的に記憶するように構成された通常の入力バッファである。同様に、CPU352は、受け取ったストリングをエンコードされたデータ構造体と一致し損なったときに欠陥信号出力356を経て欠陥信号を発生する。
【0104】
動作中に、CPU352は、プログラムメモリ360に記憶されたプログラムを実行する。このプログラムメモリ360は、説明上、図11の方法に対応するメインルックアップルーチン362を含み、このルーチン362は、多数のサブルーチンを呼び出すことができ、その幾つかの例を示す。サブルーチン364はエンコードされたデータ構造体内の位置をアクセスし、その位置に記憶されたバイトを検索する。サブルーチン366は、検索したバイトからのラベルを受け取った文字と比較して一致を見つける。サブルーチン368は、検索したバイトをテストし、その別のビット、最終ビット及びEOBビットを決定する。他のサブルーチンは、他の機能を実行するようにメインルックアップルーチン362から分割することができる。
【0105】
プログラムメモリ360のプログラムを実行する間に、CPU352は、図13にエンコードされたFSMメモリ370と示されたメモリの一部分にエンコードされたデータ構造体を保持する。更に、ルックアップ工程中にデータを一時的に記憶するため、CPU352はその作用データメモリ380を使用する。一致が得られる限り、CPU352は一連の受け取ったストリングの各々をルックアップし続け、一致しないストリング、ひいては、FSMに受け入れられないストリングを見つけたときにのみ欠陥信号を発生する。
【0106】
F.その他
本発明は種々様々な用途を有する。スペルチェックは、エンコードされたFSMデータ構造体を用いて、受け取ったストリングを、カバーされたストリングの組に対してチェックする1つの応用例である。ハイフン接続、辞書、翻訳、光学文字認識、等を含む多数の他の応用例も当業者に明らかであろう。
【図面の簡単な説明】
【図1】1組のストリングを表す簡単なデータ構造体の一部分の状態及び遷移を示すグラフである。
【図2】図1のデータ構造体に対応する遷移ユニットのシーケンスを示す図である。
【図3】図2の遷移ユニットのシーケンスの圧縮した形態を示す図である。
【図4】バイトがとる値が、ラベル及び付加的な情報を含むある値と、ポインタデータユニットである他の値とをいかに含むかを示したバイトマップである。
【図5】FSMデータ構造体をエンコードする段階を示すフローチャートである。
【図6】図5に用いられるルーチンであって、データ構造体の各状態に対する入力ポインタをカウントしそして各状態のコストを制限するためのルーチンを示すフローチャートである。
【図7】図5に用いられるルーチンであって、ポインタサイズ及びインデックスをFSMデータ構造体の状態に割り当てるルーチンを示すフローチャートである。
【図8】図5に用いられるルーチンであって、FSMデータ構造体の遷移ユニットに位置を割り当てるルーチンを示すフローチャートである。
【図9】図5に用いられるルーチンであって、テーブルと、バイト値が順に割り当てられた遷移ユニットとの両方を含むエンコードされたFSMデータ構造体を備えたファイルを書き込むルーチンを示すフローチャートである。
【図10】図9のルーチンに基づいて書き込まれたエンコードされたFSMデータ構造体を含むファイルを示すメモリマップである。
【図11】図10のエンコードされたFSMデータ構造体において受け取った文字ストリングをルックアップする方法を示すフローチャートである。
【図12】エンコード装置を示すブロック図である。
【図13】図10のエンコードされたデータ構造体を含むルックアップ装置を示すブロック図である。
【符号の説明】
60 スタート状態
62、66、70、72 最終状態
300 エンコード装置
302 CPU
304 FSM入力バッファ
306 出力ファイルバッファ
310 プログラムメモリ
330 作用データメモリ
350 ルックアップ装置
352 CPU
354 文字入力バッファ
356 欠陥信号出力
360 プログラムメモリ
370 エンコードされたFSMメモリ
380 作用データメモリ

Claims (2)

  1. 文字のストリングでストリング組データをサーチする方法において、上記ストリング組データは1組のストリングを指示するものであり、上記ストリング組データは、第1データ項目を含むデータ項目のシーケンスを備えており、上記第1データ項目は、1組の文字形式のうちの少なくとも1つを指示する第1項目のラベル情報と、第1項目のサーチ情報とを含み、該第1項目のサーチ情報は、上記第1データ項目が次のデータ項目を有しているかどうかを指示する第1項目の次の情報と、上記第1データ項目が別のデータ項目を有しているかどうかを指示する第1項目の別の情報とを含んでおり、上記方法は、
    上記第1データ項目アクセスし、
    上記ストリングにおける現在文字が上記第1項目のラベル情報に一致しそして上記第1項目の次の情報が、上記第1データ項目が次のデータ項目を有していると指示する場合に、上記第1データ項目のシーケンスにおける位置に基づいて次のデータ項目アクセスし、そして
    上記ストリングにおける現在文字が上記第1項目のラベル情報に一致せずそして上記第1項目の別の情報が、上記第1データ項目が別のデータ項目を有していると指示する場合に、上記第1データ項目のシーケンスにおける位置に基づいて別のデータ項目アクセスするという段階を備えたことを特徴とする方法。
  2. メモリと、メモリにアクセスするように接続されたプロセッサと、メモリに記憶されたストリングデータとを有するマシンを動作させる方法であって、
    前記ストリングデータが、エレメントストリングの組を指示しており、前記ストリングデータが、メモリに記憶された複数のデータユニットから成り、それによって、前記プロセッサが前記記憶されたデータユニットにアクセスしてその記憶されたデータユニットをエレメントストリングについてサーチできるようにし、
    前記記憶されたデータユニットが、一連の複数のサブシーケンスのデータユニットから成り、各サブシーケンスが、ラベルの組の少なくとも1つを指示するサブシーケンスラベル情報と、記憶されたデータユニットをエレメントストリングについてサーチする際にプロセッサによって使用するためのサブシーケンスサーチ情報を有し、各エレメントがラベルの組の一つのインスタンスであり、
    各サブシーケンスのサブシーケンスサーチ情報が、
    ストリングの現在エレメントがサブシーケンスラベル情報により指示されたラベルのインスタンスである場合に、サブシーケンスがプロセッサが進むデータユニットの次のサブシーケンスを有すること、又は、サブシーケンスが次のサブシーケンスを有しないことのいずれかを指示するサブシーケンスの次の情報と、
    ストリングの現在エレメントがサブシーケンスラベル情報により指示されたラベルのインスタンスでない場合に、サブシーケンスがプロセッサが進むデータユニットの別のサブシーケンスを有すること、又は、サブシーケンスが別のサブシーケンスを有しないことのいずれかを指示するサブシーケンスの別の情報と、
    を含み、
    前記記憶されたデータユニットは、一連のサブシーケンスが位置決めされるようにメモリに順序付けられ、このサブシーケンスの位置決めは、プロセッサがサブシーケンスの最初の1つにアクセスし、最初のサブシーケンスがデータユニットの次のサブシーケンスを有することを最初のサブシーケンスの次の情報が指示する場合に、直後に続くサブシーケンスに進むことにより次のサブシーケンスにアクセスし、前記直後に続くサブシーケンスは、最初のサブシーケンスの次のサブシーケンスであり、また、プロセッサが最初のサブシーケンスにアクセスし、最初のサブシーケンスがデータユニットの別のサブシーケンスを有することを最初のサブシーケンスの別の情報が指示する場合に、最初のサブシーケンスとその別のサブシーケンスとの間のサブシーケンスにおけるサブシーケンスの次の情報とサブシーケンスの別の情報とだけを使用して別のサブシーケンスにアクセスするように、行われる、
    ような方法において、
    プロセッサを動作させてエレメントストリングを指示するデータを得る段階と、
    プロセッサを動作させてストリングデータをサーチしてエレメントストリングがストリング組の一つであるかどうかを決定する段階と、
    を有し、
    プロセッサを動作させてストリングデータをサーチする段階が、
    一連のサブシーケンスにおいて最初のデータユニットのサブシーケンスにアクセスし、エレメントストリングのうちの現在のエレメントが最初のサブシーケンスのラベル情報により指示されたラベルのインスタンスであるかどうかを決定する段階と、
    現在のエレメントが前記指示されたラベルのインスタンスであり、且つ、最初のサブシーケンスがデータユニットの次のサブシーケンスを有することを最初のサブシーケンスの次の情報が指示する場合に、直後に続くサブシーケンスに進むことにより次のサブシーケンスにアクセスする段階と、
    現在のエレメントが前記指示されたラベルのインスタンスでなく、且つ、最初のサブシーケンスがデータユニットの別のサブシーケンスを有することを最初のサブシーケンスの別の情報が指示する場合に、最初のサブシーケンスとその別のサブシーケンスとの間のサブシーケンスにおけるサブシーケンスの次の情報とサブシーケンスの別の情報とだけを使用して別のサブシーケンスにアクセスする段階と、
    を有することを特徴とする方法。
JP19122993A 1993-08-02 1993-08-02 コンパクトにエンコードされて記憶されたストリングの組を有する製品 Expired - Lifetime JP3722231B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP19122993A JP3722231B2 (ja) 1993-08-02 1993-08-02 コンパクトにエンコードされて記憶されたストリングの組を有する製品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP19122993A JP3722231B2 (ja) 1993-08-02 1993-08-02 コンパクトにエンコードされて記憶されたストリングの組を有する製品

Publications (2)

Publication Number Publication Date
JPH0785047A JPH0785047A (ja) 1995-03-31
JP3722231B2 true JP3722231B2 (ja) 2005-11-30

Family

ID=16271050

Family Applications (1)

Application Number Title Priority Date Filing Date
JP19122993A Expired - Lifetime JP3722231B2 (ja) 1993-08-02 1993-08-02 コンパクトにエンコードされて記憶されたストリングの組を有する製品

Country Status (1)

Country Link
JP (1) JP3722231B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61286966A (ja) * 1985-06-13 1986-12-17 Matsushita Electric Ind Co Ltd 言語処理装置
JPS62180471A (ja) * 1986-02-03 1987-08-07 Brother Ind Ltd 電子辞書検索装置
JPH0682370B2 (ja) * 1987-05-26 1994-10-19 シャープ株式会社 文字処理装置
JP2702927B2 (ja) * 1987-06-15 1998-01-26 株式会社日立製作所 文字列検索装置
JPH056272A (ja) * 1991-06-28 1993-01-14 Toshiba Corp ソフトウエア設計装置
US5625554A (en) * 1992-07-20 1997-04-29 Xerox Corporation Finite-state transduction of related word forms for text indexing and retrieval

Also Published As

Publication number Publication date
JPH0785047A (ja) 1995-03-31

Similar Documents

Publication Publication Date Title
US5613145A (en) Stored string data with element data units and pointer data units in distinct subranges of values
US6873986B2 (en) Method and system for mapping strings for comparison
US6233580B1 (en) Word/number and number/word mapping
US5488719A (en) System for categorizing character strings using acceptability and category information contained in ending substrings
US8838551B2 (en) Multi-level database compression
US3995254A (en) Digital reference matrix for word verification
US5721899A (en) Retrieval apparatus using compressed trie node and retrieval method thereof
US5497485A (en) Method and apparatus for implementing Q-trees
US5936560A (en) Data compression method and apparatus performing high-speed comparison between data stored in a dictionary window and data to be compressed
JPH1188192A (ja) データ圧縮方法及び装置
US5560037A (en) Compact hyphenation point data
US5815096A (en) Method for compressing sequential data into compression symbols using double-indirect indexing into a dictionary data structure
JPH09245043A (ja) 情報検索装置
US5553283A (en) Stored mapping data with information for skipping branches while keeping count of suffix endings
JP3722231B2 (ja) コンパクトにエンコードされて記憶されたストリングの組を有する製品
EP0649105A1 (en) Word/number and number/word mapping
EP0635796B1 (en) Compactly encoded stored string set and its use
EP0638187B1 (en) Categorizing strings in character recognition
EP0649106A1 (en) Compactly stored word groups
JP3720060B2 (ja) 関連ワードを得る方法及びシステム
JP2535655B2 (ja) 辞書検索方式
Marukawa et al. A High Speed Word Matching Algorithm for Handwritten Chinese Character Recognition.
JPH03257693A (ja) 文字認識結果修正方式
JP3018579B2 (ja) 名前検索処理装置
JPH02148174A (ja) Ocrによる住所データベース検索装置

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040308

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050808

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050907

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080922

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090922

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100922

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100922

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110922

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120922

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120922

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130922

Year of fee payment: 8

EXPY Cancellation because of completion of term