Академический Документы
Профессиональный Документы
Культура Документы
import java.io.*;
import java.util.*;
for(int i=0;i<=mensaje.length()-1;i+=2)
{
mensajeHuffman2 = mensajeHuffman2 + huffMan2[mensaje.charAt(i)]
[mensaje.charAt(i+1)];
}
return(mensajeHuffman2);
}
while(longBinario<8)
{
mensajeAscii = mensajeAscii + "0";
longBinario++;
}
mensajeAscii = mensajeAscii +
Integer.toBinaryString(mensaje.charAt(i));
}
return(mensajeAscii);
}
}
/* Creo el �rbol inicial de las parejas de letras cuya frecuencia es
* mayor que 0 es decir, se encuentra en el mensaje.
*/
for (int i=0; i<255; i++)
{
for(int j=0;j<255;j++)
{
if (frecuencia[i][j] > 0)
{ letras = (char)i + "" + (char)j;
NodoHF2 n = new NodoHF2(letras, frecuencia[i][j]);
arboles.add(n);
}
}
}
/* Esta clase es la que crea las ramas del �rbol de Huffman con fuente 1 */
class NodoHF1
implements Comparable
{
private int valor; // Almacena el valor de la rama
private char contenido; // Almacena el car�cter
private NodoHF1 left; // Almacena la rama izquierda
private NodoHF1 right; // Almacena la rama derecha
if (this.valor == other.valor)
return this.contenido-other.contenido;
else
return this.valor-other.valor;
}
if (left != null)
left.printNodoHF1(path + '0',hf);
if (right != null)
right.printNodoHF1(path + '1',hf);
}
/* Esta clase es la que crea las ramas del �rbol de Huffman con fuente 2 */
class NodoHF2
implements Comparable
{
private int valor;
private String contenido;
private NodoHF2 left;
private NodoHF2 right;
/* Constructor que crea el nodo al principio */
public NodoHF2(String contenido, int valor)
{
this.contenido =contenido;
this.valor = valor;
}
/* Constructor que crea el nodo pas�ndole las ramas izquierda y derecha */
public NodoHF2(NodoHF2 left, NodoHF2 right)
{
/* Si la letra de la izquierda, es alfab�ticamente anterior a la de la
derecha
* nos quedamos con la izquierda, y sino, con la derecha. Es decir,
almacenamos
* en la siguiente rama, el car�cter posicionado m�s anteriormente.
*/
if(left.contenido.charAt(0) < right.contenido.charAt(0))
{
this.contenido = left.contenido;
}
if (this.valor == other.valor)
{ if(this.contenido.charAt(0) == other.contenido.charAt(0))
return this.contenido.charAt(1)-other.contenido.charAt(1);
else return this.contenido.charAt(0)-other.contenido.charAt(0);
}
else
return this.valor-other.valor;
}
if (left != null)
left.printNodoHF2(path + '0',hf);
if (right != null)
right.printNodoHF2(path + '1',hf);
}