From 98431e2ec312e4db8fd9b7b0e6b397007310f630 Mon Sep 17 00:00:00 2001 From: putku45 Date: Tue, 10 Mar 2026 10:56:28 +0530 Subject: [PATCH 1/2] feat: add Huffman Coding greedy algorithm implementation --- .../greedyalgorithms/HuffmanCoding.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java diff --git a/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java b/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java new file mode 100644 index 000000000000..fc6c67d5d54a --- /dev/null +++ b/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java @@ -0,0 +1,47 @@ +package com.thealgorithms.greedyalgorithms; + +import java.util.PriorityQueue; + +/** + * Huffman Coding Algorithm + * Greedy algorithm used for optimal prefix codes. + */ +public class HuffmanCoding { + + static class Node implements Comparable { + char character; + int frequency; + Node left; + Node right; + + Node(char character, int frequency) { + this.character = character; + this.frequency = frequency; + } + + public int compareTo(Node other) { + return this.frequency - other.frequency; + } + } + + public static Node buildHuffmanTree(char[] chars, int[] freq) { + PriorityQueue pq = new PriorityQueue<>(); + + for (int i = 0; i < chars.length; i++) { + pq.add(new Node(chars[i], freq[i])); + } + + while (pq.size() > 1) { + Node left = pq.poll(); + Node right = pq.poll(); + + Node parent = new Node('\0', left.frequency + right.frequency); + parent.left = left; + parent.right = right; + + pq.add(parent); + } + + return pq.poll(); + } +} From 1b6caf971b13d13bf5dfa581d4a4645a66c2a3a5 Mon Sep 17 00:00:00 2001 From: putku45 Date: Tue, 10 Mar 2026 11:36:23 +0530 Subject: [PATCH 2/2] feat: add Huffman Coding greedy algorithm implementation Added Huffman Coding algorithm implementation. Huffman Coding is a greedy algorithm used for optimal prefix coding and data compression. Reference: https://en.wikipedia.org/wiki/Huffman_coding --- .../thealgorithms/greedyalgorithms/HuffmanCoding.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java b/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java index fc6c67d5d54a..4839bafa9a02 100644 --- a/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java +++ b/src/main/java/com/thealgorithms/greedyalgorithms/HuffmanCoding.java @@ -4,7 +4,13 @@ /** * Huffman Coding Algorithm - * Greedy algorithm used for optimal prefix codes. + * + * Greedy algorithm used for optimal prefix coding and data compression. + * + * Time Complexity: O(n log n) + * Space Complexity: O(n) + * + * https://en.wikipedia.org/wiki/Huffman_coding */ public class HuffmanCoding { @@ -19,8 +25,9 @@ static class Node implements Comparable { this.frequency = frequency; } + @Override public int compareTo(Node other) { - return this.frequency - other.frequency; + return Integer.compare(this.frequency, other.frequency); } }