Hello,
I'm developing a Huffman algorithm job, and I'm having a hard time working with the frequency table. In short, I need to transform the characters of a text into a frequency table to create the huffman tree.
example: pineapple ... The table must have:
a = 3
b = 1
c = 1
x = 1
i = 1
I'm using this code:
int[] charFreqs = new int[256];
for (char c : test.toCharArray())
charFreqs[c]++;
It creates the table and it is possible to mount the tree in this way:
public static HuffmanTree buildTree(int[] charFreqs) {
// Cria uma Fila de Prioridade
// A Fila será criado pela ordem de frequência da letra no texto
PriorityQueue<HuffmanTree> trees = new PriorityQueue<HuffmanTree>();
// Criar as Folhas da Árvore para cada letra
for (int i = 0; i < charFreqs.length; i++){
if (charFreqs[i] > 0)
trees.offer(new HuffmanLeaf(charFreqs[i], (char)i)); // Inser os elementos, nó folha, na fila de prioridade
}
// Percorre todos os elementos da fila
// Criando a árvore binária de baixo para cima
while (trees.size() > 1) {
// Pega os dois nós com menor frequência
HuffmanTree a = trees.poll(); // poll - Retorna o próximo nó da Fila ou NULL se não tem mais
HuffmanTree b = trees.poll(); // poll - Retorna o próximo nó da Fila ou NULL se não tem mais
// Criar os nós da árvore binária
trees.offer(new HuffmanNode(a, b));
}
// Retorna o primeiro nó da árvore
return trees.poll();
The problem is that for me to unpack a file, I need to read this table again and re-create the tree, so I need to save it to a text file or some other way, I'm trying with txt ... but when I read the txt and try to mount the table again, the tree is not reassembled, it is empty ...
I used this program as a base: link
Can anyone help me? maybe there's something I did not understand ...