Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import sys
- import math
- import time
- import os
- class LZWBinFa():
- def __init__(self):
- self.fa = self.gyoker;
- def betesz(self, b):
- if b == '0':
- if self.fa.nullasGyermek() == None:
- uj = self.Csomopont('0');
- self.fa.ujNullasGyermek(uj);
- self.fa = self.gyoker;
- else:
- self.fa = self.fa.nullasGyermek();
- else:
- if self.fa.egyesGyermek() == None:
- uj = self.Csomopont('1');
- self.fa.ujEgyesGyermek(uj);
- self.fa = self.gyoker;
- else:
- self.fa = self.fa.egyesGyermek();
- class Csomopont(object):
- def __init__(self, b):
- self.betu = b;
- self.balNulla = self.jobbEgy = None;
- def nullasGyermek(self):
- return self.balNulla;
- def egyesGyermek(self):
- return self.jobbEgy;
- def ujNullasGyermek(self, gy):
- self.balNulla = gy;
- def ujEgyesGyermek(self, gy):
- self.jobbEgy = gy;
- def getBetu(self):
- return self.betu;
- betu = "";
- balNulla = None;
- jobbEgy = None;
- def out(self, kiFile):
- self.melyseg = 0;
- self.kiir(self.gyoker, kiFile);
- def getMelyseg(self):
- self.melyseg = self.maxMelyseg = 0;
- self.rmelyseg(self.gyoker);
- return self.maxMelyseg - 1;
- def getAtlag(self):
- self.melyseg = self.atlagosszeg = self.atlagdb = 0;
- self.ratlag(self.gyoker);
- self.atlag = self.atlagosszeg / self.atlagdb;
- return self.atlag;
- def getSzoras(self):
- self.atlag = self.getAtlag();
- self.szorasosszeg = 0.0;
- self.melyseg = self.atlagdb = 0;
- self.rszoras(self.gyoker);
- if (self.atlagdb - 1) > 0:
- self.szoras = math.sqrt(self.szorasosszeg/(self.atlagdb-1));
- else:
- self.szoras = math.sqrt(self.szorasosszeg);
- return self.szoras;
- fa = None;
- melyseg = 0;
- atlagosszeg = 0;
- atlagdb = 0;
- szorasosszeg = 0;
- def kiir(self, elem, kiFile):
- if elem != None:
- self.melyseg+=1;
- self.kiir(elem.egyesGyermek(), kiFile);
- for i in range(0, self.melyseg):
- kiFile.write("---");
- kiFile.write(elem.getBetu() + "(" + str(self.melyseg-1) + ")\n");
- self.kiir(elem.nullasGyermek(), kiFile);
- self.melyseg-=1;
- gyoker = Csomopont('/');
- maxMelyseg = 0;
- atlag = 0;
- szoras = 0;
- def rmelyseg(self, elem):
- if elem != None:
- self.melyseg+=1;
- if self.melyseg > self.maxMelyseg:
- self.maxMelyseg = self.melyseg;
- self.rmelyseg(elem.egyesGyermek());
- self.rmelyseg(elem.nullasGyermek());
- self.melyseg-=1;
- def ratlag(self, elem):
- if elem != None:
- self.melyseg+=1;
- self.ratlag(elem.egyesGyermek());
- self.ratlag(elem.nullasGyermek());
- self.melyseg-=1;
- if (elem.egyesGyermek() == None) and (elem.nullasGyermek() == None):
- self.atlagdb+=1;
- self.atlagosszeg+=self.melyseg;
- def rszoras(self, elem):
- if elem != None:
- self.melyseg+=1;
- self.rszoras(elem.egyesGyermek());
- self.rszoras(elem.nullasGyermek());
- self.melyseg-=1;
- if (elem.egyesGyermek() == None) and (elem.nullasGyermek() == None):
- self.atlagdb+=1;
- self.szorasosszeg+= ((self.melyseg-self.atlag)*(self.melyseg-self.atlag));
- def checkArgs(argv):
- if len(argv) != 4:
- print("usage: lzwtree in_file -o out_file");
- sys.exit(-1);
- if argv[2] != "-o":
- print("usage: lzwtree in_file -o out_file");
- sys.exit(-2);
- checkArgs(sys.argv);
- try:
- beFile = open(sys.argv[1],"r");
- except:
- print("Input file not found!");
- sys.exit(-3);
- try:
- kiFile = open(sys.argv[3], "w");
- except:
- print("Could not open output file!");
- sys.exit(-4);
- b = "";
- binFa = LZWBinFa();
- counter = os.fstat(beFile.fileno()).st_size;
- delta = time.time();
- while True:
- b = beFile.read(1);
- counter-=1;
- if b == "\n":
- break;
- kommentben = False;
- while True:
- b = beFile.read(1);
- if b == "":
- break;
- counter-=1;
- if b == ">":
- kommentben = True;
- continue;
- if b == "\n":
- kommentben = False;
- continue;
- if kommentben:
- continue;
- if b == "N":
- continue;
- b = ord(b);
- for i in range(0,8):
- if (b & 0x80) != 0:
- binFa.betesz("1");
- else:
- binFa.betesz("0");
- b<<=1;
- binFa.out(kiFile);
- kiFile.write("depth = " + str(binFa.getMelyseg()) + '\n');
- kiFile.write("mean = " + str(binFa.getAtlag()) + '\n');
- kiFile.write("var = " + str(binFa.getSzoras()) + '\n');
- beFile.close();
- kiFile.close();
- delta = time.time() - delta;
- print(str(delta) + " secs");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement