Um sistema de compressão e descompressão de arquivos baseado no algoritmo de codificação de Huffman. Este projeto implementa compressão sem perdas, garantindo que os dados originais sejam perfeitamente recuperados após a descompressão.
O Compressor Huffman funciona através dos seguintes passos:
- Análise de Frequência: Conta a ocorrência de cada byte no arquivo de entrada
- Construção da Árvore: Cria uma árvore binária baseada nas frequências dos caracteres
- Geração de Códigos: Atribui códigos binários mais curtos aos caracteres mais frequentes
- Compressão: Substitui cada caractere pelo seu código Huffman correspondente
- Armazenamento: Salva a árvore de Huffman junto com os dados comprimidos
- Compressão: Reduz o tamanho do arquivo mantendo todos os dados originais
- Descompressão: Recupera exatamente o arquivo original
- Validação: Verifica automaticamente a integridade dos dados
- Estatísticas: Fornece informações detalhadas sobre a compressão
HuffmanCompressor/
├── src/ # Código fonte
│ ├── main.c # Programa principal
│ ├── data_structures.c # Implementação das estruturas de dados
│ ├── file_io.c # Operações de entrada/saída
│ └── huffman_algorithm.c # Algoritmo de Huffman
├── include/ # Arquivos de cabeçalho
│ ├── data_structures.h # Definições das estruturas
│ ├── file_io.h # Interface de I/O
│ └── huffman_algorithm.h # Interface do algoritmo
├── bin/ # Executáveis compilados
├── tests/ # Testes unitários
│ └── test_huffman.c # Testes automatizados
├── examples/ # Exemplos de uso
├── docs/ # Documentação adicional
├── Makefile # Sistema de build
└── README.md # Este arquivo
- Compilador GCC (ou compatível)
- Sistema Unix/Linux/Windows com suporte a C99
# Compilar o projeto
make
# Compilar com otimizações
make release
# Compilar para debug
make debug# Comprimir um arquivo
./bin/huffman_compressor -c arquivo.txt arquivo.huf
# Descomprimir um arquivo
./bin/huffman_compressor -d arquivo.huf arquivo_descomprimido.txt
# Modo verboso (mostra estatísticas)
./bin/huffman_compressor -c -v imagem.jpg imagem.huf-c, --compress- Comprime o arquivo de entrada-d, --decompress- Descomprime o arquivo de entrada-v, --verbose- Modo verboso com estatísticas detalhadas-h, --help- Mostra a mensagem de ajuda
# Executar testes de integração
make test# Executar testes unitários
make test-unitO sistema inclui validação automática que verifica se a descompressão reproduz exatamente o arquivo original.
- Árvore de Huffman: Implementada com nós dinâmicos
- Fila de Prioridade: Min-heap para construção eficiente da árvore
- Buffer de Bits: Otimização para manipulação de bits
- Análise de Frequência: Contagem de caracteres únicos
- Construção da Árvore: Algoritmo de Huffman clássico
- Codificação: Geração de códigos prefix-free
- Compressão: Substituição de caracteres por códigos binários
- Buffer de Leitura: Processamento em chunks para arquivos grandes
- Manipulação de Bits: Operações eficientes de bit-level
- Gestão de Memória: Alocação e liberação cuidadosa
O algoritmo de Huffman oferece:
- Compressão sem perdas: Recuperação perfeita dos dados originais
- Eficiência: O(log n) para construção da árvore
- Flexibilidade: Funciona com qualquer tipo de arquivo
- Escalabilidade: Processa arquivos de qualquer tamanho
make # Compila o projeto
make clean # Remove arquivos de compilação
make test # Executa testes básicos
make test-unit # Executa testes unitários
make debug # Compila com flags de debug
make release # Compila com otimizações
make check # Verifica warnings
make help # Mostra ajudaArquivo de entrada: documento.txt (1024 bytes)
Arquivo de saída: documento.huf
Operação: Compressão
Iniciando...
Comprimindo 'documento.txt' para 'documento.huf'...
Compressão concluída com sucesso!
Taxa de compressão: 45.2%
Tempo de execução: 0.023 segundos
Descomprimindo 'documento.huf' para 'documento_descomprimido.txt'...
Descompressão concluída com sucesso!
✓ Validação: Arquivo descomprimido é idêntico ao original
Tempo de execução: 0.018 segundos
Para contribuir com o projeto:
- Mantenha a modularidade
- Adicione testes para novas funcionalidades
- Documente as mudanças
- Siga os padrões de código estabelecidos
Este projeto é de código aberto e está disponível sob a licença MIT.