Code comma-free

En informatique théorique, et notamment en théorie des codes, et aussi en bio-informatique et notamment en génétique, un code comma-free (terme que l'on pourrait traduire par « code sans virgule ») est un code en bloc ou code uniforme dans lequel aucun mot du code n'est facteur interne[1] du produit de deux mots du code[2].

Les codes comma-free sont aussi connus sous le terme de « self-synchronizing block codes »[3],[4] parce qu'aucune synchronisation n'est nécessaire pour trouver le début d'un mot du code.

Motivation historique

Le code génétique est formé de codons. Chaque codon est une suite de trois nucléotides pris dans un « alphabet » de quatre lettres A, U, G, C (adénine, uracile, guanine, et cytosine). L'ensemble de 64 codons possibles forme un code uniforme. Chacun des codons possibles peut synthétiser l'un des 20 acides aminés naturels. Au début de la génétique, la question a été posée si l'ensemble des codons des 20 acides aminés était un code comma-free ; en effet le nombre maximum d'éléments d'un code comma-free de longueur 3 sur 4 lettres est exactement 20. S'il y avait bijection entre acides aminés et codons, le décodage pouvait se faire sans synchronisation[5]. De fait, il n'en est rien[6].

Définitions

Un code sur un alphabet A {\displaystyle A} est un ensemble C {\displaystyle C} de mots non vides sur A {\displaystyle A} tel que tout produit de mots de C {\displaystyle C} se factorise de manière unique comme produit : formellement, si

c 1 c 2 c n = d 1 d 2 d m {\displaystyle c_{1}c_{2}\cdots c_{n}=d_{1}d_{2}\cdots d_{m}}

pour n , m 1 {\displaystyle n,m\geq 1} et c i , d j C {\displaystyle c_{i},d_{j}\in C} , alors

n = m {\displaystyle n=m} et c i = d i {\displaystyle c_{i}=d_{i}} pour tout i {\displaystyle i} .

Un autre formulation de la propriété est que le sous-monoïde C {\displaystyle C^{*}} engendré par C {\displaystyle C} est librement engendré par C {\displaystyle C} , donc que C {\displaystyle C} est une base du sous-monoïde C {\displaystyle C^{*}} . Les mots composant un code C {\displaystyle C} sont appelés les « mots du code », un produit de mots du code est un « message ». Si B {\displaystyle B} est un alphabet en bijection avec C {\displaystyle C} , une fonction bijective f : B C {\displaystyle f:B\to C} s'étend naturellement en un morphisme de B {\displaystyle B^{*}} sur C {\displaystyle C^{*}} qui, à tout mot w = b 1 b n {\displaystyle w=b_{1}\cdots b_{n}} sur B {\displaystyle B} associe le message

f ( b 1 b n ) f ( b 1 ) f ( b n {\displaystyle f(b_{1}\cdots b_{n})f(b_{1})\cdots f(b_{n}} ).

L'application f {\displaystyle f} est un « morphisme de codage », l'application inverse f 1 {\displaystyle f^{-1}} est le « décodage ».

Un code uniforme ou code en bloc est un code dont tous les mots ont même longueur, appelée la longueur du code. Un code comma-free est un code uniforme tel qu'aucun mot du code n'est facteur interne du produit de deux mots du code : Si p c s = c 1 c 2 {\displaystyle pcs=c_{1}c_{2}} pour des mots du code c , c 1 , c 2 {\displaystyle c,c_{1},c_{2}} , alors p {\displaystyle p} ou s {\displaystyle s} est le mot vide. Golomb et. al.[2] donnent la formulation explicite suivante : si a 1 a 2 a n {\displaystyle a_{1}a_{2}\cdots a_{n}} et b 1 b 2 b n {\displaystyle b_{1}b_{2}\cdots b_{n}} sont éléments du code C {\displaystyle C} , alors aucun des mots a 2 a n b 1 {\displaystyle a_{2}\cdots a_{n}b_{1}} , a 3 a n b 1 b 2 {\displaystyle a_{3}\cdots a_{n}b_{1}b_{2}} , ..., a n b 1 b 2 b n 1 {\displaystyle a_{n}b_{1}b_{2}\cdots b_{n-1}} n'est dans C {\displaystyle C} .

Taille d'un code comma-free

Tous les mots d'un code comma-free sont primitifs. La taille, c'est-à-dire le nombre d'éléments d'un code comma-free de longueur n {\displaystyle n} est donc majorée par le nombre de mots primitifs de longueur n {\displaystyle n} , qui est aussi le nombre de colliers apériodiques de longueur n {\displaystyle n}  ; ce nombre est égal à

M k ( n ) = 1 n d n μ ( d ) k n / d {\displaystyle M_{k}(n)={1 \over n}\sum _{d\mid n}\mu (d)k^{n/d}}

pour un alphabet à k lettres. Ici, μ {\displaystyle \mu } est la fonction de Möbius. Si on note W k ( n ) {\displaystyle W_{k}(n)} la taille maximale d'un code comma-free de longueur n {\displaystyle n} sur un alphabet à k {\displaystyle k} lettres, on a donc W k ( n ) M k ( n ) {\displaystyle W_{k}(n)\leq M_{k}(n)} . Golomb et al. ont démontré[2] qu'il y a égalité si la longueur n {\displaystyle n} des mots du code est impaire et inférieure à 15 ; le cas général a été prouvé par Willard L. Eastman[7]. On a donc:

W k ( n ) = M k ( n ) = 1 n d n μ ( d ) k n / d {\displaystyle W_{k}(n)=M_{k}(n)={1 \over n}\sum _{d\mid n}\mu (d)k^{n/d}} si n {\displaystyle n} est impair.

Willard L. Eastman donne de plus un algorithme pour construire ces codes. Un autre algorithme est donné par Robert A. Scholtz[8]. Pour k = 4 {\displaystyle k=4} lettres et des mots de longueur n = 3 {\displaystyle n=3} , on trouve la valeur 20, en concordance avec la conjecture de Crick et. al.

Knuth parle du premier algorithme dans sa conférence de Noël. L'algorithme d'Eastman est développé par Knuth comme exemple de backtracking[4]. Il existe des liens entre codes comma-free et les ensembles Hall et les ensembles de Lazard[9]. Le résultat sur la maximalité est faux pour les mots de longueur paire, et aucune formule n'est conjecturée pour la cardinalité d'un code comma-free de longueur paire n sur k lettres[4].

Notes et références

  1. Un mot x {\displaystyle x} est facteur interne d'un mot y {\displaystyle y} si y = s x y {\displaystyle y=sxy} pour deux mots non vides s {\displaystyle s} et t {\displaystyle t} .
  2. a b et c Golomb et Gordon Welch.
  3. (en) Universal Commafree Codes, Donald Knuth () Stanford University.
  4. a b et c Knuth 2017, p. 9-10.
  5. Francis H. C. Crick, John Stanley Griffith et Leslie Orgel, « Codes without commas », Proceedings of the National Academy of Sciences of the U.S.A, vol. 43,‎ , p. 416–421 (lire en ligne, consulté le ).
  6. The most beautiful wrong ideas in science sur Chemistry Blog
  7. Eastman 1965.
  8. Scholtz 1969.
  9. Perrin et Reutenauer 2018.

Bibliographie

  • Solomon W. Golomb, Basil Gordon et Lloyd R. Welch, « Comma-free codes », Canadian Journal of Mathematics, vol. 10,‎ , p. 202–209 (ISSN 1496-4279, DOI 10.4153/CJM-1958-023-9, lire en ligne).
  • Willard L. Eastman, « On the construction of comma-free codes », IEEE Trans. Inform. Theory, vol. IT-11,‎ , p. 263–267.
  • Robert A. Scholtz, « Maximal and variable length comma-free codes », IEEE Trans. Inform. Theory, vol. IT-15,‎ , p. 300–306.
  • Donald E. Knuth, « Introduction to backtracking. », dans The Art of Computer Programming, vol. 4. pre-fascicule 5b, Addison-Wesley, (lire en ligne)
  • Dominique Perrin et Christophe Reutenauer, « Hall sets, Lazard sets and comma-free codes », Discrete Mathematics, vol. 341, no 1,‎ , p. 232-243 (ISSN 0012-365X, DOI 10.1016/j.disc.2017.08.034, lire en ligne)

Articles connexes

Lien externe

  • (en) Universal Commafree Codes, Donald Knuth () Stanford University.
  • icône décorative Portail de l'informatique théorique