Aller au contenu

Codage par différence

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.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013.9875.65038[,snaRcPmy)f]OL_wu2ql3 (ev-0;éb+okCp/ihSg1t:à=.dr050Y0B0T0h0O0x0f0z0j0x0h0f0f0W010T0O0M010406050f0u0l0l0h0Z0m040Q0J0x0u0@0J0g0z020h0l0M0F0z0i0B110Z0w0u0B0f050N0~1012140|0M041s1z051C0N1C1E1z0|0Y0O0C0,0.0:0=0P0O0R0P0x1S0P0T0`050%0H0x0B1N0/0;011R1T1V1T0T1#1%1Z0T0H0J0Y141!0Z1A0T0P0,170f0M0h0g0=0v011)1P010o0)0B0g1f0B1Z24262b1+2e1%2h0l2j040a0z0k0Z0J0M0J0f0O1a1c0#220Z0Z0B0j2E1s2l0g1A0N202Q0T1~1}1 0Y2n0=1V0g2g2B1Z1K1M0-1*2!0O2$0g1`1L1Z0M2J1A2O2Q2{0}251c2,2c2;0Z110x0`0S2N2 0{2~2m311+33350`0v39263b2O2Z013g0h36040y3k2P1B2_1s2*2T0Y2X3o0j1`2t0!1L1A2^0B2`3a3v1A3F0#3N3d1O1+0K0`0#0o3P3c303V0=0t0`0z3#3n3e0=0g0o3Y0B0x0%0s2g3R2/0R3-2 3o0_040A3 3U2-3p0`0C3r0B0u0Z1r1t3O3.3(01420n0U3P060z4q3,4i470g3Y0O0o0o0B2J0g0j1q3P4s403/010J0`0W4F3$410`0d453%4u494b4d4f2}4t2c424R4g3l4O4I4v040O4S4P040p4N4!1+4K040D4?4H4j4,4a1%4X4/4I4$534~0`4.4(2P4G462c4_4{5a045c4T2c0l0O375647424=5h5j3o3X040o0J0Z4|5d3f585B5k4^3*4-0g5F3o0g0H0`0Z260R0B5p4#0`445h4*4j5m5o5Y4@0=420e5L4+5O042q5U1+425X4Z4}4U04504c4e5;5)0`0n0n5s2{4p4r5Z475w2J0T4d5K5t685V435 485{4W5~5%5_6h4%5^5C0=5#040E6j5r5+6f5(6k1K4y4A3{4E6o6t4k614o1s3R3M3x6Q0N3A1s0T3C6V2V2R1_1{2T0h1$6S3A1y3T5G0=2J0l0s0o0h0K0B0s0P0y0`1k1m1o1q0z4n5Y1F3b1z0L0$0T1(0f17190O1b0z7e1V0f1(0u2$0z7j7a0z2g221g0Z0G0P2g2C1b0X1B3b0P0S0z0O0Y2.0f7a0D1{2r0O700`0r0O7K1(7N1f7P1p050h3o7x0h0#0Z2#3X0z0P2J0o0=037p0B7M0m7O7Q0z0@0T1%0=0k4A112:0T7o2/5w0b0c1s0h2Q7E3b2*7$1W1/1X2k6p2o2f2r2t2v0Q0j0Z0^850k0m201b3#3L6-2|3O6P6-5v3?3!6J6.015I3,8L5M3=040#3^0h3`4C2=0g3~8Q545W6j4 6m4Y4h8m60044m4o4r5u4+4w6F4B4D8,3l8@4j4_4M6B8.6L040d643a664q6g3W0`5y5A936K4,592{8 470J5I2/5,4~5.5Q8!5T8$4j5?6j6v389x5q0`6A9l9c3:5.5:9D6h5@8-9i4V516n6s8M4l8;5h9a8?9m328_4z8{6I9U3o4_7B9M5D040h0M0M2g0Y6y8(9/3:9R5}8}3w6C559|6k9k9P9V0`988~9I4J0`5g9H6C8*9Sa08H8%968)5E9h8M5f9r479B9`4;0n8=676C6a0$6dat9Nao6lajaw6ra73o6v6xa46zaF9:6E9(6Hakac4l6N0N8G6R2Q6+1D040q1c2A0u4a2D0z0h0u0:0O7G0T0G2J0Z0z2G058GaP8G0z0V3,6P8h1.1W1Yal9s0`9L9+am9O4)ah9~52aQ6Maq9,aeaS6u5n049C2}a#3G2Q1I3I2+4j1-1Ubb8l6K2p2g2i0`8r8t8v2w8y0P8A5Y8C3$8E4)a$aB8J6j8O8)8S8U3_3{8Z8#bh9y9{b;5`5|bnb@6h9X658?ac4,aU6G4C9*3a9#4^4Lbt9597az9bb$5x5zca9jca9o586eag945N5P5R9wb{5=b?aM5-bf2gawbja1cpbm9Tcxb=8:ckbsbq4Iavbo8:73b~9!cecE8T4xaVc4aX6C9-aH9=9@0g9_cPcCbdb^8+aKaHa6abc#0`0IcacOcu8/aa5bacascM57aI9 c;a4cjcP0pay9Yb cf6baEd39E6id8cFc!94a3c}01aOaw0p9Gc6c09%c38|awdc656ObAa%3z3J0|6T0$0(0*04.