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
Adaptive Huffman coding fait exactement cela. Plus généralement, le terme adaptive coding est utilisé pour décrire entropy codes avec cette propriété. Certains dictionary codes ont également cette propriété, par ex. run-length encoding (RLE) et Lempel-Ziv-Welch (LZW). Pourquoi cherchez-vous des algorithmes de compression avec une sortie compressée sans en-tête?
Run Length Encoding serait un exemple
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.
lzo vient à l'esprit. il est utilisé dans OpenVPN, avec d'excellents résultats
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?
Vous voulez dire que les algorithmes de chiffrement modernes ne sont pas vulnérables, n'est-ce pas? –
@PeterCordes: Vous avez raison. Fixé. –
- 1. Fusion sans perte de fichiers PDF (PHP)
- 2. Bibliothèque pour la conversion d'image sans perte
- 3. JPEG ou autre bibliothèque de compression d'images avec perte requise
- 4. Vous effectuez une transformation NSMutableString sans perte de mémoire?
- 5. Un algorithme de pile de tableau sans copie
- 6. SQL: trouver des entrées doubles sans perdre l'ID
- 7. Comment trouver un appel sans réponse iphone
- 8. ActiveRecord: Trouver sans les associations
- 9. Algorithme de mod d'assemblage sur processeur sans opérateur de division
- 10. Rails trouver requête sans doublons
- 11. JPEG sans perte Rotation (90/180/270 degrés) en Java?
- 12. Compression Gzip avec IIS6.0 pour les fichiers sans extension
- 13. listes trouver algorithme
- 14. Trouver tous les enregistrements sans les associés
- 15. GZIP sans utiliser IIS?
- 16. Algorithme efficace pour trouver des soumissions connexes
- 17. Comment utiliser ActiveRecord pour trouver des enregistrements sans rapport?
- 18. Implémenter un algorithme pour insérer un nœud dans une liste chaînée circulaire sans le traverser
- 19. Algorithme pour trouver des points proches?
- 20. Interpolation dans SciPy: Trouver X qui produit Y
- 21. Algorithme pour trouver un mot sur Boggle
- 22. Où trouver des ressources sur le refactoring?
- 23. Librairie de compression libre pour C# qui supporte 7zip (LZMA)
- 24. Liste des éléments sans itération
- 25. Moyenne rapide sans division
- 26. CMS sans un modèle?
- 27. Comment créer un spectacle sans fin sans chapiteau?
- 28. Sorties tous moins un
- 29. Point fixe sur un algorithme de compression largement utilisé de nos jours
- 30. Trouver un gestionnaire de produit basé sur PHP
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. –
Cela est soit codé en dur dans l'algorithme de compression/décompression lui-même, soit en en-tête. –
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. –