Programmation novice: Comment programmer mon propre algorithme de compression de données?
C'est l'été, et j'ai donc décidé de prendre sur moi d'écrire un programme de compression, de préférence en C code. J'ai un décent les débutants à comprendre comment agit la compression. J'ai juste quelques questions:
1) c un bon langage de programmation pour réaliser cette tâche?
2) dois-je travailler dans des octets avec le fichier d'entrée? Ou à un niveau binaire en quelque sorte?
Si quelqu'un pouvait juste me donner un coup de pouce dans la bonne direction, j'apprécierais vraiment. Je voudrais le code moi-même, cependant, et ne pas utiliser un pré-existante de la bibliothèque de compression ou quelque chose comme ça.
chamberlain C'est amusant et éducatif. Quel est le mal?
Jetez un oeil à l'algorithme de codage de Huffman en.wikipedia.org/wiki/Huffman_coding Ceci devrait être un bon exemple de l'algorithme de vous aider à obtenir commencé.
Jetez un oeil à l'algorithme de codage de Huffman en.wikipedia.org/wiki/Huffman_coding Ceci devrait être un bon exemple de l'algorithme de vous aider à obtenir commencé.
OriginalL'auteur araisbec | 2011-05-24
Vous devez vous connecter pour publier un commentaire.
Oui.
Ils sont les mêmes, donc la question n'a pas de sens.
Pouvez-vous utiliser un pré-existants algorithme de compression? Il y a des dizaines et des "algorithme de compression" -- lorsqu'il est utilisé avec Google-va révéler une foule de renseignements utiles.
Les Bits sont toujours collectés en octets. Il n'y a rien de plus précis que les octets. Votre algorithme peut être la manipulation de bits; mais il le fait par l'accès, la modification et le stockage de l'ensemble des octets de la valeur de bits.
OriginalL'auteur S.Lott
Vous pourriez commencer par regarder Le Codage Huffman. Beaucoup de l'informatique les classes mettre en œuvre que comme un projet, donc ça devrait être gérable. C serait approprié pour le codage Huffman, mais il pourrait être plus facile à faire en premier dans un langage de niveau plus élevé, de sorte que vous comprendre les concepts.Il existe des diapositives, des conseils et un exemple de projet disponible en Java pour un niveau de la maîtrise du projet à l'Université de Pennsylvanie (de la recherche pour "souffler" sur cette page).
OriginalL'auteur Brian Lyttle
Oui, C est bien adapté pour ce genre de travail.
Si vous travaillez avec des octets ou de bits dépend de l'algorithme que vous décidez de le mettre en œuvre. Par exemple, le codage de Huffman est intrinsèquement orientés bits alors que de nombreux autres algorithmes de compression ne sont pas.
OriginalL'auteur NPE
Pour répondre à vos questions:
Mon avis, d'abord décider si vous voulez faire un
lossless compression
ou unlossy compression
, puis choisissez un algorithme à mettre en œuvre. Voici quelques conseils:Pour le lossless, certains sont très intuitives, telles que le
run-length
de codage,par exemple, si il n'y a 11
a
s et 5b
s, vous venez de les coder comme11a5b
.Certains algorithmes utilisent un
dictionary
, veuillez vous référer àLZW encoding
.Enfin, je ne le recommande
Huffman
encodage car il est très simple, simple et utile pour acquérir de l'expérience dans l'algorithme d'apprentissage (pour votre but éducatif).Pour perte,
Discrete Fourier Transform (DFT)
, ouwavelet
, est utilisé dans la compression JPEG. C'est utile pour comprendre multimédia de compression.Wikipedia page est un bon point de départ.
OriginalL'auteur Ivan Z. Siu
C est un excellent choix pour l'écriture d'un programme de compression. Vous pouvez utiliser beaucoup d'autres langues aussi, si.
Votre ordinateur ne peut probablement pas directement sur les unités de mémoire plus petit qu'un octet (presque par définition), ainsi, travailler avec des octets est probablement un bon choix. Certains de la façon dont vous travaillez avec les données seront touchés par l'algorithme de compression que vous choisissez.
Bonne chance!
OriginalL'auteur Carl Norum