Java课程设计——哈夫曼编码译码系统的Java语言实现(附Java源码与课程设计报告)

数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告) 数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告) 数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告) 数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告)............ 阅读详情

以下都是我在优快云发布是文章好吧。

数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告)
数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告)
数据库课程设计——某煤气公司送气管理系统(附课设报告)
数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告)
Java课程设计——哈夫曼编码译码系统的Java语言实现
C语言课程设计——班级成绩管理系统(附课设报告)
C语言课程设计——排班系统 DFS解决(附课设报告)

0. 系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. 系统类图

在这里插入图片描述

2. 课程设计报告

在这里插入图片描述

3. 部分源码展示

import java.io.*;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

public class HuffmanEncoder implements DataShare {
    private String fileName;
    private Node huffmanTree;
    private HashMap<Character, Integer> charFrequencies;
    private HashMap<Character, String> huffmanCodeMap;
    private String text;
    private String encodedText;
    /*private static final String treeExportPath = "G:\\project\\test data\\HuffmanTree.txt";
    private static final String encodedTextExportPath = "G:\\project\\test data\\EncodedText.txt";*/
    private static final String treeExportPath = "HuffmanTree.txt";
    private static final String encodedTextExportPath = "EncodedText.txt";

    HuffmanEncoder(String fileName) {
        // just don't want to fold the code
        this.fileName = fileName;
        charFrequencies = new HashMap<>();
    }

    public String getEncodedText() {
        // just don't want to fold the code
        return encodedText;
    }

    public String getText() {
        // just don't want to fold the code
        return text;
    }

