Aller au contenu

Delta encoding⚓︎

Le codage par différence (delta encoding en anglais) permet de compresser un tableau de données en indiquant pour chaque donnée, sa différence avec la précédente (plutôt que la donnée elle-même). On se retrouve alors avec un tableau de données assez petites nécessitant moins de place en mémoire. Cette méthode se révèle efficace lorsque les valeurs consécutives sont proches.

Programmer la fonction delta_encoding qui prend en paramètre un tableau non vide de nombres entiers et qui renvoie un tuple à deux éléments comprenant :

  • En premier, la valeur initiale
  • En second, le tableau des différences, contenant les valeurs entières compressées à l'aide de cette technique.
Exemples
🐍 Script Python
>>> delta_encoding([1_000_000, 1_000_042, 1_000_040, 1_000_055, 1_000_010])
(1000000, [42, -2, 15, -45])
>>> delta_encoding([42])
(42, [])

Afin de gagner en lisibilité, Python autorise de placer un tiret-bas pour séparer les chiffres par paquets de trois. Ainsi 1_000_000 correspond bien à un million, et est plus lisible que 1000000. En revanche, l'affichage en console d'un résultat ne l'utilise pas.

###
# testsbksl-nlbksl-nlassert deltapy-undencoding([1py-und000py-und000, 1py-und000py-und042, 1py-und000py-und040, 1py-und000py-und055, 1py-und000py-und010]) == (bksl-nl 1000000,bksl-nl [42, -2, 15, -45],bksl-nl)bksl-nlbksl-nlassert deltapy-undencoding([42]) == (42, [])bksl-nlbksl-nl# autres testsbksl-nlassert deltapy-undencoding([0, 1, 2, 3, 4]) == (0, [1, 1, 1, 1])bksl-nlbksl-nl 5/5

def deltapy-undencoding(valeurs):bksl-nl ...bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert deltapy-undencoding([1py-und000py-und000, 1py-und000py-und042, 1py-und000py-und040, 1py-und000py-und055, 1py-und000py-und010]) == (bksl-nl 1000000,bksl-nl [42, -2, 15, -45],bksl-nl)bksl-nlbksl-nlassert deltapy-undencoding([42]) == (42, [])bksl-nlbksl-nldef deltapy-undencoding(valeurs):bksl-nl differences = [valeurs[i] - valeurs[i - 1] for i in range(1, len(valeurs))]bksl-nl return (valeurs[0], differences)bksl-nlbksl-nl

A

Cette solution utilise une liste en compréhension.

Liste dynamique⚓︎

🐍 Script Python
def delta_encoding(valeurs):
    differences = []
    for i in range(1, len(valeurs)):
        differences.append(valeurs[i] - valeurs[i - 1])
    return (valeurs[0], differences)

On pouvait aussi itérer de 0 à len(valeurs) - 1

🐍 Script Python
def delta_encoding(valeurs):
    differences = []
    for i in range(len(valeurs) - 1):
        differences.append(valeurs[i + 1] - valeurs[i])
    return (valeurs[0], differences)

Z