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)". Sauf code licence open source explicite (indiqué Creative Commons / gratuit), l'algorithme pour "RLE (Run-Length Encoding)", l'applet ou snippet (convertisseur, solveur, chiffrement / déchiffrement, encodage / décodage, encryptage / décryptage, traducteur) ou les 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 les données, en téléchargement, script, ou les accès API à "RLE (Run-Length Encoding)" ne sont pas publics, idem pour un usage hors ligne, PC, mobile, tablette, appli iPhone ou Android !
Rappel : dCode est gratuit.
Le copier-coller de la page "RLE (Run-Length Encoding)" ou de ses résultats est autorisée (même pour un usage commercial) tant que vous créditez dCode !
L'exportation des résultats sous forme de fichier .csv ou .txt est gratuite en cliquant sur l'icone export
Citer comme source bibliographique :
RLE (Run-Length Encoding) sur dCode.fr [site web en ligne], consulté le 21/11/2024,