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.65038fe)ài1p3m_:Svk-(qrtg.O=swcd;,Po/]haR2n bl0é+[CLuy050D0e0v0L0h0R0A0P0C0R0L0A0A0z010v0h0j010406050A0Y0l0l0L0u0Z040o0H0R0Y0@0H0O0P020L0l0j0E0P0M0e110u0t0Y0e0A050I0~1012140|0j04051z1s1C0I1z0|0D0h0p0,0.0:0=0K0h0w0K0R1Q0K0v0`050%0Q0R0e1L0/0;011P1R1T1R0v1Z1#1X0v0u1A0v0K0,170A0j0L0O0=0N011%1N010d0)0e0O1f0e1X1}1 241)271#2a0l2c040a0P0G0u0H0j0H0A0h1a1c0#1{0u0u0e0C2x1s2e0O1A0I1_2J1?1^1@1Y0D2g0=1T0O292u1X1I1K0-1(2T0h2V0O0H2Z1X0j2C1A2H2J2;0}1~1c2#252*0u110R0`0i2G2^0{2@2f2`1)2|2~0`0N321 342H2S01390L2 040k3d2I1D2/1s2Z2M0D1^2R370=0C2+2m0!1J1A2.0e2:333o1A3A0#3I361M1)0q0`0#0d3K352_3Q0=0B0`0P3W3g3y3i0d3T0e0R0%0m293M2(0w3(2^3h0_040s3_3P2$3i0`0p3k0e0Y0u1r1t3J3)3Z013|0f0n3K060P4k3%4c410O3T0h0d0d0e2C0O0C1q3K4m3`3*0H0`0z4z3X3{0`0V3 3Y4o434547492?4n253|4K4a3e4H3*4p040h4L4I040J4G4T1)4D040r4,4B4d4#441#4Q4(3*4V4|4@0`4%4X2I4A40254/4;5304554M250l0h304 413|4+5a5c3h3S040d0H0u4=5638515u5d4.3#4$0O5y3h0O0Q0`0u1 0w0e5i4U0`3~5a4Z4d5f5h5R4-0=3|0F5E4!5H042j5N1)3|5Q4S4?4N044_46485*5Y0`0f0f5l2;4j4l5S415p2C0v475D5m615O3}5^425;4P5@5W5/6a4W5.5v0=5U040S6c5k5!685X6d1I4s4u3=4y6h6m4e5`4i1s3M3H3q6J0I3t1s0v3v6O2P2K0L1!6L3t1y3O5z0=2C0l0m0d0L0q0e0m0K0k0`1k1m1o1q0P4h5R1F341z0W0$0v1$0A17190h1b0P741T0A1$0Y2V0P79700P291{1g0u0T0K292v1b0x1D340K0i0P0h0D2%0A700r0D0Z2k0h6?0`0X0h7A1$7D7F6?050L3h7n0L0#0u2U3S0P0K2C0d0=037f0e7C7E1f7G1p230@0v1#0=0G4u112)0v7e2(5p0b0c1s0L2J7u342Z7S1U1-1V2d6i2h282k2m2o0o0C0u0^7|0G0Z1_1b3W3G6Z2=3J6I6Z5o3-3V6C6!015B3%8C5F3,040#3/0L3;4w2+3@6r5P6c4^6f4R4b8d5_044g4i4l5n4!4q6y4v4x8X3e8)4d4/4F6u8Z6E040V5}335 4k693R0`5r5t8^6D4#522;8;410H5B2(5#4@5%5J0O5L8S6b8H3*6o319o4d5Z9g4o5%5)9s5j8T9z2{4O4`6g6l8D4f8$5a8 8(9b9D8K4r4t8-6B9H3h4/7r9C5w040L0j0j290D9m5-8Y979E5?8/3p6v4~9Z0=989m8}8:910=589v9P5=4{9^8`6k9-8D9`968Da0ab3h9q9{0f8%606v630$66a15+9B9V8*6e9F9;8y4}4J6c6o6qa56sap9_8+9S6Aaw9~8`ai9L6H3B2J8t3s3E6Y0y1c2t0Y442w0P0L0Y0:0h7w0v0T2C0u0P2z058xaC8x0P0g3%6I881,1U1Wax9h0`9yas9tara85F9/a4b59A8#aF01ad9aaLag6`8x7s1H1Ja}1Sa 8c6D2i292b0`8i8k8m2p8p0K8r5RaS2?5Rbmal8A6c8F8U8J8L3:3=8Q9k9+8Uba9Gb8ay8#6_5~8(aL4#6xaI4w9U339O4.4Ebf4V9|2I9MaL5p94bfaabi6v9d5167c18_5G5I5K5MaDb74Y6vc85(29bWa58Vav9maNc66Dbhb:bj5g049rbc6a9Kb(9N90cfaH6zb.aKc20`9Ycx9!9$9(0O9*cc9ncLaGau9:9ma7cec75xae4C0`0UbfbkcT8`b_5baLcr9}cDcVbbb!b68{bX4$ahajcC8_am650uc5cs9?cd9=c!c@bZcZ6D9@c,aB9{6tcpa9cE9TcH8_4f6G0Ibm1F3r6MaU3s0$0(0*04.