Código Huffman
Olá, pessoal.
Aqui está o código da codificação Huffman que vocês fizeram em sala de aula (quer dizer, ainda falta pra chegar lá :p). A partir desse código vocês farão o compactador. Na sexta, tiro as dúvidas de vocês.
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <vector> using namespace std; typedef struct no { int quantidade = 0; int asc; } nozin; typedef struct noArvore { noArvore *f[2]; int quantidade; char letra[256]; } nozinArvore; bool compareTo(nozin a, nozin b) { return a.quantidade > b.quantidade; } bool compareArvore(noArvore *A, noArvore *B) { return A->quantidade < B->quantidade; } char *buscaElemento(char letra, noArvore *no) { if ((no != NULL) return "0"; if (no->letra != letra) { if( (no->f[0]->letra != letra)) { buscaElemento(letra,no->f[1]); } } } int main() { char palavra[256]; nozin vetorAsc[256]; int index = 0; vector<noArvore*> vetorArvore; printf("Informe um texto: "); scanf("%s",palavra); while(palavra[index] != 0) { vetorAsc[palavra[index]].quantidade++; vetorAsc[palavra[index]].asc = palavra[index]; index++; } sort(&vetorAsc[0], &vetorAsc[256], compareTo); index = 0; while(index < 256) { if(vetorAsc[index].quantidade != 0) { printf("Posicao = %d | Letra: %c | Quantidade: %i\n",index, vetorAsc[index].asc, vetorAsc[index].quantidade); noArvore *noTemp = (noArvore *)malloc(sizeof(noArvore)); noTemp->quantidade = vetorAsc[index].quantidade; noTemp->letra = vetorAsc[index].asc; noTemp->f[0] = noTemp->f[1] = NULL; vetorArvore.push_back(noTemp); } index++; } sort(vetorArvore.begin(), vetorArvore.end(), compareArvore); while(vetorArvore.size() > 1) { noArvore *noAux = (noArvore *)malloc(sizeof(noArvore)); noAux->f[0] = vetorArvore[0]; noAux->f[1] = vetorArvore[1]; noAux->quantidade = vetorArvore.at(0)->quantidade + vetorArvore.at(1)->quantidade; vetorArvore.erase(vetorArvore.begin()); vetorArvore.erase(vetorArvore.begin()); vetorArvore.push_back(noAux); sort(vetorArvore.begin(), vetorArvore.end(), compareArvore); } return 0; }
Leave a Reply