From 89fae51f24cf956571f17123748f98841c4f4e5d Mon Sep 17 00:00:00 2001 From: L <@> Date: Mon, 7 Apr 2025 16:42:34 +0200 Subject: [PATCH] bis punkt 3 gemacht --- Main.java | 65 ++++++++++++++++++++++++++++++++++++ Node.java | 94 +++++++++++++++++++++-------------------------------- Zählen.java | 15 ++++++--- 3 files changed, 112 insertions(+), 62 deletions(-) create mode 100644 Main.java diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..d38d490 --- /dev/null +++ b/Main.java @@ -0,0 +1,65 @@ +import java.util.HashMap; +import java.util.*; + +public class Main +{ + public static void codes(String text) + { + Node wurzel = Node.erstellen(Zählen.countEachLetter(text)); + HashMap codes = new HashMap(); + generieren(codes,wurzel,""); + + for (var entry : codes.entrySet()) + { + System.out.println("->" + entry.getKey() + ", Code: " + entry.getValue()); + } + } + + public static void generieren(HashMap 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 void codierung(String text) + { + Node wurzel = Node.erstellen(Zählen.countEachLetter(text)); + HashMap codes = new HashMap(); + + if(wurzel.getLeft() == null && wurzel.getRight() == null) + { + codes.put(wurzel.getBuchstabe(), "0"); + } + else + { + generieren(codes,wurzel,""); + } + String code = ""; + for (int i=0; i häufigkeiten) { - ArrayList nodes = new ArrayList(); - - for (Map.Entry entry : häufigkeiten.entrySet()) + PriorityQueue nodes = new PriorityQueue(Comparator.comparingInt(n -> n.anzahl)); + + for (var entry : häufigkeiten.entrySet()) { - Character character = entry.getKey(); - int anzahl = entry.getValue(); + Node node = new Node(); + node.setAnzahl(entry.getValue()); + node.setBuchstabe(entry.getKey()); + nodes.add(node); } - + while (nodes.size() > 1) { - Node min1 = nodes.get(1); - - for (Node node : nodes) - { - //if(node.getCount() < min1.getCount()) - } + Node min1 = nodes.poll(); + Node min2 = nodes.poll(); + Node wurzel = new Node(); + wurzel.setLeft(min1); + wurzel.setRight(min2); + wurzel.setAnzahl(min1.getAnzahl() + min2.getAnzahl()); + nodes.add(wurzel); } - return null; + return nodes.poll(); } } diff --git a/Zählen.java b/Zählen.java index 94a1287..e5deaf4 100644 --- a/Zählen.java +++ b/Zählen.java @@ -1,23 +1,28 @@ import java.util.HashMap; import java.util.Map; -public class Zählen { - public static void countEachLetter(String input) { + +public class Zählen +{ + public static Map countEachLetter(String input) + { // Konvertiere den String in ein char-Array char[] characters = input.toCharArray(); - + // Initialisiere die Map zum Speichern der Buchstabenanzahl Map letterCountMap = new HashMap<>(); // Durchlaufe das Array und zählt alle zeichen for (char c : characters) { - letterCountMap.put(c, letterCountMap.getOrDefault(c, 0) + 1); + letterCountMap.put(c, letterCountMap.getOrDefault(c, 0) + 1); } // Ausgabe der Anzahl jeder einzelnen Buchstaben - for (Map.Entry entry : letterCountMap.entrySet()) { + for (Map.Entry entry : letterCountMap.entrySet()) + { System.out.println("Buchstabe: " + entry.getKey() + ", Anzahl: " + entry.getValue()); } + return letterCountMap ; } }