Outil pour encoder/décoder avec Run-Length Encoding (RLE), un algorithme de compression de données basique consistant a décrire une chaine en fonction de ces répétitions.
RLE (Run-Length Encoding) - dCode
Catégorie(s) : Compression
dCode est gratuit et ses outils sont une aide précieuse dans les jeux, les maths, les énigmes, les géocaches, et les problèmes à résoudre au quotidien !
Une suggestion ? un problème ? une idée ? Écrire à dCode !
Run Length Encoding (ou RLE, ou codage par plages) est une technique de compression de données (sans perte) basée sur les répétitions successives d'éléments.
Run Length signifie longueur de course, et en effet, avec RLE, ce qui importe c'est la longueur, la taille des répétitions (dans un texte, un message, etc.)
RLE est un nom générique pour cette technique de compression, plusieurs manières de l'utiliser et de l'implémenter existent mais pour simplifier, RLE encode une séquence de valeurs identiques par une seule valeur suivie du nombre de répétitions.
Le texte à encoder est parcouru pour trouver des suites de caractères identiques, noter alors le caractère et le nombre de répétition dans la séquence/suite.
Exemple : DDDDDCCCCOOODDE peut être décrit par 5 fois le caractère D suivi de 4 fois le caractère C, etc. Le message peut donc être compressé D5C4C3D2E1 (10 caractères au lieu de 15, taux de compression : 33%).
Cette manière de procéder ne produit une compression que si le message est composé de nombreuses répétitions.
Exemple : DCODE serait compressé D1C1O1D1E1 (10 caractères au lieu de 5, taux de compression : -100%). Afin d'éviter ce genre de cas, il est possible d'omettre le 1 dans les cas de non-répétitions.
Variante d'écriture
Il est possible d'encoder en inversant les caractères et les décomptes.
Exemple : 5D4C3C2D1E est alors équivalent à D5C4C3D2E1
Cas de données binaires
Si le message est composé de données binaires (0 et 1), alors il est possible d'utiliser RLE sans indiquer le caractère, les nombres suffisent. Le premier chiffre indiquant les 0 (ou bien les 1) puis en alternance.
Exemple : 000111100000 se code 3,4,5
Cas de données numériques
Si le message est composé de chiffres, alors utiliser un séparateur sous peine de ne plus pouvoir distinguer les caractères de leur nombre de répétition.
Exemple : 11111111111122 se code 12-1,2-2 et non 12122 qui pourrait se traduire 1 répété 2122 fois, ou 1 fois 2 suivi de 12 fois le chiffre 2, etc.
La décompression RLE consiste à parcourir le message formé de couples (caractère, nombre de répétition) et d'écrire l'équivalent en répérant le caractère le nombre de fois correspondant.
Exemple : D5C4C3D2E1 se décompose en D5, C4, O3, D2, C1 et de répéter les caractères le bon nombre de fois : D5 => DDDDD puis C4 => CCCC, etc. pour obtenir DDDDDCCCCOOODDE
Cas de données binaires
Exemple : 3,4,5 se décode 00011110000 (ou 11100001111 selon la convention utilisée)
Un message compressé avec RLE est composé de couples (Caractère-Nombre) ou triples (Caractère-séparateur-Nombre)
Les formats d'image Bitmap BMP et PCX utilisent RLE pour réduire la taille des fichiers.
RLE est particulièrement efficace pour les données comportant de longues séquences répétitives (ou motif identique). Les images binaires, les images avec des zones de couleur unie (comme les logos simples), ou les fichiers texte avec des caractères répétitifs bénéficient souvent d'une compression efficace avec RLE.
A l'inverse, RLE n'est pas efficace pour les données sans répétition ou contenant peu de répétitions. Dans ces cas, la taille des données compressées peut même augmenter par rapport à la taille d'origine.
RLE peut être combiné avec d'autres algorithmes de compression pour améliorer les performances (fichiers plus compacts).
Le code source de la fonction RLE pour l'encodage :
function RLE_Encode(input_string) {
encoded_string = ""
count = 1
for (i = 1; i < length(input_string); i++) {
if (input_string[i] == input_string[i - 1]) {
count = count + 1
}
else {
encoded_string += input_string[i - 1] + count
count = 1
}
}
encoded_string += input_string[i - 1] + count
return encoded_string
}
La fonction de décodage se programme ainsi :
function RLE_Decode(encoded_string) {
decoded_string = ""
for (i = 0; i < length(encoded_string); i+=2) {
char = encoded_string[i]
count = encoded_string[i+1]
decoded_string += string_repeat(char, count)
}
return decoded_string
}
dCode se réserve la propriété du code source pour "RLE (Run-Length Encoding)". Tout algorithme pour "RLE (Run-Length Encoding)", applet ou snippet ou script (convertisseur, solveur, chiffrement / déchiffrement, encodage / décodage, encryptage / décryptage, traducteur) ou toutes fonctions liées à "RLE (Run-Length Encoding)" (calculer, convertir, résoudre, décrypter / encrypter, déchiffrer / chiffrer, décoder / encoder, traduire) codés en langage informatique (Python, Java, C#, PHP, Javascript, Matlab, etc.) ou toute base de données, ou accès API à "RLE (Run-Length Encoding)" ou tout autre élément ne sont pas publics (sauf licence open source explicite type Creative Commons). Idem avec le téléchargement pour un usage hors ligne sur PC, mobile, tablette, appli iPhone ou Android.
Rappel : dCode est une ressource éducative et pédagogique, accessible en ligne gratuitement et pour tous.
Le contenu de la page "RLE (Run-Length Encoding)" ainsi que ses résultats peuvent être copiés et réutilisés librement, y compris à des fins commerciales, à condition de mentionner dCode.fr comme source.
L'export des résultats est gratuit et se fait simplement en cliquant sur les icônes d'export ⤓ (format .csv ou .txt) ou ⧉ copier-coller.
Pour citer dCode.fr sur un autre site Internet, utiliser le lien :
Dans un article scientifique ou un livre, la citation bibliographique recommandée est : RLE (Run-Length Encoding) sur dCode.fr [site web en ligne], consulté le 17/04/2025,