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

📄 huff.java

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

package datacompress;
import java.io.*;
import java.util.*;
/**
 *
 * @author Han
 */
public class Huff {
    
    /** Creates a new instance of Huff */
    private int num;
    private int numNode;
    public    int value[][]=new int[2][num];
    public    int valueNode[][]=new int[2][num];
    
    

    
    
        public void Huff()throws IOException {
        System.out.print("程序正huff运行!");
        String s;
        int n,i;
        InputStreamReader ir;
        BufferedReader in;
        ir=new InputStreamReader(System.in);
        in=new BufferedReader(ir);
        System.out.print("input the numbers of data:");
        s=in.readLine();
        n=Integer.parseInt(s);
        System.out.print("input"+s+"numbers");

        for(i=0;i<n-1;i++){
            s=in.readLine();
            value[0][i]=i;
            value[1][i]=Integer.parseInt(s);
            valueNode[0][i]=i;
            valueNode[1][i]=Integer.parseInt(s);
            }
         }
    void class1(){
    int i,j,k,m,n;
    n=num;
    for(i=0;i<n-2;i++){
        k=i;
        for(j=i+1;j<n-1;j++)
            if(valueNode[1][k]>valueNode[1][j])
                k=j;
                if(i!=k){
                  m=valueNode[1][i];
                    valueNode[1][j]=valueNode[1][k];
                    valueNode[1][k]=m;
                    m=valueNode[0][i];
                    valueNode[0][i]=valueNode[0][k];
                    valueNode[0][k]=m;
             
                }
        
        }
    }
    void class2(int m,int n){
    int i,j,sum;
    int arr[][]=new int[2][num];            //?
    sum=arr[1][0]+arr[1][1];
    int number=n-1;
    boolean ff=true;
    for(i=2;i<number;i++){
        if(valueNode[1][i]<sum){
            valueNode[1][i-2]=valueNode[1][i];
            valueNode[0][i-2]=valueNode[0][i];
            }
        else{
                if(ff){
                    valueNode[1][i-2]=sum;
                    valueNode[0][i-2]=number-1;
                    valueNode[1][i-1]=valueNode[1][i];
                    valueNode[0][i-1]=valueNode[0][i];
                    ff=false;
                    }
                else{
                    valueNode[1][i-1]=valueNode[1][i];
                    valueNode[0][i-1]=valueNode[0][1];
                    }
            }
        if(ff){
            valueNode[1][num-1]=sum;
            valueNode[0][num-1]=number-1;
            }
        }
    }
    void huffbm(){
    int huffVal[][]=new int[numNode][4];
    int i,j,k,m,num1,num2,val,par;
    int mm=num;
    Huff huff=new Huff();
        for(i=0;i<numNode;i++){
        if(i<num)
        {huffVal[i][0]=value[1][i];}
        else
        huffVal[i][0]=0;
        huffVal[i][1]=0;
        huffVal[i][2]=0;
        huffVal[i][3]=0;
        }
        for(i=mm+1;i<=num;i++){         //?
        num1=valueNode[0][0];
        num2=valueNode[0][1];
        val=valueNode[1][0]+valueNode[1][1];
        huff.class2(i,mm--);
        par=i;
        huffVal[num1][3]=par;
        huffVal[num2][3]=par;
        huffVal[par][0]=val;
        huffVal[par][3]=0;
        huffVal[par][1]=num1;
        huffVal[par][2]=num2;
        }
    StringBuffer bm;
        for(i=0;i<num;i++){
        j=1;
        bm=new StringBuffer(" ");
            par=huffVal[j][4];
            while(par!=0){
            if(huffVal[par][2]==j)
            bm.insert(0,'0');
            else
            bm.insert(0,'1');
            j=par;
            par=huffVal[par][4];
            }
        System.out.println(bm.toString());
        }
    }
    public static void main(String args[])throws IOException{
    Huff huff=new Huff();
    System.out.print("程序正运行!");
    huff.class1();
    System.out.print("程序正运行!");
    huff.huffbm();
    System.out.print("程序正运行!");
    } 
}

⌨️ 快捷键说明

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