使用哈夫曼编码对字符串进行编译和解码

本文介绍了如何使用哈夫曼编码对字符串进行编译和解码,详细阐述了哈夫曼编码和解码的过程,是Java开发者理解数据结构与压缩算法的良好参考资料。
摘要由CSDN通过智能技术生成

哈夫曼编码解码思路

1、哈夫曼编码

首先创建一个哈夫曼树,以字符出现的次数为标准创建;使用List类存放所创建的节点,后面方便进行删除,获得哈夫曼树的根节点,用Map统计对应的字符出现的次数
//创建一个节点,需要实现Comparable类,进行比较
class Node implements Comparable<Node> {
   
	Byte data; // 存放数据(字符)本身,比如'a' => 97 ' ' => 32
	int weight; //权值, 表示字符出现的次数
	Node left;//
	Node right;
	public Node(Byte data, int weight) {
   
		
		this.data = data;
		this.weight = weight;
	}
	@Override
	public int compareTo(Node o) {
   
		// 从小到大排序
		return this.weight - o.weight;
	}
	
	public String toString() {
   
		return "Node [data = " + data + " weight=" + weight + "]";
	}
	
}
private static List<Node> getNodes(byte[] bytes){
   
		List<Node> list=new ArrayList<>();
		//遍历 bytes , 统计 每一个byte出现的次数->map[key,value]
		Map<Byte,Integer> counts=new HashMap<>();
		for(byte b:bytes) {
   
			Integer count = counts.get(b);
			if(count==null) {
   
				counts.put(b, 1);
			}else {
   
				counts.put(b, ++count);
			}
		}
		//把每一个键值对转成一个Node 对象,并加入到nodes集合
		//遍历map
		for(Map.Entry<Byte, Integer> entry: counts.entrySet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值