导航:首页 > 文件处理 > 哈夫曼编码压缩java

哈夫曼编码压缩java

发布时间:2022-07-11 05:19:50

1. 哈夫曼编码与译码 java

class
HaffmanNode
//哈夫曼树的结点类
{
int
weight;
//
权值
int
parent,left,right;
//父母结点和左右孩子下标
public
HaffmanNode(int
weight)
{
this.weight
=
weight;
this.parent=-1;
this.left=-1;
this.right=-1;
}
public
HaffmanNode()
{
this(0);
}
public
String
toString()
{
return
this.weight+",
"+this.parent+",
"+this.left+",
"+this.right;
}
return
code;
}
public
static
void
main(String[]
args)
{
int[]
weight={5,29,7,8,14,23,3,11};
//指定权值集合
HaffmanTree
htree
=
new
HaffmanTree(weight);
System.out.println("哈夫曼树的结点数组:\n"+htree.toString());
String[]
code
=
htree.haffmanCode();
System.out.println("哈夫曼编码:");
for
(int
i=0;
i<code.length;
i++)
System.out.println(code[i]);
}
}

2. java 写的哈夫曼编译

河边茂盛的草地,在干草收割之前,
在狞笑着
清晨四点钟,夏天,
寻找虔敬的仪式,
从大海蓝色的中睡中,废墟提起
清目醒神常洗头哈哈

3. huffman哈弗曼编码的问题(java)

package Huffman;
public class HuffmanTree {
int leafNum; //叶子结点数
HuffmanNode[] hnodes; //HaffmanTree 的结点数组
public HuffmanTree(int[] weight){
int n=weight.length;
this.leafNum=n;
this.hnodes=new HuffmanNode[2*n-1];
for(int i=0;i<=n-1;i++)
{
this.hnodes[i]=new HuffmanNode(weight[i]);
}
for(int i=0;i<n-1;i++)
{
int min1,min2,x1,x2;
min1=min2=Integer.MAX_VALUE; //记录最小和次小的权值,初始为最大
x1=x2=-1; //记录两个无父母的最小权值的结点下标
for(int j=0;j<n+i;j++)
{
//查找无父母的最小权值结点
if(this.hnodes[j].weight<min1 && this.hnodes[j].parent==-1)
{
min2=min1;
x2=x1;
min1=this.hnodes[j].weight;
x1=j;
}
else if(this.hnodes[j].weight<min2 && this.hnodes[j].parent==-1)
{
min2=this.hnodes[j].weight;
x2=j;
}
}
this.hnodes[x1].parent=n+i; //将找出的两课权值最小的二叉树合并
this.hnodes[x2].parent=n+i;
this.hnodes[n+i]=new HuffmanNode(0);
this.hnodes[n+i].weight=this.hnodes[x1].weight+this.hnodes[x2].weight;
this.hnodes[n+i].left=x1;
this.hnodes[n+i].right=x2;
}
}
public String[] huffmanCode(){
//返回当前haffmantree的编码
String[] code=new String[this.leafNum];
for(int i=0;i<this.leafNum;i++)
{
code[i]="";
int child=i;
int parent=hnodes[child].parent;
while(parent!=-1)
{
if(hnodes[parent].left==child)
code[i]="0"+code[i];
else
code[i]="1"+code[i];
child=parent;
parent=hnodes[child].parent;
}
}
return code;
}
public static void main(String []args)
{
int[] weight={22,32,45,57,7,76,33};
HuffmanTree ht=new HuffmanTree(weight);
String[] code=ht.huffmanCode();
for(int i=0;i<code.length;i++)
System.out.println(weight[i]+" 哈夫曼编码为: "+code[i]);
}
}
改了其中的几个for循环条件 可以运行了

4. 如何用java和huffman编码实现压缩文件和解压文件

尽玩高难的。。。我都是直接用java zip这种类,你这个是要玩算法啊,不过是个课题,有个思路,可以这样做,就是先用io流把源文件内容读到内存,然后用你的huffman算法把他换成另只用字符串,然后在哟好那个io流输出出来同时该个文件名后缀比如点jhm就是用java实现的huffman文件

5. 50分,求用Java实现哈夫曼编码

你这是属于毕设?还是课程设计?自己好好学习看看吧,别什么都问,如果在做到过程中遇到问题,大家都会很乐意回答的

6. java哈夫曼编码压缩文件的思想

