Advertisement
Norbi930523

LZW.java

Sep 17th, 2013
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.55 KB | None | 0 0
  1. import java.io.*;
  2.  
  3. class LZWBinFa{
  4.     public LZWBinFa(){
  5.         fa=gyoker;
  6.     }
  7.  
  8.     public void betesz(char b){
  9.         if(b=='0'){
  10.             if(fa.nullasGyermek() == null){
  11.                 Csomopont uj = new Csomopont('0');
  12.                 fa.ujNullasGyermek(uj);
  13.                 fa=gyoker;
  14.             }
  15.             else{
  16.                 fa = fa.nullasGyermek();
  17.             }
  18.         }
  19.         else{
  20.             if(fa.egyesGyermek() == null){
  21.                 Csomopont uj = new Csomopont('1');
  22.                 fa.ujEgyesGyermek(uj);
  23.                 fa=gyoker;
  24.             }
  25.             else{
  26.                 fa = fa.egyesGyermek();
  27.             }
  28.         }
  29.     }
  30.  
  31.     public void kiir(Writer kiFile) throws IOException{
  32.         melyseg = 0;
  33.         kiir(gyoker, kiFile);
  34.     }
  35.  
  36.     public int getMelyseg(){
  37.         melyseg = maxMelyseg = 0;
  38.         rmelyseg(gyoker);
  39.         return maxMelyseg -1;
  40.     }
  41.  
  42.     public double getAtlag(){
  43.         melyseg = atlagosszeg = atlagdb = 0;
  44.         ratlag(gyoker);
  45.         atlag = ((double) atlagosszeg) / atlagdb;
  46.         return atlag;
  47.     }
  48.  
  49.     public double getSzoras(){
  50.         atlag = getAtlag();
  51.         szorasosszeg = 0.0;
  52.         melyseg = atlagdb = 0;
  53.  
  54.         rszoras(gyoker);
  55.  
  56.         if(atlagdb -1 > 0)
  57.             szoras = Math.sqrt(szorasosszeg/(atlagdb-1));
  58.         else
  59.             szoras = Math.sqrt(szorasosszeg);
  60.  
  61.         return szoras;
  62.     }
  63.  
  64.     private class Csomopont{
  65.         public Csomopont(char b){
  66.             betu = b;
  67.             balNulla = jobbEgy = null;
  68.         }
  69.  
  70.         public Csomopont nullasGyermek(){
  71.             return balNulla;
  72.         }
  73.  
  74.         public Csomopont egyesGyermek(){
  75.             return jobbEgy;
  76.         }
  77.  
  78.         public void ujNullasGyermek(Csomopont gy){
  79.             balNulla = gy;
  80.         }
  81.  
  82.         public void ujEgyesGyermek(Csomopont gy){
  83.             jobbEgy = gy;
  84.         }
  85.  
  86.         public char getBetu(){
  87.             return betu;
  88.         }
  89.  
  90.         private char betu;
  91.         private Csomopont balNulla;
  92.         private Csomopont jobbEgy;
  93.     }
  94.  
  95.     private Csomopont fa;
  96.     private int melyseg, atlagosszeg, atlagdb;
  97.     private double szorasosszeg;
  98.    
  99.     private void kiir(Csomopont elem, Writer kiFile) throws IOException{
  100.         if(elem != null){
  101.             melyseg++;
  102.             kiir(elem.egyesGyermek(), kiFile);
  103.             for(int i=0; i<melyseg; i++){
  104.                 kiFile.write("---");
  105.             }
  106.             kiFile.write(elem.getBetu() + "(" + (melyseg-1) + ")\n");
  107.             kiir(elem.nullasGyermek(), kiFile);
  108.             melyseg--;
  109.         }
  110.     }
  111.  
  112.     protected Csomopont gyoker = new Csomopont('/');
  113.     protected int maxMelyseg;
  114.     protected double atlag, szoras;
  115.  
  116.     protected void rmelyseg(Csomopont elem){
  117.         if(elem != null){
  118.             melyseg++;
  119.             if(melyseg > maxMelyseg)
  120.                 maxMelyseg = melyseg;
  121.             rmelyseg(elem.egyesGyermek());
  122.             rmelyseg(elem.nullasGyermek());
  123.             melyseg--;
  124.         }
  125.     }
  126.    
  127.     protected void ratlag(Csomopont elem){
  128.         if(elem != null){
  129.             melyseg++;
  130.             ratlag(elem.egyesGyermek());
  131.             ratlag(elem.nullasGyermek());
  132.             melyseg--;
  133.             if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
  134.                 atlagdb++;
  135.                 atlagosszeg+=melyseg;
  136.             }
  137.         }      
  138.     }
  139.  
  140.     protected void rszoras(Csomopont elem){
  141.         if(elem != null){
  142.             melyseg++;
  143.             rszoras(elem.egyesGyermek());
  144.             rszoras(elem.nullasGyermek());
  145.             melyseg--;
  146.             if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
  147.                 atlagdb++;
  148.                 szorasosszeg+= ((melyseg-atlag)*(melyseg-atlag));
  149.             }
  150.         }
  151.     }
  152. }
  153.  
  154. class LZWException extends Exception{
  155.     public LZWException(){
  156.         System.out.println("Usage: lzwtree in_file -o out_file");
  157.     }
  158. }
  159.  
  160. public class LZW{
  161.     static void checkArgs(String[] args) throws LZWException{
  162.         if(args.length != 3){
  163.             throw new LZWException();
  164.         }
  165.         if(!("-o".equals(args[1]))){
  166.             throw new LZWException();
  167.         }
  168.     }
  169.    
  170.     public static void main(String[] args) throws FileNotFoundException, IOException{
  171.         try{
  172.             checkArgs(args);
  173.         } catch(LZWException lzwex){
  174.             System.exit(0);
  175.         }
  176.  
  177.         InputStream beFile;
  178.         Writer kiFile = new FileWriter(args[2]);
  179.  
  180.         try{
  181.             beFile=new FileInputStream(args[0]);
  182.         } catch(FileNotFoundException ex){
  183.             System.out.println("File not found!");
  184.             System.exit(0);
  185.         }
  186.  
  187.         beFile = new FileInputStream(args[0]);
  188.  
  189.         char b;
  190.         LZWBinFa binFa = new LZWBinFa();
  191.  
  192.         while(beFile.available()>0){
  193.             b=(char)beFile.read();
  194.             if(b == 0x0a)
  195.                 break;
  196.         }
  197.  
  198.         boolean kommentben = false;
  199.  
  200.         while(beFile.available()>0){
  201.             b=(char)beFile.read();
  202.             if(b == 0x3e){
  203.                 kommentben = true;
  204.                 continue;
  205.             }
  206.  
  207.             if(b == 0x0a){
  208.                 kommentben = false;
  209.                 continue;
  210.             }
  211.  
  212.             if(kommentben)
  213.                 continue;
  214.  
  215.             if(b == 0x4e)
  216.                 continue;
  217.  
  218.             for(int i=0; i<8; i++){
  219.                 if((b & 0x80)!=0){
  220.                     binFa.betesz('1');
  221.                 }
  222.                 else
  223.                     binFa.betesz('0');
  224.                 b<<=1;
  225.             }
  226.         }
  227.  
  228.         binFa.kiir(kiFile);
  229.  
  230.         kiFile.write("depth = " + binFa.getMelyseg() + '\n');
  231.         kiFile.write("mean = " + binFa.getAtlag() + '\n');
  232.         kiFile.write("var = " + binFa.getSzoras() + '\n');
  233.  
  234.         beFile.close();
  235.         kiFile.close();
  236.     }
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement