Algorithme de Sardinas-Patterson

En théorie des codes, l'algorithme de Sardinas-Patterson permet de déterminer si une partie d'un monoïde libre est un code en temps polynomial. Il est nommé d'après August Sardinas et George Patterson, qui le publièrent dans un article de 1953[1].

Objectif modifier

On considère un monoïde libre  . On appelle code à longueur variable ou code une partie   de   telle que le sous-monoïde engendré   est libre. L'algorithme de Sardinas-Patterson prend en entrée un alphabet   et une partie finie   de   et détermine si   est un code.

L'objectif est de pouvoir transcrire un mot dans un alphabet   en un mot dans l'alphabet   en associant à chaque lettre de   un nombre variable de lettres de  ,   étant alors l'ensemble des codages des lettres de  . On cherche alors à ce que ce code ne soit pas ambiguë. Par exemple, en code Morse, A est codé par .-, E par . et F par ..-.. Mais alors, ..-. peut être interprété comme EAE ou comme F. Le code Morse nécessite ainsi l'usage d'un autre caractère séparant les lettres[2].

Description de l'algorithme modifier

Si   et   sont deux parties de  , on pose  . On note   le mot vide. L'algorithme calcule les éléments de la suite d'ensembles définie par récurrence :

  •   et  
  •   pour  .

Si lors du calcul, on obtient un   égal à un des précédents, alors   est un code. Si l'un des   contient  , alors   n'est pas un code[2].

Terminaison modifier

Chacun des   est une partie de l'ensemble des facteurs des éléments de  . Or   est fini, donc l'ensemble des facteurs de ses éléments est fini (dans un monoïde libre, chaque élément ayant un nombre fini de facteurs), donc l'ensemble des parties de cet ensemble est fini. Par conséquent, des termes de la suite   se répètent. L'algorithme s'arrête donc nécessairement[2].

Correction modifier

La correction de l'algorithme s'énonce comme suit.

Théorème.   n'est pas un code si, et seulement si l'un des   contient  .

Démonstration.

(⇒) Supposons que   n'est pas un code. Si  , alors  . Sinon, on dispose de   et   égaux avec   et   deux suites d'éléments de   telles que  . On peut voir ce mot comme un segment, par exemple :

A0B0-----------------A1--------B1---------B2-----A2-----------------B3---------A3B4

Les lettres en majuscules notent des positions dans le mot, de manière que  ,   et ainsi de suite et de même pour les  , avec les crochets notant le facteur délimité par les deux positions. Exécutons l'algorithme sur cet exemple : comme   et   (avec  ) sont dans  , alors   est dans  . Ensuite, comme   est dans  , on a  . Ensuite , puis  . On peut ainsi faire augmenter de 1 l'indice de la lettre de gauche à chaque étape, en utilisant le terme de droite de l'union si l'ordre de   et   change dans les crochets, le terme de gauche sinon. Finalement, on arrive au même point à gauche et à droite :   et on obtient le critère voulu. Comme la suite des   est définie par récurrence, elle ne peut pas se répéter avant d'inclure  .

(⇐) Réciproquement, supposons   pour un entier   (le cas   est immédiat). Par exemple, on a   avec   et  . Alors  . De même, on a par exemple  , et donc  . En développant les  obtenus jusqu'à arriver dans  , on obtient une égalité donc chaque membre est une concaténation d'éléments de  . Par construction, le dernier mot de ces deux suites est différent : l'un est  , l'autre en est un suffixe strict. On a donc obtenu un même mot en concaténant deux suites différentes de   : ce dernier n'est donc pas un code[3].

Notes et références modifier

  1. (en) Sardinas, August Albert and Patterson, George W, « A necessary and sufficient condition for unique decomposition of coded messages », Proceedings of the Institute of Radio Engineers,‎ , p. 425-425 (lire en ligne)
  2. a b et c (en) Howie, John M. (John Mackintosh), Fundamentals of semigroup theory, Oxford, Clarendon, , 351 p. (ISBN 0-19-851194-9 et 978-0-19-851194-6, OCLC 32969870, lire en ligne)
  3. (en) Bandyopadhyay, G, « A simple proof of the decipherability criterion of Sardinas and Patterson », Information and Control,‎ , p. 331-336 (lire en ligne)