Bonsoir,
Je pense à une fonction mathématique, cependant une fonction de programmation m’irait aussi
Les fonctions en programmation sont en pratique un sous-ensemble des fonctions mathématiques. Les choses non-calculables ne sont pas forcément d’un grand intérêt, donc sur les cas pratiques, ça coïncide pas mal.
Si tu représentes des données par une fonction, tu dois aussi utiliser des données pour décrire la fonction en question. La fonction la plus simple qui représente tes données, c’est tout simplement… les données elles-mêmes. En travaillant sur des entiers quelconques, parler d’interpolation polynomiale pour représenter une suite d’entier est peu intéressante, parce que tu stockeras la représentation du polynôme, qui fait la même taille que ta suite d’entier initiale.
Pour avoir un intérêt, il faut que la description de la fonction soit plus petite que les données initiale. On en vient au problème de la compression. Dans plein d’applications pratiques, on peut avoir des compresseurs/décompresseurs à part, dont la taille importe peu, parce qu’on ne les transfère pas avec les données. Parfois, on veut embarquer le décompresseur avec les données. Quoi qu’il en soit, il faut que ce qu’on fournit au décompresseur pour retrouver la données initiale soit plus petit que la donnée initiale elle-même.
Pour la compression (sans perte), on a plein de techniques. Ce sont des fonctions mathématiques qu’on peut évidemment programmer. On représentera une séquence par une autre séquence avec des instructions pour faire le chemin inverse. Tous les algos de compression sans perte sont basés là-dessus, en particulier ceux génériques comme zip, rar, etc.
Quand on a des données spécialisées, on peut utiliser des astuces pour comprimer plus efficacement. Par exemple, FLAC utilise le fait que le signal musical soit corrélé d’un instant à l’autre, pour décrire de manière très compacte le signal sur de petites durées. Le MP3 enregistre une approximation du signal sonore faite de petites briques élémentaires qu’on connaît bien et qu’on sait décrire avec seulement quelques paramètres (les ondelettes). Le JPEG utilise une idée similaire mais pour les images. Avec des données très spécialisées, on peut se retrouver avec des compressions vraiment très impressionnantes. Quoi qu’il en soit, on a en général un compromis entre la compression qu’on obtient et la connaissance qu’on a des données.
On peut s’amuser à faire du deep learning pour résoudre le problème de la compression, mais c’est clairement pas la première approche à considérer ou à découvrir en tant que novice. Et c’est assez anecdotique dans l’état de la technique.
Dans le sujet, on a parlé d’interpolation. Pour moi, ça résout un autre problème, qui est de boucher les trous quand on sait qu’on a une fonction réelle qui passe par certains points. Ce n’est pas vraiment utile pour représenter une séquence d’entier parce que ça revient à stocker les entiers en question d’une manière ou d’une autre.
Drulac a aussi montré des images de régression polynomiale. C’est assez intéressant, parce qu’il s’agit d’une estimation "au plus proche" et que ce genre d’idée est effectivement utilisé dans la compression de données (notamment FLAC), parce qu’on peut représenter beaucoup d’information avec peu de paramètres.