⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffmancoding.java

📁 实现哈夫曼树
💻 JAVA
字号:
/*
 * NewClass.java
 *
 * Created on 2007年7月5日, 下午5:57
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package datacompress;

/**
 *
 * @author Han
 */
import java.io.*;
import java.util.*;
class HuffmanCoding{
  int num=0;
  int value[][]=new int[num][2];
  int numNode;
  int huffVal[][]=new int[numNode][5];
  public void stat()throws Exception{
  	 String s; 
     int A[]=new int[127];      
     FileInputStream fis=new FileInputStream("a.txt");
     InputStreamReader isr=new InputStreamReader(fis);
     BufferedReader br=new BufferedReader(isr);
     while((s=br.readLine())!=null)
        for(int i=0;i<s.length();i++){
         char a=s.charAt(i);
         int j=(int)a;
          A[j]++;
        }
     br.close();
     isr.close();
     fis.close();
   
    for(int i=0;i<127;i++){
       	if(A[i]!=0) num++;
       }  
    
    int value[][]=new int[num][2];
    int p=0;
    for(int n=0;n<127;n++){      
     if(A[n]!=0){
       value[p][0]=A[n];
       value[p][1]=n; 
       p++;
     }
    }
    for(int i=0;i<=num-2;i++){
     int k=i;
     for(int j=i+1;j<=num-1;j++){
       if(value[j][0]<value[k][0]){
       	k=j;
       }	
     }
     int m;
     m=value[i][0];value[i][0]=value[k][0];value[k][0]=m;
     m=value[i][1];value[i][1]=value[k][1];value[k][1]=m;
    } 
     for(int i=0;i<num;i++){
       for(int j=0;j<2;j++){
       System.out.print(value[i][j]);
       System.out.print("    ");
       }
       System.out.println();
       }  
  }	 	 //
   void creatree()throws Exception{             //
	int i,j,k;
	numNode=num*2-1;
	int huffVal[][]=new int[numNode][5];
	for(i=0;i<numNode;i++){
	 if(i<num){
	 huffVal[i][0]=value[i][0];
	 huffVal[i][1]=value[i][1];	
     }	 
     else{
     	huffVal[i][0]=0;   //huffVal[i][0]is the weight
        huffVal[i][1]=0;   //huffVal[i][1]is the ASCII
        huffVal[i][2]=0;   //huffVal[i][2]is the lchild index
        huffVal[i][3]=0;   //huffVal[i][3]is the rchild index
        huffVal[i][4]=0;   //huffVal[i][4]is the parent index
     }
    }   
 	for(i=num;i<numNode;i++){
 		int small1=10000;int small2=10000;
        int num1=0;int num2=0;
 		for(j=0;j<i;j++){
 			if(huffVal[j][4]==0)
 			 if(huffVal[j][0]<small1){
 				 small2=small1;
 				 num2=num1;
 				 small1=huffVal[j][0];
 				 num1=j;
 				}
 				else
 				if(huffVal[j][0]<small2){
 					small2=huffVal[j][0];
 					num2=j;
 					}
 			}
 		huffVal[i][0]=small1+small2;
 		huffVal[i][2]=num1;
 		huffVal[i][3]=num2;
 		huffVal[num1][4]=i;
 		huffVal[num2][4]=i;
    }
     for(i=0;i<numNode;i++){
       System.out.print(huffVal[i][0]+"   ");
       System.out.print(huffVal[i][1]+"   ");
       System.out.print(huffVal[i][2]+"   ");
       System.out.print(huffVal[i][3]+"   ");
       System.out.print(huffVal[i][4]+"   ");
       System.out.print("    ");
       System.out.println();
       }  			
    }
}
class Test{
   public static void main(String args[]) throws Exception{
   	HuffmanCoding h=new HuffmanCoding();
   	h.stat();
   	h.creatree();           //
   	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -