问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-05-30 17:43

我来回答

2个回答

热心网友 时间:2023-10-23 20:48

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循环条件 可以运行了

热心网友 时间:2023-10-23 20:49

package Huffman;
class HuffmanNode{
int weight; //权
int parent,left,right; //父母结点,左右孩子下标

public HuffmanNode(int weight){
this.weight=weight;
this.parent=this.left=this.right=-1;
}
}
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(hnodes[j].weight<min1 && hnodes[j].parent==-1){
min2=min1;
x2=x1;
min1=hnodes[j].weight;
x1=j;
}
else if(hnodes[j].weight<min2 && hnodes[j].parent==-1){
min2=hnodes[j].weight;
x2=j;
}
}
hnodes[x1].parent=n+i; //将找出的两课权值最小的二叉树合并
hnodes[x2].parent=n+i;
this.hnodes[n+i]=new HuffmanNode(0);
hnodes[n+i].weight=hnodes[x1].weight+hnodes[x2].weight;
hnodes[n+i].left=x1;
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]);
}
}
运行后
Exception in thread "main" java.lang.NullPointerException
at ht.binary.main(binary.java:90)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
一部名叫皇后游戏的关于国际象棋的电影 ...记得我很小时候(大概11年前左右的),在电视上看到的。 有大神知道这电影叫什么名字吗? 求一部九几年国产电影 申请公租房条件和要求 TSCA五项有害物质检测如何办理?哪些产品需要办理TSCA呢? tsca五项有害物质检测 总lge阴性是什么意思? 电解质水是什么水 电解质饮料的作用与危害 我的金鱼便便是绿色的...没有吃什么青苔...还有掉鳞片...每一条掉... 用驱动精灵还原自带显卡驱动程序(已备份)还用先卸载现驱动程序吗 还是直接还原 我用驱动精灵更新了显卡,怎么恢复原来的,我没有备份,求跪了,不然我爸爸回来我挨骂了 谁能告诉我怎么把显卡用驱动精灵或驱动人生从8.970.100.3000还原到8.741.0.0 请问下用驱动精灵备份的显卡驱动怎么还原? 高中数学正余弦定理问题 高中数学正余弦定理。 高中数学正余弦 天天象棋181关怎么过 春秋五霸第180关动态图 麻烦大师给我看看啊 谢谢了啊 女的 ·请大师们给我看看啊 随笔诗啊~~~谁有的?给我看看啊!!! 大家介绍一些获过奖的武侠小说给我看看啊?比如《昆仑》。 谁介绍几部好看的日剧给我看看啊 谁有I LOVE RUCK&ROLL的歌词,给我看看啊 谁能介绍点日本动漫电影给我看看啊 谁介绍几部恐怖片,给我看看啊? 你给我看看啊 谁介绍一些经典电影给我看看啊 大家介绍几部电影给我看看啊 有什么好看的电影啊`?推荐几部给我看看啊`? 怎么用驱动精灵还原更新过的显卡驱动啊?, 数据结构程序作业 Huffman编码 是java版的哈 求帮忙呀 ~&gt;.&lt;~ java哈弗曼编码,运行结果不对,求解。 用户输入任意的字符串,系统自动给出每个字符的哈夫曼编码和对应的哈夫曼树(java) 构造哈夫曼树和哈夫曼编码,用java解答。 用Huffman编码压缩文件的思路,以及应该怎么做? 高分!索爱T707的问题. java 写的哈夫曼编译器 LED贴片模组的质量好坏 50分,求用Java实现哈夫曼编码 Java提示找不到符号 食人鱼模组是什么 已知字符集{a,b,c,d}的权值集合为{7,5,1,2},构造哈夫曼树,并求出字符集的哈夫 形容惋惜的成语 OPPO R11发布盛典报名了吗 形容人很惋惜的成语 表示岁月惋惜的成语 替人惋惜的成语 如何提高一个城市的宜居性 表伤心惋惜的成语