Rastell Toull

Site web consacrée à la Bretagne,
à l'Afrique du nord
à la chanson française,
à la recherche scientifique,
et à bien d'autres sujets ...

La numération monoalpha-multinumérique :
une numération compatible avec l'ordre lexicographique et la concaténation


par Jacques-Deric Rouault

Article original
Page publique
Page opérationnelle

Version 4.1 du
4 mai 2012

Table thématique
Table chronologique
Administrateur du site
Comment citer ce document ?
Jacques-Deric Rouault, 2012. La numération monoalpha-multinumérique : une numération compatible avec l'ordre lexicographique et la concaténation. Rastell toull page C104.

Résumé

    La numération monoalpha-multidécimale consiste à assembler un premier nombre constitué d'un seul chiffre alphabétique A-Z et un second nombre exprimé en écriture décimale classique en chiffres arabes. Le chiffre alphabétique code le nombre de chiffres décimaux du second nombre (A=1, B=2, …, Z=26). Ce procédé assure une comptibilité totale entre l'écriture décimale et le tri alphanumérique, avec un compacité maximale et un controle de redondance. Ce système numéral est totalement compatible avec l'ordre lexicographique utilisé sur les ordinateurs. Les nombres monoalpha-multidécimaux peuvent être directement concaténés et le résultat reste compatible avec l'ordre lexicographique. Ce système numéral offre un outil économique de nommer toutes les branches d'un arbre.

Contexte

    Différents système de numération sont connus depuis la plus haute antiquité. Dans sa remarquable encyclopédie sur les nombres, Georges Ifrah en a recensé une extraordinaire diversité. Cependant, c'était compter sans l'avènement de l'outil informatique. Je me suis trouvé confronté à la gestion de milliers de dossiers sont les noms étaient constitués de nombres. Or les systèmes informatiques classent les fichiers en suivant l'ordre lexicographique et non l'ordre numérique naturel des nombres, si bien que 11 se retrouve classé entre 1 et 2. Pour retrouver mes fichiers suivant l'ordre naturel, j'ai préfixé ces nombres par une lettre qui correspondait au nombre de chiffres. Grace à cet artifice, le tri lexicographique restituait l'ordre naturel. Au cours de discussions informelles, des collègues ont trouvé cela astucieux, et en creusant je me suis rendu compte que ce système, pourtant évident a posteriori, n'était pas connu ni publié. L'objet de cette page est de publier ce système de numération et ses propriétés, et de prendre date.

Introduction

    Quand on code un nom de fichier ou de répertoire par un nombre, le tri alphanumérique restitue très imparfaitement l'ordre numérique des nombres. Par exemple, le tri alphanumérique des nombres 1, 2, 3, 4, 10, 11, 12, 20, 23, 105 donne l'ordre 1, 10, 105, 11, 12, 2, 20, 23, 3, 4 en lieu et place de l'ordre numérique naturel. Nous recherchons ici une numération des nombres entiers à la fois proche de la numération décimale classique et compatible avec l'ordre alphanumérique.

Première solution

    Une première solution consiste à préfixer le nombre décimal par des zéros, ce qui impose aux nombres d'avoir tous le même nombre de chiffres. La compatibilité avec l'ordre alphanumérique est alors assurée. Cependant, cela oblige à fixer a priori la valeur du plus grand entier codable, valeur qui en général n'est pas connue lors de l'initiation du processus.

    Deux écueils sont alors possibles : dans le premier, on surestime le plus grand entier codable et on traîne une ribambelle de zéros inutiles, ce qui alourdit considérablement l'écriture et réduit singulièrement la lisibilité. Dans le second, on sousestime la valeur du plus grand entier codable et il faut alors à chaque fois réviser la numération en cours en intercalant un zéro supplémentaire en tête de tous les noms de fichiers ou de répertoires déjà créés. Cette révision ne pose pas de problème technique particulier, mais son coût peut être prohibitif, comme ce fut le cas pour le bug de l'an 2000 (Y2K bug) où le codage de l'année sur les deux derniers chiffres au lieu des quatre faisait que l'année 1999 était suivie de l'an 1900. La numération ascendante "...97, 98, 99, 00..." devenait soudainement invalide.

Seconde solution

Dans la seconde solution avancée ici, nous proposons de préfixer le nombre décimal par un premier chiffre qui code le nombre de chiffres qui composent le nombre décimal. Pour faciliter la lecture et limiter les confusions, le premier chiffre est pris dans l'alphabet latin avec la convention A=1, B=2, C=3, ..., Z=26. Ce chiffre peut être a priori  indifféremment écrit en caractères majuscules ou minuscules, mais pour éviter certains problèmes avec les systèmes d'exploitation qui différentient les minuscules des majuscules (comme UNIX), l'usage des majuscules est fortement recommandé.