一.模型表示:
计算机使用数字代码来存储字符,ASC II码是最常用的编码。一个ASC II码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位,共128个。要对一个文本文件进行压缩,就是要对文件内的字符重新编码,使出现次数较多的字符用较短的编码存储,而出现次数少的字符则采用相对较长的编码存储,最终使压缩后整个文件的大小小于原文件。
这里采用哈夫曼编码方式来对每个字符重新编码,因为哈夫曼树具有最小带权路径长度的性质,能够生成用于压缩的二进制前缀码。程序使用的 “静态统计模型”,也就是说在编码前统计要编码的信息中所有字符的出现频率,字符的出现频率即为字符的权,然后根据统计出的信息建立编码树,进行编码。利用所得的编码生成压缩文件。由于采用的是“静态统计模型”,在压缩文件里必须保存统计出的结果以便解码时构造相同的编码树,或者直接保存编码树本身。
在解压缩时,首先从文件头读入保存的编码信息,从而对后续的编码解码,还原成ASCII的形式,生成与原文相同的文件。

二.概要设计:
由于一棵有n个叶子结点的哈夫曼树共有2n-1个结点,考虑到程序的执行效率,可以将二叉树存放在连续空间里(静态链表),空间的每个结点内仍有左子树、右子树、双亲等指针,以便译码和解码。即存储在一个大小为2n-1的一维数组中,每个结点的结构为:
struct HNode
{
char elem; //保存结点所表示的字符(主要用于译码时)
unsigned long weight; //保存结点的权值,对于叶子,即为字符的出现次数
int parent, lchild, rchild; //保存结点的双亲,左右孩子的位置

7. 哈夫曼编码译码器 java

建议: 用类似的方法,可以将某一学科的总分统计出来,并填入第48行相应的单元格中。

8. java用huffman树压缩文件时,文件夹应该如何处理

我讲一下我的思路:

用java的字节流读取一个文件,假设这个文件是100字节的。

int b;

FileInputStream in = new FileInputStream("文件路径");

while((b = in.read()) != -1){...}这样便得到100个整形(0~255)的数。

然后按照huffman的思想是统计每个数在这100个出现的概率,然后将最小的两个概率合起来作为两个叶子结点......一直做下去,直至生成一棵数。

9. 用java实现哈夫曼编码

只要自己再加个类Tree就可以了。
代码如下:

public class Tree {
double lChild, rChild, parent;
public Tree (double lChild, double rChild, double parent) {
this.lChild = lChild;
this.rChild = rChild;
this.parent = parent;
}
public double getLchild() {
return lChild;
}
public void setLchild(double lChild) {
this.lChild = lChild;
}
public double getRchild() {
return rChild;
}
public void setRchild(double rChild) {
this.rChild = rChild;
}
public double getParents() {
return parent;
}
public void setParents(double root) {
this.parent = root;
}

}

10. 求助:用java实现哈夫曼编码压缩与解压缩算法。

你好,由于内容比较多,先概述一下先。如图所示,为我写的一个压缩软件,原理是利用哈弗曼算法实现的。我将资料整理好稍后就发到你邮箱,但在这里简要说明一下代码。

请看我的空间

http://hi..com/%D2%B6%BF%C6%C1%BC/blog

中的文章共5篇(太长了)

http://hi..com/%D2%B6%BF%C6%C1%BC/blog/item/93c35517bb528146f2de32fd.html

1.HuffmanTextEncoder类完成压缩功能,可直接运行,压缩测试用文本文件。

2.HuffmanTextDecoder类完成解压缩功能,可直接运行,解压缩压缩后的文本文件。

3.BitReader,工具类,实现对BufferedInputStream的按位读取。

4.BitWriter,工具类,实现按位写入的功能。该类来自网络。

5.MinHeap<T>,模板工具类,实现了一个最小堆。生成Huffman树时使用。

阅读全文

与哈夫曼编码压缩java相关的资料

热点内容
战地联盟3解压密码 浏览:803
s型命令 浏览:23
php年薪5年 浏览:67
如何上网上设个人加密账户 浏览:44
linux打开ssh服务 浏览:78
微信位置可以加密吗 浏览:470
算法蛮力法 浏览:438
随机排练命令 浏览:147
python多进程并发 浏览:41
安卓软件安装如何躲避安全检测 浏览:647
奇幻潮翡翠台源码百度云盘 浏览:187
什么软件可以免费pdf转word 浏览:15
php正则表达式大全 浏览:394
androidntp时间 浏览:299
轮机长命令簿英文 浏览:148
oppo铃声设置被加密怎么处理 浏览:548
粤苗app图形验证码怎么填 浏览:899
管家婆架设云服务器 浏览:254
php的登录界面代码 浏览:997
php开发客户端 浏览:998