Page 1 of 1

Record du monde de compression de données :P

Unread postPosted: 08 Feb 2014, 23:38
by Persalteas
  • Prenons une liste du TI-Basic, 999 éléments.
  • Remplissons chaque élément de cette liste avec un nombre à 14 chiffres significatifs. (14*999)
  • Multiplions chaque élément par une puissance de dix négative à deux chiffres.(999*(14+2))
  • Ajoutons à chaque élément une partie complexe, elle aussi à 14 chiffres significatifs et à puissance de 10 à deux chiffres.(999*2*(14+2))

Vous obtenez ainsi une liste contenant très exactement 31968 chiffres, le tout pour la modique somme de 17994 octets.

Show/Hide spoilerAfficher/Masquer le spoiler
exemple d'algo qui place des nombres aléatoires:
Code: Select all
:999->dim(L1
:For(K,1,999
:DelVar S
:For(A,0,9
:S+randInt(0,9)*10^A*10^(-randInt(1,99))->S
:End
:S+Si->L1(K
:Disp K
:End


archives_voir.php?id=29902

Pas mal, la compression, non ?
Qui dit mieux ? :P

Re: Record du monde de compression de données :P

Unread postPosted: 09 Feb 2014, 08:20
by Bisam
Je vois mal en quoi c'est une compression de données !
Un nombre réel à 14 chiffres décimaux de mantisse et 2 chiffres d'exposant peut se coder sur moins de 64 bits.
Par conséquent un complexe ayant les mêmes caractéristiques peut se coder sur 128 bits (avec éventuellement quelques bits de plus pour indiquer le type).
Ta liste devrait occuper au maximum 128000 bits soit 16000 octets... mais elle fait presque 18000.

On en déduit que le codage des complexes est un petit peu plus gourmand que prévu, ainsi sans doute que celui de liste.

Re: Record du monde de compression de données :P

Unread postPosted: 09 Feb 2014, 10:03
by Persalteas
Ta liste devrait occuper au maximum 128000 bits soit 16000 octets... mais elle fait presque 18000.


En effet, le token "i", deux octets, est stocké dans chaque case de la liste. Donc ça rajoute 999*2 au poids. Le compte y est :)
EDIT: ou plutôt, le token "i" vaut 1 seul octet, mais le token "+" en vaut lui aussi un autre, c'est possible.