127 lines
3.1 KiB
Java
127 lines
3.1 KiB
Java
import java.util.HashMap;
|
|
import java.util.*;
|
|
|
|
public class Main
|
|
{
|
|
public static void test(String text)
|
|
{
|
|
Map<Character, Integer> zahlen = Zählen.countEachLetter(text);
|
|
Node wurzel = Node.erstellen(zahlen);
|
|
|
|
System.out.println();
|
|
System.out.println("Pre-Order Baum:");
|
|
printBaum(wurzel);
|
|
|
|
System.out.println();
|
|
System.out.println("Anzahl der Zeichen:");
|
|
Zählen.printZahl(zahlen);
|
|
|
|
System.out.println();
|
|
System.out.println("Binärcode der Zeichen:");
|
|
codes(text);
|
|
|
|
System.out.println();
|
|
|
|
decodierungBaum(codierung(text,wurzel), wurzel);
|
|
|
|
|
|
}
|
|
|
|
public static void printBaum(Node baum)
|
|
{
|
|
if(baum == null)return;
|
|
System.out.println("Buchstabe: " + baum.getBuchstabe() + ", Anzahl: " + baum.getAnzahl());
|
|
printBaum(baum.getLeft());
|
|
printBaum(baum.getRight());
|
|
}
|
|
|
|
|
|
|
|
public static void codes(String text)
|
|
{
|
|
Node wurzel = Node.erstellen(Zählen.countEachLetter(text));
|
|
HashMap<Character, String> codes = new HashMap<Character, String>();
|
|
generieren(codes,wurzel,"");
|
|
|
|
for (var entry : codes.entrySet())
|
|
{
|
|
System.out.println("->" + entry.getKey() + ", Code: " + entry.getValue());
|
|
}
|
|
}
|
|
|
|
public static void generieren(HashMap<Character, String> codes, Node node, String code)
|
|
{
|
|
if(node == null)return;
|
|
if(node.getLeft() == null && node.getRight() == null)
|
|
{
|
|
codes.put(node.getBuchstabe(), code);
|
|
return;
|
|
}
|
|
generieren(codes, node.getLeft(), code + "0");
|
|
generieren(codes, node.getRight(), code + "1");
|
|
}
|
|
|
|
public static String codierung(String text, Node wurzel)
|
|
{
|
|
HashMap<Character, String> codes = new HashMap<Character, String>();
|
|
|
|
if(wurzel.getLeft() == null && wurzel.getRight() == null)
|
|
{
|
|
codes.put(wurzel.getBuchstabe(), "0");
|
|
}
|
|
else
|
|
{
|
|
generieren(codes,wurzel,"");
|
|
}
|
|
String code = "";
|
|
for (int i=0; i<text.length();i++)
|
|
{
|
|
char b = text.charAt(i);
|
|
String c = codes.get(b);
|
|
code += c;
|
|
}
|
|
System.out.println("Huffman-Codierung: " + code);
|
|
return code;
|
|
}
|
|
|
|
public static String decodierungBaum(String code,Node baum)
|
|
{
|
|
Node current = baum;
|
|
String decoded = "";
|
|
|
|
for(int i =0;i<code.length();i++)
|
|
{
|
|
printBaum(current);
|
|
System.out.println();
|
|
|
|
if(current.getRight() == null && current.getLeft() == null)
|
|
{
|
|
decoded += current.getBuchstabe();
|
|
current = baum;
|
|
}
|
|
|
|
if(code.charAt(i) == '1')
|
|
{
|
|
current= baum.getRight();
|
|
}
|
|
if(code.charAt(i) == '0')
|
|
{
|
|
current = baum.getLeft();
|
|
}
|
|
}
|
|
System.out.println(decoded);
|
|
return decoded;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|