2009-02-18 7 views
6

Est-ce que quelqu'un d'entre vous connaît un algorithme de compression sans perte, qui produit des sorties sans en-tête? Par exemple, ne stockez pas le huffman tree utilisé pour le compresser? Je ne parle pas des arbres de Huffman codés en dur, mais j'aime savoir s'il y a un algorithme qui peut compresser et décompresser l'entrée sans stocker certaines métadonnées dans sa sortie. Ou est-ce même théoriquement impossible?Où puis-je trouver un algorithme de compression sans perte, qui produit des sorties sans en-tête?

Répondre

4

Run Length Encoding serait un exemple

+0

Même RLE nécessite une certaine connaissance de ce que sont les données et comment le RLE est codé. L'algorithme de décompression a besoin de savoir s'il comptait des bits, des octets, des couleurs ou des échantillons sonores, etc. –

+0

Cela est soit codé en dur dans l'algorithme de compression/décompression lui-même, soit en en-tête. –

+0

Oui, mais généralement, il est codé en dur dans l'algorithme, alors que les tables pour le codage de Huffman sont généralement stockées avec les données compressées. –

5

Bien sûr, il est posible. Entre autres, la famille de compresseurs LZ n'a pas besoin de produire quoi que ce soit en dehors des données compressées, car le dictionnaire est construit en ligne au fur et à mesure de la progression de la compression (ou de la décompression). Vous avez beaucoup d'implémentations de référence pour ces algorithmes de type LZ. Par exemple, LZMA, composant de 7zip.

1

lzo vient à l'esprit. il est utilisé dans OpenVPN, avec d'excellents résultats

0

Pourquoi? Peut-être (a) vous avez un système comme la téléphonie bidirectionnelle qui a besoin d'une compression/décompression en continu à faible latence. La catégorie de codage adaptatif des algorithmes de compression mentionnés par Zach Scrivena et la famille LZ de dictionary compression algorithmes mentionnés par Diego Sevilla et Javier sont excellents pour ce genre d'application. Les implémentations pratiques de ces algorithmes ont généralement un octet ou deux de métadonnées au début (ce qui les rend inutiles pour les applications (b)), mais cela a peu ou pas d'effet sur la latence. Peut-être (b) vous vous intéressez principalement à la cryptographie, et vous savez que compresser avant crypter donne des propriétés de sécurité améliorées, tant que le texte compressé n'a pas d'en-tête de métadonnées fixe "crib". Les algorithmes de cryptage modernes ne sont pas (pour autant que nous le sachions) vulnérables à ces "crèches", mais si vous êtes paranoïaque vous pourriez être intéressé par "compression bijective" (a, b, c, etc.). Il n'est pas possible de détecter les erreurs de transmission (bits retournés, bits insérés, bits supprimés, etc.) lorsqu'un récepteur reçoit une telle sortie compressée (rendant ces algorithmes non particulièrement utiles pour les applications (a)).

Peut-être (c) vous êtes intéressé par la compression sans en-tête pour une autre raison. Cela semble fascinant - quelle est cette raison?

+0

Vous voulez dire que les algorithmes de chiffrement modernes ne sont pas vulnérables, n'est-ce pas? –

+0

@PeterCordes: Vous avez raison. Fixé. –

Questions connexes