Cette numération monoalpha-multidécimale s'écrit comme suit : A0, A1, A2, ..., A9, B10, B11, ..., B99, C100, C101, ..., C999, D1000, D1001, etc ...

La compatibilité avec l'ordre alphanumérique est parfaite (propriété que n'a pas la numération décimale), et la compacité est optimale puisqu'on a ajouté un seul chiffre à l'écriture décimale classique.

La plus grande valeur exprimable dans cette numération est 1026-1, ce qui suffit en général pour toutes les applications courantes.


Discussion

On connait déjà plusieurs numérations alphadécimales : la numération hexadécimale ou de base 16 basée sur les 10 chiffres arabes 0-9 et les 6 premières lettres majuscules de l'alphabet latin A-F,  les numérations hexatridécimale, sexatrigésimale, hexatrigésiale ou de base 36, basée sur les 10 chiffres arabes 0-9 et les 26 lettres de l'alphabet  latin A-Z, ou d'autres numérations de base 64.  Dans la numération monoalpha-multidécimale proposée ici, qui différe des numérations alphadécimales citées ci-dessus, les chiffres arabes et les caractères romains se placent à des endroits précis du nombre. C'est pourquoi, et pour éviter toute ambiguité, nous la qualifion de numération monoalpha-multidécimale afin de bien préciser que les nombres sont formés d'une lettre latine suivie d'un ou plusieurs chiffres arabes.

Coder des nombres à l'aide de lettres était une pratique assez courante dans l'antiquité, en particulier dans les civilisations grecque et hébraïque (Ifrah 1981). Cependant, dans ces alphabets, si les 9 premières lettres codaient les unité, les 10 suivantes codaient les dizaines et les dernières lettres les premières centaines. Il existe cependant un système archaique de numération basé sur les 24 lettres de l'alphabet grec, daté du VIe siècle avant JC, et analogue à celui décrit ici. Ce système, qui ne dépasse pas 24, est en particulier utilisé pour numéroter les 24 livres de l'Illyade et de l'Odyssée (Reinach, 1885). 

   
    Le type de codage proposé ici peut être également comparé à celui des chaines de caractères de longueur variable dans certains langages informatiques. Dans la chaine de caractères, chaque caractère est codé par un octet (valeur dans 0..255) et il y a un premier octet supplémentaire qui code le nombre effectif de caractères dans la chaine. Dans d'autres langages, la chaine est complétée par un octet qui contient une valeur prédéfinie (usuellement le code ASCII 3) qui marque la fin de la chaine, de la même manière que le codon stop dans une séquence ADN.    
   
    La  structure complète d'un nombre monoalpha-multidécimal peut également être interprétée comme intégrant un controle de redondance, comme un bit de parité (Spataru, 1987), garantissant l'intégrité dans le transfert ou le stockage des données. Toutes les séquences possibles ne sont pas valides, par exemple les nombres 1B2 et B123 sont incorrects et indiquent de façon évidente une corruption des données.

Extensions

Pour accroître la lisibilité des grands nombres entiers, il est d'usage d'intercaler régulièrement (tous les trois chiffres) un symbole séparateur : blanc, point (en français), virgule (en anglais). Cet usage demeure compatible avec la numération monoalpha-multidécimale, sous la réserve qu’ils soient appliqués à tous les nombres de la série. Pour des raisons de compatibilité avec les différents systèmes d'exploitation des ordinateurs, le choix du caractère blanc souligné (ASCII 95) retenu dans le langage ADA (Taft & Duff, 1997) sera très fortement conseillé.

Pour coder des nombres supérieurs à 26 chiffres, on codera alors la longueur sur deux caractères alphabétiques, ce qui autorise les nombres jusqu'à 1026*26 soit 10676. On parlera alors de numération dialpha-multidécimale. Et ainsi de suite …

Cette méthode de préfixage par un chiffre alphabétique peut également être étendue aux numérations binaires, hexadécimales, etc ...


Concaténation

La concaténation directe de deux ou plusieurs nombres entiers peut être lue comme un seul entier ou plusieurs entiers écrits suivant un format fixe. Par exemple le nombre 20080611 peut être également comme le 11e jour du 6e mois de l'année 2008 dans le format fixe AAAAMMJJ. Pour lever cette ambiguité, l'écriture D2008A6B11 indique clairement que le nombre figuré résulte de la concaténation de trois nombres entiers. Comme dans la table ASCII les chiffres (codes 48 à 57) sont codés avant les lettres majuscules (codes 65 à 90) et les caractères minuscules (codes 97 à 122), la concaténation des nombres monoalpha-multidécimale est totalement compatible avec l'ordre lexicographique. A1B12 se range avant B12A1 car A est avant B, A1C124 se range avant A1D1308 car C se range avant D.


