-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHuffmanCoding.java
More file actions
73 lines (55 loc) · 2.08 KB
/
HuffmanCoding.java
File metadata and controls
73 lines (55 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.util.*;
class HuffmanNode implements Comparable<HuffmanNode> {
char character;
int frequency;
HuffmanNode left, right;
public HuffmanNode(char character, int frequency) {
this.character = character;
this.frequency = frequency;
}
@Override
public int compareTo(HuffmanNode other) {
return this.frequency - other.frequency;
}
}
public class HuffmanCoding {
private static Map<Character, String> huffmanCodes = new HashMap<>();
public static void buildHuffmanTree(Map<Character, Integer> frequencyMap) {
PriorityQueue<HuffmanNode> minHeap = new PriorityQueue<>();
for (char character : frequencyMap.keySet()) {
minHeap.offer(new HuffmanNode(character, frequencyMap.get(character)));
}
while (minHeap.size() > 1) {
HuffmanNode left = minHeap.poll();
HuffmanNode right = minHeap.poll();
HuffmanNode mergedNode = new HuffmanNode('\0', left.frequency + right.frequency);
mergedNode.left = left;
mergedNode.right = right;
minHeap.offer(mergedNode);
}
HuffmanNode root = minHeap.poll();
generateHuffmanCodes(root, "");
}
public static void generateHuffmanCodes(HuffmanNode root, String code) {
if (root == null) {
return;
}
if (root.character != '\0') {
huffmanCodes.put(root.character, code);
}
generateHuffmanCodes(root.left, code + "0");
generateHuffmanCodes(root.right, code + "1");
}
public static void main(String[] args) {
String inputString = "this is an example for huffman encoding";
Map<Character, Integer> frequencyMap = new HashMap<>();
for (char c : inputString.toCharArray()) {
frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
}
buildHuffmanTree(frequencyMap);
System.out.println("Huffman Codes:");
for (char c : huffmanCodes.keySet()) {
System.out.println(c + " -> " + huffmanCodes.get(c));
}
}
}