Zarysowanie kompresji LZ77

Buduję kompresję LZ77. Przeczytałem cały plik jako pojedynczy ciąg i próbowałem go skompresować. Czy jest jakiś inny sposób na to? Załączę poniższy kod, aby powiedzieć, czy są jakieś zmiany, które mają być wprowadzone, aby program kompresował bardzo szybko, nawet jeśli odczytuje duży plik.

importowanie pliku

Przypisanie klasy:

def pattern(self, data):
    self.skip = []
    self.m = len(data)
    for k in range(256): self.skip.append(self.m)
    for k in range(self.m - 1): self.skip[ord(data[k])] = self.m - k - 1
    self.skip = tuple(self.skip)
    self.data = data

def find(self, text):
    n = len(text)
    if self.m > n: return -1
    k = self.m - 1
    while k < n:
        j = self.m - 1; i = k
        while j >= 0 and text[i] == self.data[j]:
            j -= 1; i -= 1
        if j == -1: return i + 1
        k += self.skip[ord(text[k])]
    return -1

klasa LZ77:

def __init__(self, data):
    self.position = 0
    self.window = ""
    self.stream = data
    self.streamSize = len(self.stream)
    self.search = Assign()
def Encode(self):
    p = 0
    c = ''
    lastresult = 0
    found = 0
    for i in range(self.streamSize):
        self.search.pattern(self.stream[self.position:self.position+i+1])
        result = self.search.find(self.window)
        if result < 0: break
        lastresult = result
        found = 1
    c = self.stream[self.position+i]
    p = lastresult
    B = 0
    if i > 0: B = self.position - p
    L = i
    if self.streamSize > 0:
        self.position += i + 1
        self.streamSize -= i + 1
        self.window = self.stream[:self.position]
    #print B,L,c
    return ((B, L), c)



def Encoder(self):
    output = ""
    length = self.streamSize
    while self.streamSize > 0:
        ((B, L), C) = self.Encode()
        output += str(B) +   str(L) +  C
    return (output)

def aiyoo (nazwa pliku):

enter = raw_input("enter the filename to which the original file is to e compressed to")
enter1 = enter
fob1 = open(enter,'wb')
print filename
fob = open(filename,'rb')
original = ''
for i in fob: 
    original += i
lz = LZ77(original)
stream = lz.Encoder()
fob1.write(stream)
fob.close()
fob1.close()

Z góry dziękuję

questionAnswers(0)

yourAnswerToTheQuestion