符号理論において、サルディナス・パターソンアルゴリズムは、与えられた可変長コードが一意に復号可能かどうかを多項式時間で判定する古典的なアルゴリズムであり、1953年に発表したオーガスト・アルバート・サルディナスとジョージ・W・パターソンにちなんで名付けられました。 [ 1 ]このアルゴリズムは、2つの異なるコードワードへの分解を許容する文字列を体系的に探索します。クヌースが報告しているように、このアルゴリズムは、当時すでに符号理論でよく知られていたにもかかわらず、約10年後の1963年にフロイドによって再発見されました。 [ 2 ]
コードを検討してください このコードは、Berstel [ 3 ]の例に基づいており、文字列が一意に復号できないコードの例です。
符号語のシーケンスとして解釈できる
しかし、それはコードワードのシーケンスとしても表される。
このエンコードされた文字列の2つの可能な復号化は、cdbとbabeによって与えられます。
一般的に、コードワードは次の考え方で見つけることができます。最初のラウンドでは、2つのコードワードを選択します。そしてそのためは接頭辞ですつまり、 何らかの「ぶら下がり接尾辞」のために最初に試してみるそしてぶら下がり接尾辞は2つのシーケンスを見つけることができればそして次のようなコードワード そうすれば終わりです: なぜなら、その文字列はあるいは、次のように分解することもできます。そして、目的の文字列は少なくとも2つの異なるコードワードへの分解を持つことがわかった。
第2ラウンドでは、2つの異なるアプローチを試します。最初の試みは、wを接頭辞とする符号語を探すことです。すると、新しいダングリングサフィックスwが得られ、これを使って検索を続けることができます。最終的に、それ自体が符号語(または空語)であるダングリングサフィックスに遭遇した場合、2つの分解を持つ文字列が存在することがわかっているので、検索は終了します。2番目の試みは、それ自体がwの接頭辞である符号語を探すことです。この例では、次のようになります。、そしてシーケンス1はコードワードです。したがって、次のように続けることもできます。新しいぶら下がり接尾辞として。
このアルゴリズムは、形式言語の商を用いて最も簡潔に記述できる。一般に、2 つの文字列の集合DとNに対して、(左) 商はは、 Nからいくつかの接頭辞を取り除いてDから得られる残余語として定義される。正式には、では、は、与えられた符号における符号語の(有限)集合を表す。
アルゴリズムはラウンドで進行し、各ラウンドでは、上述のように1つのぶら下がり接尾辞だけでなく、すべての潜在的なぶら下がり接尾辞の(有限)集合も保持します。ラウンド1から開始します。潜在的なぶら下がり接尾辞の集合は、次のように表される。セット帰納的に以下のように定義される。
。ここで、記号空の単語を表します。
すべての。
アルゴリズムは集合を計算します昇順. そのうちの 1 つがCの単語または空の単語が含まれている場合、アルゴリズムは終了し、与えられたコードは一意に復号できないと回答します。それ以外の場合は、一度セットが 以前に遭遇したセットと等しいとそうなると、アルゴリズムは原理的には無限ループに陥ってしまう。しかし、無限ループを続ける代わりに、与えられたコードは一意に解読可能であると答える。
左側のボックスで、指定されたコードに対するアルゴリズムの実行例を参照してください。小文字と大文字は、それぞれコードと「ぶら下がり接尾辞」文字列を表します。コードワードbが検出されると (赤色で表示)、アルゴリズムは停止します。右側のボックスは、アルゴリズムの実行中に収集された方程式を使用して、例の文字列 1110011 が複数のエンコーディング ( db、aae ) を持つことを示す方法を示しています。
すべてのセットは有限個のコードワードの接尾辞の集合であり、 の候補は有限個しかない。. いずれかのセットを 2 回訪問するとアルゴリズムが停止するため、アルゴリズムは無限に継続することはできず、常に終了する必要があります。より正確には、アルゴリズムが考慮するダングリングサフィックスの総数は、入力のコードワードの長さの合計に最大で等しいため、アルゴリズムはこの入力長の関数として多項式時間で実行されます。各ダングリングサフィックスとコードワードの比較を高速化するためにサフィックス ツリーを使用することで、アルゴリズムの時間は O( nk ) に制限できます。ここで、nはコードワードの合計長、kはコードワードの数です。[ 4 ]アルゴリズムはパターン マッチングマシンを使用して実装できます。[ 5 ]アルゴリズムは、対数空間のみを使用する非決定性チューリング マシンで実行するように実装することもできます。一意の解読可能性をテストする問題はNL 完全であるため、この空間制限は最適です。[ 6 ]
アルゴリズムが正しいこと、つまり常に正しい答えを出すことの証明は、 Salomaa [ 7 ]および Berstel ら[ 8 ]の教科書に見られます。