glog_td4/questioncomplementaire/Huffman.java
2018-04-01 14:34:28 +02:00

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()))
+ ")";
}
}