    private void getCharFrequencies() {
        int ch;
        StringBuilder textBuilder = new StringBuilder();
        try {
            Reader in = new FileReader(fileName);
            while ((ch = in.read()) != -1) {
                char c = (char)ch;
                textBuilder.append(c);
                charFrequencies.put(c, charFrequencies.containsKey(c) ? charFrequencies.get(c) + 1 : 1);
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        text = textBuilder.toString();
    }

    private void createHuffmanTree() {
        // 优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法
        PriorityQueue<Node> priorityQueue = new PriorityQueue<Node>();
        // Map.Entry<K,V>接口 映射项(键-值对)
        // 类HashMap<K,V>的方法 Set<Map.Entry<K,V>> entrySet() 返回此映射所包含的映射关系的 Set 视图
        for (Map.Entry<Character, Integer> kv : charFrequencies.entrySet()) {
            priorityQueue.add(new Node(kv.getKey(), kv.getValue(), null, null));
        }
        while (priorityQueue.size() > 1) {
            Node node1 = priorityQueue.poll();
            // System.out.print(node1.ch);
            Node node2 = priorityQueue.poll();
            // System.out.print(node2.ch);
            priorityQueue.add(new Node('\0', node1.freq + node2.freq, node1, node2));
        }
        huffmanTree = priorityQueue.poll();
    }

    private void createHuffmanCode(Node node, HashMap<Character, String> hashMap, String string) {
        if (node.lChild == null && node.rChild == null) {
            hashMap.put(node.ch, string);
            return;
        }
        createHuffmanCode(node.lChild, hashMap, string + '0');
        createHuffmanCode(node.rChild, hashMap, string + '1');
    }

    private void getHuffmanCode() {
        huffmanCodeMap = new HashMap<>();
        createHuffmanCode(huffmanTree, huffmanCodeMap, "");
    }

    private void encode() {
        StringBuilder encodedTextBuilder = new StringBuilder();
        for (char ch : text.toCharArray()) {
            encodedTextBuilder.append(huffmanCodeMap.get(ch));
        }
        encodedText = encodedTextBuilder.toString();
        /*try {
            int ch;
            Reader in = new FileReader(fileName);
            while ((ch = in.read()) != -1) {
                encodedTextBuilder.append(huffmanCodeMap.get((char) ch));
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        encodedText = encodedTextBuilder.toString();*/
    }

    private void exportEncodedText() throws IOException {
        // G:\project\test data\Red history thriving along highway.txt
        File file = new File(encodedTextExportPath);
        if (file.createNewFile()) {
            RandomAccessFile out = new RandomAccessFile(file, "rw");
            out.writeBytes(encodedText);
        }
    }

    private void exportHuffmanTree() {
        File file = new File(treeExportPath);
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(huffmanTree);
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String calculateCompressionRatio() {
        File text = new File(fileName);
        File encodedText = new File(encodedTextExportPath);
        /*System.out.println(text.length());
        System.out.println(encodedText.length());*/
        String ratio = String.format("%.4f", (double)encodedText.length() / (double)text.length() / 16.0);
        return NumberFormat.getPercentInstance().format(Double.parseDouble(ratio));
    }

    public Object[][] getFileData() {
        File textFile = new File(fileName);
        File encodedTextFile = new File(encodedTextExportPath);

        Object[][] fileData = new Object[2][3];
        fileData[0][0] = textFile.getName();
        fileData[0][1] = textFile.length();
        fileData[0][2] = textFile.getAbsolutePath();
        fileData[1][0] = encodedTextFile.getName();
        fileData[1][1] = encodedTextFile.length() / 16;
        fileData[1][2] = encodedTextFile.getAbsolutePath();

        return fileData;
    }

    public Object[][] getCodingData() {
        Object[][] codingData = new Object[charFrequencies.size()][3];
        int count = 0;
        for (Map.Entry<Character, Integer> kv : charFrequencies.entrySet()) {
            codingData[count][0] = kv.getKey();
            codingData[count][1] = kv.getValue();
            ++count;
        }
        count = 0;
        for (Map.Entry<Character, String> kv : huffmanCodeMap.entrySet()) {
            codingData[count][2] = kv.getValue();
            ++count;
        }
        return codingData;
    }

    public void execute() throws IOException {
        getCharFrequencies();
        createHuffmanTree();
        getHuffmanCode();
        encode();
        exportHuffmanTree();
        exportEncodedText();
    }

    /*public void showHuffmanCodeMap() {
        for (Map.Entry<Character, String> kv : huffmanCodeMap.entrySet()) {
            System.out.println(kv.getKey() + " : " + kv.getValue());
        }
    }

    public void showCharFrequencies() {
        for (Map.Entry<Character, Integer> kv : charFrequencies.entrySet()) {
            System.out.println(kv.getKey() + " : " + kv.getValue());
        }
    }

    public static void main(String[] args) throws IOException {
        HuffmanEncoder en = new HuffmanEncoder();
        en.setFileName("G:\\project\\src\\test.txt");
        en.getCharFrequencies();
        en.createHuffmanTree();
        en.getHuffmanCode();
        en.encode();
        en.exportHuffmanTree();
        en.showCharFrequencies();
        en.exportEncodedText();
        System.out.println(en.encodedText);
        System.out.println(en.calculateCompressionRatio());
    }*/

}

4. 资源展示

在这里插入图片描述

哈弗曼编码译码系统 采用java窗体设计编写,功能有哈夫曼树的生成,哈弗曼编码的生成,以及根据哈夫曼树和哈夫曼编码反编译成文档,资源为源代码。 立即下载

相关推荐

数据结构课程设计 哈夫曼树编码解码 java javafx

利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道 (即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试对于任意的一段文本(可能是直接输入的,也可能是保存在本地文件中或者网络上的),写一个哈夫曼码的编译码系统。 一个完整的系统应具有以下功能: (l)I:初始化 (Initialization)。从终端读入字符集大小 n,及 n 个字符和 m 个权值,建立哈夫曼树,并将它存于文件 hfmtree 中。 (2)C:编码 (Coding)。利用已建好的哈夫曼树(如不在内存,则从文件 hfmtree 中读入),对文件 tobetrans 中的正文进行编码,然后将结果存入文件 codefile 中。 (3)D:解码(Decoding)。利用已建好的哈夫曼树将文件 codefile 中的代码进行译码,结果存入文件 textfile 中。 (4)P:打印代码文件 (Print)。将文件 codefile 以紧凑格式显示在终端上,每行 50 个

【数据结构与算法】超详细哈夫曼编码JAVA解释

依据文档要求,用户需要输入源文件和目标文件名,那么如何将提取源文件内容是重点,常见的提取方式是提取源文件的字符,即采用char数组存储,然而这种方式只能实现对文本文件的压缩和解压,不能对非文本文件进行压缩和解压,并且要实现任何文件的哈夫曼编码,只能对源文件中的字节进行哈夫曼编码,而采用int数组在实现转换字节的理解和编程上困难,故本文采用byte数组进行模拟,并且通过输入流提取源文件的字节数组。当递归到叶子节点时,将节点的字节值作为哈夫曼编码map的key,将对应的哈夫曼编码字符串作为map的value。

weixin_45720193的博客 2078

哈夫曼编码系统(C语言实现)

利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站设计一个基于哈夫曼编码的通信系统。 系统应具有以下功能: 1)初始化处理:建立通信系统 2)发送端信息编码 3)接受端信息译码

java赫夫曼编码

将给出的一段文本,比如 “i like like like java do you like a java” , 根据前面的讲的赫夫曼编码原理,对其进行数。再将这颗新的二叉树,以根节点的权值大小 再次排序, 不断重复 1-2-3-4 的步骤,直到数列中,所有的数据都被处理,一样的,都是最小的, 最后生成的赫夫曼编码的长度是一样,比如: 如果我们让每次生成的新的二叉树总是排在权。4 根据赫夫曼树,给各个字符,规定编码 (前缀编码), 向左的路径为 0 向右的路径为 1 , 编码。不会造成匹配的多义性。

papillonlong的博客 607

某煤气公司送气管理系统

实现工作人员、客户信息的管理; 实现煤气类别和供应商的管理; 实现煤气入库管理和出库管理; 实现费用管理; 创建触发器,实现入库、出库时相应类型煤气的数量的增加或减少; 创建存储过程统计每个送气员工指定月份送气的数量; 创建存储过程查询指定月份用气量最大的前10个用户,并按用气量递减排列; 建立数据库相关表之间的参照完整性约束; 建立表间关系。

《科研伦理与学术规范》 全部 习题_答案 2020年秋

科研伦理与学术规范 答案 文章目录科研伦理与学术规范 答案1. 第一章课后习题(必做) 答案1.1 第一章Demo2. 第二章课后习题(必做) 答案3. 第三章课后习题(必做) 答案4. 第四章课后习题(必做) 答案5. 第五章课后习题(必做) 答案6. 第六章课后习题(必做) 答案 # 每行5题 #写于2020.11.17 侵删 1. 第一章课后习题(必做) 答案 ABC, A, B ,D ,ABCD ABC, D, A, BCD, C D, D, 1.1 第一章Demo

羊老羊 25万+

某煤气公司送气管理系统C#

系统+源码+参考报告

qq_62740127的博客 474

企业微信-审批控件中的外部选项的应用全流程完美解决方案

完美解决企业微信所有JS-SDK调用问题 完美解决苹果和PC端不适配的问题

qq_45195039的博客 5872

数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告)

