导航:首页 > 编程语言 > java哈夫曼树实例代码

java哈夫曼树实例代码

发布时间:2021-10-25 20:22:42

java 哈夫曼树权值求和(代码找错)

兄弟,你把如下第28行的count++;注释掉,一切问题都可以解决!

自己先琢磨为什么,不懂的再问!

importjava.util.Arrays;
importjava.util.Scanner;
publicclassa2{
publicstaticintn,count=0;
publicstaticinthe[]=newint[n+1];//预定义权值数组
publicstaticvoidHuffman(int[]a){
Arrays.sort(a);//排序
//System.out.println(a.length);
if(a.length==1)//如果长度是1结束递归
{
he[count++]=a[0];
return;
}
if(a.length==2)//如果长度是2结束递归
{
he[count++]=a[0]+a[1];
return;
}
else//长度大于2
{
intb[]=newint[a.length-1];//定义一个新数组,用于保存a
he[count++]=a[0]+a[1];
b[0]=he[--count];//新数组的第一个元素为当前数组的最小的两个数之和
for(inti=1;i<b.length;i++)
{
b[i]=a[i+1];//赋值除第一个元素之外的值
}
//count++;
Huffman(b);//递归
}
}
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
n=Integer.parseInt(sc.nextLine());
Strings[]=sc.nextLine().trim().split("");//输入n个数
intd[]=newint[n];
for(inti=0;i<n;i++)
d[i]=Integer.parseInt(s[i]);//将String转化为int的数组
Huffman(d);//递归调用
intsum=0;
for(inti=0;i<he.length;i++)
sum+=he[i];//求和
System.out.println(sum);
}
}

㈡ 到底什么是哈夫曼树啊,求例子

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

例子:

1、将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

2、 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

3、从森林中删除选取的两棵树,并将新树加入森林;

4、重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

(2)java哈夫曼树实例代码扩展阅读:

按照哈夫曼编码构思程序流程:

1、切割的顺序是从上往下,直至数组中的元素全部出现在叶节点;

2、我们思路正好相反,从数组中找出最小的两个元素作为最下面的叶节点,在向备选数组中存入这两个叶节点的和(这个新的和加入累加运算,这个和也就是所求的最小值的一部分,原因如上图)。

3、以本题为例,备选数组中现有元素为{30,30},再次取出两个最小元素进行求和,得到新的元素,回归备选数组并记入累加。

4、上述2.3布重复执行直至备选数组中只有一个元素,此时累加结束,返回累加值即可

5、求数组中的最小值,可以用小根堆进行提取最为方便;此题用到了贪心的思路,即用相同的策略重复执行,直至我们得到所需的结果。

㈢ 构造以下实例的哈夫曼树 并给出你的哈夫曼字符编码

哈夫曼树构造规则
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止
根据上述得到的图是
(1)
/ \
(0.6) (0.4)
/ \ / \
(0.28) E B G
/ \
(0.11) 0.17
/ \ / \
(0.05) D A H
0/ 1\
C F
根的左边是0,右边是1,得到的哈夫曼字编码是
C: 00000 F:00001 D:0001 A:0010 H:0011 E:01 B:10 G:11

㈣ 我用java构建哈夫曼树的时候报了空指针,代码如下

错误提示 贴出来

㈤ 哈夫曼树编码的应用(Java语言)

1)编写函数实现选择parent为0且权值最小的两个根结点的算法
2)编写函数实现统计字符串中专字符的种类以及属各类字符的个数。
3)编写函数构造赫夫曼树。
4)编写函数实现由赫夫曼树求赫夫曼编码表。
5)编写函数实现将正文转换为相应的编码文件
6)编写函数实现将编码文件进行译码。
7)编写主控函数,完成本实验的功能。

㈥ Java建立哈夫曼树的问题

看了半天,结果发现你走入死循环了;你找到代码:list.add(i,parentNode);
在这个后面加入一行:break;
表示跳出'//否则进入for循环找到新节点的合适位置加入队列'这个else,重现开始查找组装下一个哈夫曼节点

㈦ 用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;
}

}

㈧ 构造哈夫曼树和哈夫曼编码,用java解答。

真懒啊你真懒啊你真懒啊你真懒啊你真懒啊你真懒啊你真懒啊你真懒啊你真懒啊你真懒啊你

㈨ java如何实现动态显示哈夫曼树意思就是显示每次两个叶子结合,最后组成了一颗树的那个过程。求大神

根据二叉树的性质:n2=n0-1,列方程组得{n2=n0-1,n0+n2=199},解方程组得n0=100,所以叶子结点有100个。

㈩ 求java代码,哈夫曼树,从文件中读取数据,生成哈夫曼树并将哈夫曼编码存入文件当中!!!急求啊!!

这个问题,不详细,数据是什么数据,权重的判断标准都不知道

阅读全文

与java哈夫曼树实例代码相关的资料

热点内容
飞猫云下载的文件在哪里看 浏览:271
qq上的赞是真的赞了吗 浏览:511
火山岛电影女演员 浏览:858
永恒在线观百度云 浏览:199
学而思编程哪个版本好 浏览:208
免费观影网站 知乎 浏览:813
美人电影韩国结局 浏览:459
kindle下载pdf文件 浏览:213
妻子交换txt 浏览:638
电脑找不到网络怎么办 浏览:136
欧美电影有中英文字幕 浏览:760
宅男在线影院 浏览:847
怎么看日本上映电影 浏览:190
朋友分享的app有哪些 浏览:770
贪婪的朋友女友演员 浏览:420
男主角与国外母亲 浏览:502
葵花宝典台湾 浏览:602
法国啄木鸟官网app 浏览:7
linux文件解锁 浏览:316
linux启动其他文件夹程序 浏览:651

友情链接