使用哈夫曼编码实现数据的压缩和解压(java版)

本文介绍了使用哈夫曼编码进行数据压缩和解压的方法。首先阐述了哈夫曼树的概念,并通过图形化方式展示其构造过程。接着详细解释了如何利用哈夫曼树生成哈夫曼编码,以减少数据传输中的冗余。最后,讨论了哈夫曼编码在文件无损压缩中的应用,强调了压缩效果与原文件类型的关联性。
摘要由CSDN通过智能技术生成

1、哈夫曼树

    哈夫曼编码使用哈夫曼树的数据结构,哈夫曼树图解如下,即构造一个带权路径最小的数;

2、哈夫曼编码

使用哈夫曼树生成哈夫曼编码,已实现减少传输中数据的冗余;截取网络课程中的几张图来说明;

3、代码实现

package tree.huffmanTree.huffmanCode;

public class HuffmenNode implements Comparable<HuffmenNode> {
    //存储的字符(用Byte不用byte的原因是,对于新创建的节点是没有字符的,即data可能为null)
    Byte data;
    //权重(记录出现的次数)
    int weight;

    HuffmenNode leftNode;
    HuffmenNode rightNode;

    public HuffmenNode(Byte data, int weight) {
        this.data = data;
        this.weight = weight;
    }

    @Override
    public String toString() {
        return "HuffmenNode{" +
                "data=" + data +
                ", weight=" + weight +
                '}';
    }

    @Override
    public int compareTo(HuffmenNode o) {
        return o.weight - this.weight;
    }
}
package tree.huffmanTree.huffmanCode;

import java.io.*;
import java.util.*;

public class HuffmenCodeTest {
    public static void main(String[] args) {
        String msg = "can you can a can as a can canner can a can.";
        byte[] bytes = msg.getBytes();
        System.out.println(Arrays.toString(bytes));
        System.out.println("压缩前的数据长度:" + bytes.length);
        //使用赫夫曼编码压缩
        byte[] tar = huffmenZip(bytes);
        System.out.println("压缩后的数据长度:" + tar.length);
        //使用赫夫曼编码表解压
        byte[] sourceByte = decodeByHuffmen(tar, mapCode);
        System.out.println(new String(sourceByte));

        String src = "D:\\javaproject\\DataStructure\\src\\tree\
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值