数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告) 数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告) 数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告).........

枯木何日可逢春 3万+

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 415

[ROS] rviz 可视化工具

[ROS] rviz 可视化工具 摄像头没讲 文章目录[ROS] rviz 可视化工具1. todo2. todo*. 参考*. 问题解决*. rough 1. todo 2. todo *. 参考 *. 问题解决 *. rough roscore + rviz

weixin_37834269的博客 2051

数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告)

数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告) 数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告)

枯木何日可逢春 1664

Gromacs基础教程一:入门建议

本系列教程针对的群体:非计算化学专业,而是偏生物方向的、有少量分子动力学模拟需求的人群。

m0_67843839的博客 8574

C语言课程设计——排班系统 DFS解决(附课设报告)

C语言课程设计——排班系统 DFS解决(附课设报告) C语言课程设计——排班系统 DFS解决(附课设报告) C语言课程设计——排班系统 DFS解决(附课设报告)

枯木何日可逢春 1万+

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1025

代码复现5——VLMaps

报错“AttributeError: module 'clip' has no attribute 'load'”,运行下述命令解决。运行后接着报错:“ModuleNotFoundError: No module named 'pytorch_lightning'”运行后命令后会弹出一个RGB窗口,可以用键盘上的“W”“A”“D”键控制移动视角的变化,“空格”键开始记录,“q”键停止。并更改相关代码文件,vlmaps/vlmaps/lseg/modules/models/lseg_vit.py。

