Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- class LZWBinFa{
- public LZWBinFa(){
- fa=gyoker;
- }
- public void betesz(char b){
- if(b=='0'){
- if(fa.nullasGyermek() == null){
- Csomopont uj = new Csomopont('0');
- fa.ujNullasGyermek(uj);
- fa=gyoker;
- }
- else{
- fa = fa.nullasGyermek();
- }
- }
- else{
- if(fa.egyesGyermek() == null){
- Csomopont uj = new Csomopont('1');
- fa.ujEgyesGyermek(uj);
- fa=gyoker;
- }
- else{
- fa = fa.egyesGyermek();
- }
- }
- }
- public void kiir(Writer kiFile) throws IOException{
- melyseg = 0;
- kiir(gyoker, kiFile);
- }
- public int getMelyseg(){
- melyseg = maxMelyseg = 0;
- rmelyseg(gyoker);
- return maxMelyseg -1;
- }
- public double getAtlag(){
- melyseg = atlagosszeg = atlagdb = 0;
- ratlag(gyoker);
- atlag = ((double) atlagosszeg) / atlagdb;
- return atlag;
- }
- public double getSzoras(){
- atlag = getAtlag();
- szorasosszeg = 0.0;
- melyseg = atlagdb = 0;
- rszoras(gyoker);
- if(atlagdb -1 > 0)
- szoras = Math.sqrt(szorasosszeg/(atlagdb-1));
- else
- szoras = Math.sqrt(szorasosszeg);
- return szoras;
- }
- private class Csomopont{
- public Csomopont(char b){
- betu = b;
- balNulla = jobbEgy = null;
- }
- public Csomopont nullasGyermek(){
- return balNulla;
- }
- public Csomopont egyesGyermek(){
- return jobbEgy;
- }
- public void ujNullasGyermek(Csomopont gy){
- balNulla = gy;
- }
- public void ujEgyesGyermek(Csomopont gy){
- jobbEgy = gy;
- }
- public char getBetu(){
- return betu;
- }
- private char betu;
- private Csomopont balNulla;
- private Csomopont jobbEgy;
- }
- private Csomopont fa;
- private int melyseg, atlagosszeg, atlagdb;
- private double szorasosszeg;
- private void kiir(Csomopont elem, Writer kiFile) throws IOException{
- if(elem != null){
- melyseg++;
- kiir(elem.egyesGyermek(), kiFile);
- for(int i=0; i<melyseg; i++){
- kiFile.write("---");
- }
- kiFile.write(elem.getBetu() + "(" + (melyseg-1) + ")\n");
- kiir(elem.nullasGyermek(), kiFile);
- melyseg--;
- }
- }
- protected Csomopont gyoker = new Csomopont('/');
- protected int maxMelyseg;
- protected double atlag, szoras;
- protected void rmelyseg(Csomopont elem){
- if(elem != null){
- melyseg++;
- if(melyseg > maxMelyseg)
- maxMelyseg = melyseg;
- rmelyseg(elem.egyesGyermek());
- rmelyseg(elem.nullasGyermek());
- melyseg--;
- }
- }
- protected void ratlag(Csomopont elem){
- if(elem != null){
- melyseg++;
- ratlag(elem.egyesGyermek());
- ratlag(elem.nullasGyermek());
- melyseg--;
- if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
- atlagdb++;
- atlagosszeg+=melyseg;
- }
- }
- }
- protected void rszoras(Csomopont elem){
- if(elem != null){
- melyseg++;
- rszoras(elem.egyesGyermek());
- rszoras(elem.nullasGyermek());
- melyseg--;
- if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
- atlagdb++;
- szorasosszeg+= ((melyseg-atlag)*(melyseg-atlag));
- }
- }
- }
- }
- class LZWException extends Exception{
- public LZWException(){
- System.out.println("Usage: lzwtree in_file -o out_file");
- }
- }
- public class LZW{
- static void checkArgs(String[] args) throws LZWException{
- if(args.length != 3){
- throw new LZWException();
- }
- if(!("-o".equals(args[1]))){
- throw new LZWException();
- }
- }
- public static void main(String[] args) throws FileNotFoundException, IOException{
- try{
- checkArgs(args);
- } catch(LZWException lzwex){
- System.exit(0);
- }
- InputStream beFile;
- Writer kiFile = new FileWriter(args[2]);
- try{
- beFile=new FileInputStream(args[0]);
- } catch(FileNotFoundException ex){
- System.out.println("File not found!");
- System.exit(0);
- }
- beFile = new FileInputStream(args[0]);
- char b;
- LZWBinFa binFa = new LZWBinFa();
- while(beFile.available()>0){
- b=(char)beFile.read();
- if(b == 0x0a)
- break;
- }
- boolean kommentben = false;
- while(beFile.available()>0){
- b=(char)beFile.read();
- if(b == 0x3e){
- kommentben = true;
- continue;
- }
- if(b == 0x0a){
- kommentben = false;
- continue;
- }
- if(kommentben)
- continue;
- if(b == 0x4e)
- continue;
- for(int i=0; i<8; i++){
- if((b & 0x80)!=0){
- binFa.betesz('1');
- }
- else
- binFa.betesz('0');
- b<<=1;
- }
- }
- binFa.kiir(kiFile);
- kiFile.write("depth = " + binFa.getMelyseg() + '\n');
- kiFile.write("mean = " + binFa.getAtlag() + '\n');
- kiFile.write("var = " + binFa.getSzoras() + '\n');
- beFile.close();
- kiFile.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement