欢迎来到天天文库
浏览记录
ID:16511745
大小:46.50 KB
页数:4页
时间:2018-08-13
《java常用代码2-java哈弗曼编码的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、java哈弗曼编码的实现Javacode//哈弗曼编码的实现类publicclassHffmanCoding{privateintcharsAndWeight[][];//[][0]是字符,[][1]存放的是字符的权值(次数)privateinthfmcoding[][];//存放哈弗曼树privateinti=0;//循环变量privateStringhcs[];publicHffmanCoding(int[][]chars){//TODO构造方法charsAndWeight=newint[chars.lengt
2、h][2];charsAndWeight=chars;hfmcoding=newint[2*chars.length-1][4];//为哈弗曼树分配空间}//哈弗曼树的实现publicvoidcoding(){intn=charsAndWeight.length;if(n==0)return;intm=2*n-1;//初始化哈弗曼树for(i=0;i3、的根节点hfmcoding[i][2]=0;//初始化哈弗曼树的左孩子hfmcoding[i][3]=0;//初始化哈弗曼树的右孩子}for(i=n;i4、找双亲为零的weight最小的节点hfmcoding[s1[0]][1]=i;//为哈弗曼树最小值付双亲hfmcoding[s1[1]][1]=i;hfmcoding[i][2]=s1[0];//新节点的左孩子hfmcoding[i][3]=s1[1];//新节点的右孩子hfmcoding[i][0]=hfmcoding[s1[0]][0]+hfmcoding[s1[1]][0];//新节点的权值是左右孩子的权值之和}}//查找双亲为零的weight最小的节点privateint[]select(intw){//T5、ODOAuto-generatedmethodstubints[]={-1,-1},j=0;//s1最小权值且双亲为零的节点的序号,i是循环变量intmin1=32767,min2=32767;for(j=0;j6、min2){min2=hfmcoding[j][0];s[1]=j;}}}returns;}publicString[]CreateHCode(){//根据哈夫曼树求哈夫曼编码intn=charsAndWeight.length;inti,f,c;StringhcodeString="";hcs=newString[n];for(i=0;i7、根结点if(hfmcoding[f][2]==c){//处理左孩子结点hcodeString+="0";}else{hcodeString+="1";}c=f;f=hfmcoding[f][1];}hcs[i]=newString(newStringBuffer(hcodeString).reverse());}returnhcs;}publicStringshow(Strings){//对字符串显示编码StringtextString="";charc[];intk=-1;c=newchar[s.length()8、];c=s.toCharArray();//将字符串转化为字符数组for(inti=0;i
3、的根节点hfmcoding[i][2]=0;//初始化哈弗曼树的左孩子hfmcoding[i][3]=0;//初始化哈弗曼树的右孩子}for(i=n;i4、找双亲为零的weight最小的节点hfmcoding[s1[0]][1]=i;//为哈弗曼树最小值付双亲hfmcoding[s1[1]][1]=i;hfmcoding[i][2]=s1[0];//新节点的左孩子hfmcoding[i][3]=s1[1];//新节点的右孩子hfmcoding[i][0]=hfmcoding[s1[0]][0]+hfmcoding[s1[1]][0];//新节点的权值是左右孩子的权值之和}}//查找双亲为零的weight最小的节点privateint[]select(intw){//T5、ODOAuto-generatedmethodstubints[]={-1,-1},j=0;//s1最小权值且双亲为零的节点的序号,i是循环变量intmin1=32767,min2=32767;for(j=0;j6、min2){min2=hfmcoding[j][0];s[1]=j;}}}returns;}publicString[]CreateHCode(){//根据哈夫曼树求哈夫曼编码intn=charsAndWeight.length;inti,f,c;StringhcodeString="";hcs=newString[n];for(i=0;i7、根结点if(hfmcoding[f][2]==c){//处理左孩子结点hcodeString+="0";}else{hcodeString+="1";}c=f;f=hfmcoding[f][1];}hcs[i]=newString(newStringBuffer(hcodeString).reverse());}returnhcs;}publicStringshow(Strings){//对字符串显示编码StringtextString="";charc[];intk=-1;c=newchar[s.length()8、];c=s.toCharArray();//将字符串转化为字符数组for(inti=0;i
4、找双亲为零的weight最小的节点hfmcoding[s1[0]][1]=i;//为哈弗曼树最小值付双亲hfmcoding[s1[1]][1]=i;hfmcoding[i][2]=s1[0];//新节点的左孩子hfmcoding[i][3]=s1[1];//新节点的右孩子hfmcoding[i][0]=hfmcoding[s1[0]][0]+hfmcoding[s1[1]][0];//新节点的权值是左右孩子的权值之和}}//查找双亲为零的weight最小的节点privateint[]select(intw){//T
5、ODOAuto-generatedmethodstubints[]={-1,-1},j=0;//s1最小权值且双亲为零的节点的序号,i是循环变量intmin1=32767,min2=32767;for(j=0;j6、min2){min2=hfmcoding[j][0];s[1]=j;}}}returns;}publicString[]CreateHCode(){//根据哈夫曼树求哈夫曼编码intn=charsAndWeight.length;inti,f,c;StringhcodeString="";hcs=newString[n];for(i=0;i7、根结点if(hfmcoding[f][2]==c){//处理左孩子结点hcodeString+="0";}else{hcodeString+="1";}c=f;f=hfmcoding[f][1];}hcs[i]=newString(newStringBuffer(hcodeString).reverse());}returnhcs;}publicStringshow(Strings){//对字符串显示编码StringtextString="";charc[];intk=-1;c=newchar[s.length()8、];c=s.toCharArray();//将字符串转化为字符数组for(inti=0;i
6、min2){min2=hfmcoding[j][0];s[1]=j;}}}returns;}publicString[]CreateHCode(){//根据哈夫曼树求哈夫曼编码intn=charsAndWeight.length;inti,f,c;StringhcodeString="";hcs=newString[n];for(i=0;i7、根结点if(hfmcoding[f][2]==c){//处理左孩子结点hcodeString+="0";}else{hcodeString+="1";}c=f;f=hfmcoding[f][1];}hcs[i]=newString(newStringBuffer(hcodeString).reverse());}returnhcs;}publicStringshow(Strings){//对字符串显示编码StringtextString="";charc[];intk=-1;c=newchar[s.length()8、];c=s.toCharArray();//将字符串转化为字符数组for(inti=0;i
7、根结点if(hfmcoding[f][2]==c){//处理左孩子结点hcodeString+="0";}else{hcodeString+="1";}c=f;f=hfmcoding[f][1];}hcs[i]=newString(newStringBuffer(hcodeString).reverse());}returnhcs;}publicStringshow(Strings){//对字符串显示编码StringtextString="";charc[];intk=-1;c=newchar[s.length()
8、];c=s.toCharArray();//将字符串转化为字符数组for(inti=0;i
此文档下载收益归作者所有