Nommer les branches d'un arbre

Dans un arbre, le nom d'une branche est formé par la concénation du nom de la branche qui arrive au noeud et du nom représentant le rang de la branche au noeud. L'utilisation de la numération monoalpha-multidécimale offre une façon naturelle de nommer toutes les branches de l'arbre dans un ordre compatible avec l'ordre lexicographique (Figure 1)


F
igure 1 : Dénomination des branches d'un arbre par concaténation de nombres monoalpha-multidecimaux.

    Dans l'arbre de la figure 1, les noms des 46 branches sont automatiquement rangées par l'ordre lexicographique : A1, A1A1, A1A1A1, A1A1A2, A1A1A2A1, A1A1A2A2, A1A1A2A3, A1A1A2A4, A1A1A3, A1A2, A1A3, A1A3A1, A1A3A1A1, A1A3A2, A1A4, A1A4A1, A2, A2A1, A2A1A1, A2A1A1A1, A2A1A1A2, A2A1A2, A2A1A3, A2A1A3A1, A2A2, A3, A3A1, A3A1A1, A3A1A2, A3A1A3, A3A1A4, A3A1A5, A3A1A6, A3A1A7, A3A1A8, A3A1A9, A3A1B10, A3A1B11, A3A1B12, A3A1B13, A3A1B14, A3A2, A3A3, A3A3A1, A3A3A2, A4. L'ordre lexicographique décrit l'arbre en prenant à chaque noeud le branche la plus à gauche. Même pour une branche située au 4e niveau, son nom (par exemple A2A1A3A1) reste très lisible.


Applications

La numération monoalpha-multinumérique a été développé dans le contexte particulier de la constitution d'une base de données consacrée au recensement exhaustif des éléments transposables. Il s'agit de séquences relativement courtes d'ADN plus ou moins hautement répétées dans les génomes des différentes espèces vivantes. Un même élément transposable peut être retrouvé dans différents organismes et se trouve alors identifié sous des noms différents dans les différentes bases de données disponibles. Partant du fait que deux éléments transposables de longueurs différentes sont nécessairement différents, les éléments transposables recensés sont alors codés par la concaténation de deux nombres monoalpha-multidécimaux : le premier donne le nombre de paires de bases et le second second nombre qui donne son rang d'identification ;  par exemple C451B48. La comparaison d'un nouvel élément à ceux déjà recensés est alors très fortement accélérée suivant un processus classique de tri rapide, puisqu'il suffit de le comparer uniquement à ceux de longueur identique, dont le nom traduit le premier des deux nombres.

References

Ifrah G, 1981-1994.
L'alphabet et la numération. pp 511-545. In Histoire universelle des chiffres. Volume 1. Bouquins. Robert Laffont. 1042 pp
Ifrah G, 1998. The universal history of numbers. From prehistory to the invention of the coimputer, Wiley.

Reinach S. 1885. Traité d'épigraphie grecque. E Leroux, Paris. 2000 Reproduction en fac-similé.

Spataru A, 1987. Fondements de la théorie de l'information. Presses polytechniques Romandes. 644 pp.

Taft T, Duff RA, 1997.
ADA 95 Reference Manual. Language and standard libraries: International standard ISO/IEC 8652:1995(E). Lecture notes in computer sciences n°1246. Springer Verlag. 526 pp.

Bug de l'an 2000
http://fr.wikipedia.org/wiki/Passage_informatique_%C3%A0_l%27an_2000
http://en.wikipedia.org/wiki/Year_2000_problem

Numération
http://fr.wikipedia.org/wiki/Num%C3%A9ration
http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_num%C3%A9ration
http://fr.wikipedia.org/wiki/Les_Shadoks#Arithm.C3.A9tique_-_compter_en_Shadok
http://en.wikipedia.org/wiki/Numeral_system

Liens internes

Autolien
Numéro
Article
Auteur
Rubrique Sous-rubrique Nature
C104
La numération monoalpha-multinumérique
Jacques-Deric Rouault B41 Mathématiques
Numération
Article original

Cette page utilise les articles

Articles utilisant cette page
Numéro
Article
Auteur
Rubrique Sous-rubrique Nature
C115 Monoalpha-multinumeric numeration Jacques-Deric Rouault B41 Mathématiques
Article original
C128
Les bases d'informations
Jacques-Deric Rouault
B42 Informatique
Article original

Articles connexes

Page d'accueil
Table thématique
Table chronologique
Administrateur du site / Contact