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
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
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
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
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
- (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)
- (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)
- (en) Bandyopadhyay, G, « A simple proof of the decipherability criterion of Sardinas and Patterson », Information and Control,â , p. 331-336 (lire en ligne)