Centro nacional de Compactação de dados
   
  Huffman Português (auto-tradutor)
 
Um rápido tutorial na geração de uma árvore de Huffman :

Deixa diz que você tem um jogo de números e a freqüência deles/delas de uso e quer criar um Huffman que codifica para eles: 

VALOR DE FREQÜÊNCIA 
5 1 
7 2 
10 3 
15 4 
20 5 
45 6 


Criando uma árvore de Huffman é simples. 
Ordene esta lista por freqüência e faça os elementos mais duplo em folhas, enquanto criando um nodo de pai com uma freqüência que é a soma das freqüências do dois mais baixo elemento: 


12: * 
/ \ 
5:1 7:2 
Os dois elementos são afastados da lista e o nodo de pai novo, com freqüência 12, é inserida na lista por freqüência. 
Tão agora a lista, ordenada por freqüência, é: 
10:3 
12: * 
15:4 
20:5 
45:6 
Você repete a volta então, enquanto combinando os dois mais baixos elementos. Isto resulta dentro: 
22: * 
/ \ 
10:3 12: * 
/ \ 
5:1 7:2 
e a lista é agora: 
15:4 
20:5 
22: * 
45:6 
Você repete até lá é só um elemento partido na lista. 
35: * 
/ \ 
15:4 20:5 

22: * 
35: * 
45:6 

57: * 
___ / \___ 
/ \ 
22: * 35: * 
/ \ / \ 
10:3 12: * 15:4 20:5 
/ \ 
5:1 7:2 

45:6 
57: * 

102: * 
__________________ / \__ 
/ \ 
57: * 45:6 
___ / \___ 
/ \ 
22: * 35: * 
/ \ / \ 
10:3 12: * 15:4 20:5 
/ \ 
5:1 7:2 
Agora a lista é há pouco um elemento que contém 102: *, você é terminado. 
Este elemento se torna a raiz de sua árvore de huffman binária. Gerar um código de huffman você atravessa a árvore ao valor que você quer, saindo uns 0 toda vez você leva uma filial de esquerda, e um 1 toda vez você leva uma filial de direita. (normalmente você atravessa a árvore para trás do código você quer e constrói o huffman binário que codifica para trás como bem fio, desde que o primeiro pedaço tem que começar do topo). 

Exemplo: A codificação para o valor 4 (15:4) é 010. A codificação para o valor 6 (45:6) é 1 

Decodificando um huffman codificando é da mesma maneira que fácil: como você pedaços leram dentro de seu fluxo de contribuição você atravessa o começo de árvore à raiz, enquanto levando o caminho de mão esquerda se você lesse uns 0 e o caminho de mão direita se você lesse um 1. Quando você bateu uma folha, você achou o código. 

Geralmente, qualquer esquema de compressão de huffman também requer o huffman sobem em árvore para ser escritos fora como parte do arquivo, caso contrário o leitor não pode decodificar os dados. Para uma árvore estática, você não tem que fazer isto desde que a árvore é conhecida e fixa. 

O modo mais fácil para produção o huffman sobem em árvore é, enquanto começando à raiz, esvazie primeiro então o lado de mão esquerda o lado de mão direita. Para cada nodo você produção uns 0, para cada folha você produção um 1 seguida por pedaços de N que representam o valor. Por exemplo, a árvore parcial em meu último exemplo sobre usar 4 pedaços por valor pode ser representado como segue: 

000100 6 pedaço byte fixo indica quantos pedaços o valor 
para cada folha é armazenada dentro. Neste caso, 4. 
0 raiz é um nodo 
lado de mão esquerda é 
10011 uma folha com valor 3 
lado de mão direita é 
0 outro nodo 
recursivo abaixo, lado de mão esquerda é 
10001 uma folha com valor 1 
lado de mão direita é 
10010 uma folha com valor 2 
recursão devolvem 
Assim a árvore parcial pode ser representada com 00010001001101000110010, ou 23 pedaços. 

Não foi ruim!

   Voltar
     
Hosted by www.Geocities.ws

1