55 lines
1.1 KiB
Java
55 lines
1.1 KiB
Java
package questioncomplementaire;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public class Huffman extends AlgoCodage {
|
|
private String generatrice;
|
|
private ArrayList<HuffmanCode> codes;
|
|
private Arbre arbre;
|
|
|
|
public Huffman(String generatrice) {
|
|
this.generatrice = generatrice;
|
|
arbre = Arbre.buildTree(generatrice);
|
|
codes = arbre.collectCodes(new StringBuffer(""));
|
|
|
|
}
|
|
|
|
@Override
|
|
public String encode(String s) {
|
|
String encode = s;
|
|
for (HuffmanCode huffmanCode : codes) {
|
|
encode = encode.replaceAll(
|
|
String.valueOf(huffmanCode.lettre), huffmanCode.code);
|
|
}
|
|
return encode;
|
|
|
|
}
|
|
|
|
@Override
|
|
public String decode(String s) {
|
|
String decode = "";
|
|
Arbre current = arbre;
|
|
for (int i=0; i<s.length(); i++) {
|
|
if(current instanceof Feuille) {
|
|
decode += ((Feuille) current).lettre;
|
|
current = arbre;
|
|
}
|
|
if(current instanceof Noeud) {
|
|
if(s.charAt(i) == '0')
|
|
current = ((Noeud)current).filsGauche;
|
|
else
|
|
current = ((Noeud)current).filsDroit;
|
|
}
|
|
}
|
|
return decode;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Huffman (génératrice = "
|
|
+ generatrice.substring(0, Math.min(50, generatrice.length()))
|
|
+ ")";
|
|
}
|
|
|
|
}
|