Реализация алгоритма сжатия LZ78 в python
В последнее время я занимался некоторыми компрессионными алгоритмами, но в последние пару дней у меня возникли некоторые проблемы с реализацией LZ78 в python. Я посмотрел в Интернете на некоторые примеры, но на самом деле не нашел ничего надежного, что и кодирует, и декодирует ввод. У кого-нибудь есть какие-либо ресурсы, на которые я мог бы обратить внимание, или код, который я мог бы изучить?
благодаря
- Преобразование из qcow2 в исходное с Python
- Эффективное сжатие массивов
- Как перечислить содержимое файла gzip без его извлечения в python?
- Что такое лучший Zip-модуль Python для обработки больших файлов?
One Solution collect form web for “Реализация алгоритма сжатия LZ78 в python”
Вот как сжатие, так и декомпрессия обоих:
def compress(uncompressed): """Compress a string to a list of output symbols.""" # Build the dictionary. dict_size = 256 dictionary = dict((chr(i), chr(i)) for i in xrange(dict_size)) # in Python 3: dictionary = {chr(i): chr(i) for i in range(dict_size)} w = "" result = [] for c in uncompressed: wc = w + c if wc in dictionary: w = wc else: result.append(dictionary[w]) # Add wc to the dictionary. dictionary[wc] = dict_size dict_size += 1 w = c # Output the code for w. if w: result.append(dictionary[w]) return result def decompress(compressed): """Decompress a list of output ks to a string.""" from cStringIO import StringIO # Build the dictionary. dict_size = 256 dictionary = dict((chr(i), chr(i)) for i in xrange(dict_size)) # in Python 3: dictionary = {chr(i): chr(i) for i in range(dict_size)} # use StringIO, otherwise this becomes O(N^2) # due to string concatenation in a loop result = StringIO() w = compressed.pop(0) result.write(w) for k in compressed: if k in dictionary: entry = dictionary[k] elif k == dict_size: entry = w + w[0] else: raise ValueError('Bad compressed k: %s' % k) result.write(entry) # Add w+entry[0] to the dictionary. dictionary[dict_size] = w + entry[0] dict_size += 1 w = entry return result.getvalue() # How to use: compressed = compress('TOBEORNOTTOBEORTOBEORNOT') print (compressed) decompressed = decompress(compressed) print (decompressed)
Надеюсь это поможет
- AttributeError: объект «numpy.int64» не имеет атрибута «timestamp» в python 3.5 в Anaconda
- Mod_wsgi и Apache. Где требуется Access-Control-Allow-Origin?