qq_44100524的博客 603

C语言课程设计——班级成绩管理系统(附课设报告)

C语言课程设计——班级成绩管理系统(附课设报告)

枯木何日可逢春 1万+

如何在Windows上安装Node-RED?

Node-RED 是一款基于流程的可视化编程工具,专注于物联网(IoT)和自动化应用的快速开发,其核心特点是通过拖拽节点构建数据流网络,实现低代码/无代码编程。

猿小白的博客 1173

数据结构课程设计[2023-01-19]

数据结构课程设计一、课程设计要求二、课程设计完成后应上交的材料(1)打印课程设计报告收齐上交报告内容见模板文件要重视报告,是评分的重要依据(2)报告与程序打包上传云班课(3)打印版报告下学期开学统一收齐交到316 办公室。

程序设计 2840

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

哈夫曼编码与解码

哈夫曼编码与译码 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 520            测试通过 : 188 比赛描述 已知电文包括的字符集为{A,C,I,M,N,P,T,U},输入对应权值,对字符集合进行哈夫曼编码,完成电文的哈夫曼编码与译码工作。 输入 共三行:

Fi__Phoenix的博客 1223

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据库课程设计——某煤气公司送气管理系统(附课设报告)

数据库课程设计 —— 某煤气公司送气管理系统(附课设报告)

枯木何日可逢春 8156

课程设计---哈夫曼树的编码与解码(Java详解)

哈夫曼树编码&&解码详解( ´◔︎ ‸◔︎`)(Java)

2302_79862386的博客 3619

哈夫曼编 译码器java,哈夫曼编译码器-数据结构报告.源代码(源码).doc

哈夫曼编译器班级号名 :葛俊峰需求分析根据输入的字符和字符的权值建立哈夫曼树。字符的数目和字符的权值由用户自己设定。根据建立的哈夫曼树进行,编码和译码操作。概要设计哈夫曼树的定义typedef struct{char letter; //存储字符int weight; //存储字符的权值int parent; //父亲int lchild; //左孩子int rchild; //右孩...

weixin_42412524的博客 409

[源码和文档分享]基于JAVA实现的Huffman哈夫曼树编码与解码

1 概述 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码...

chuiqi9947的博客 108

基于JAVA实现的Huffman哈夫曼树编码与解码

1 概述 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概...

demongwc的博客 164

java 哈夫曼压缩算法的分析与实现[源码][附图]

一、需求分析: 在日常的工作生活中,出于文件存储、传输的要求,需要对文件进行压缩。Huffman压缩是基于哈夫曼树而进行压缩的一种无损压缩算法。 Huffman算法是一种基于统计的压缩方法。它的本质就是对文本文件中的字符进行重新编码,对于使用频率越高的字符,其编码也越短。 二、概要设计: 要设计一套压缩软件,最核心的部分即是算法,具体在于建树与生成编码的过程。 同时,还需要制定一...

萧晓 373
上一篇: 【数据结构】堆排序图解及实现 —— C++
下一篇: 数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告)
枯木何日可逢春
枯木何日可逢春 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 4110粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木何日可逢春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值