利用哈夫曼编码压缩文本---java实现

该博客详细介绍了如何使用哈夫曼编码进行文本压缩。首先,统计文本词频并计算权值;接着,根据权值构建哈夫曼树;然后,得到哈夫曼编码;进一步,建立哈希表映射字符的ASCII码和哈夫曼编码;之后,组合所有哈夫曼编码成字符串;最后,按每8位切割并转换为十进制存入字节数组,完成压缩过程。
摘要由CSDN通过智能技术生成

1)步骤一:统计文本词频并获得权值

2)步骤二:通过获得的词频权值构建哈夫曼树

3)步骤三:通过哈夫曼树获得哈夫曼编码

4)步骤四:通过哈夫曼编码构建一个哈夫曼表(哈希表HashMap)key = 字符对应的ASUII码,value = 对应的哈夫曼编码

5)步骤五:通过哈夫曼编码获得哈夫曼编码字符串(就是将所有的哈夫曼编码字符串拼接)

6)步骤六:我们按照,每八个01串切割一次并转换成十进制数存入byte[ ]数组中,的规则去获得我们的压缩后的byte数组,即压缩完毕。这里我们需要注意如果最后剩下的01串小于8个那么我们就全部接收并转换

package 算法and数据结构.数据结构.哈夫曼树;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.List;
/*
        huffmanTree的存储内容有:
            指向最优孩子的指针
            权值
            指向父亲的指针
            特点:
                想要成为huffmanTree必须要使带权路径和最小。
                即WPL最小
     */
public class Node implements Comparable<Node>{
   

    Node left ;
    Node right;

    //这里我们暂时只记录当前结点是否具有权值
    String coding;
    Integer weigh;
    Byte date;
    public Node(){
   
        left = right = null;
        coding = null ;
    }
    public Node(Integer val){
   
        this.weigh =val;
    }
    public Node(Integer val,Byte date){
   
            this.weigh =val;
            this.date =date;
    }
    public Node(Node left , Node right){
   
        this.left = left;
        this.right = right;
    }
    public void pre(){
   
        System.out.println("coding--> "+coding+"    weight--> "+weigh+"     isLeaf--> "+(this.left==null&&this.right==null));
        if(this.left != null){
   
            this.left.pre();
        }
        if(this.right != null){
   
            this.right.pre();
        }
    }
    @Override
    public 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值