1、 哈夫曼编码问题
我们希望压缩一个10万个字符的数据文件,下图给出文件中所出现的字符和他们的出现频率。
字符 | 频率(千次) |
---|---|
a | 45 |
b | 13 |
c | 12 |
d | 16 |
e | 9 |
f | 5 |
考虑一种二进制编码,每个字符用一个唯一的二进制串表示,给出压缩率最好的编码方式,也即字符的最优二进制表示。
java代码实现:
结构:
main函数:
package com;
import com.TreeCode.Code;
import com.TreeCode.HuffNode;
import com.TreeCode.HuffmanTree;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
Scanner input = new Scanner(System.in);
int n,m;
System.out.print("请输入字符个数:");
n = input.nextInt();
m=2*n-1;
HuffmanTree huffmanTree=new HuffmanTree();
HuffNode[] huffmanTreeNodes = new HuffNode[m];
Code[] huffmanCode = new Code[n];
//初始化huffmanTree,huffmanCode
huffmanTree.initHuffmanTree(huffmanTreeNodes,m);
huffmanTree.initHuffmanCode(huffmanCode,n);
//获取huffmanCode的符号
System.out.print("请输入哈夫曼编码的字符:");
huffmanTree.getHuffmanCode(huffmanCode,n);
//获取huffmanTree的频数
System.out.print("请输入哈夫曼编码字符对应的频数:");
huffmanTree.getHuffmanWeight(huffmanTreeNodes,n);
//创建huffmanTree
huffmanTree.createHaffmanTree(huffmanTreeNodes,n);
//创建huffmanCode
huffmanTree.createHaffmanCode(huffmanTreeNodes,huffmanCode,n);
//输出huffmanCode编码
huffmanTree.ouputHaffmanCode(huffmanCode,n);
}
}
哈夫曼编码类:
package com.TreeCode;
public class Code
{
String character;
String code;
Code(String character,String code){
this.character=character;
this.code=code;
}
Code(String code){
this.code= code;
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public String getCode() {