哈夫曼abcdef编码

本文探讨了如何利用哈夫曼编码进行数据压缩,特别是在处理10万个字符的数据文件时,寻找最佳的二进制编码策略以提高压缩率。文章通过Java代码详细展示了哈夫曼编码的构建过程,包括哈夫曼树的创建和节点类的定义。
摘要由CSDN通过智能技术生成

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() {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值