Basit bir decoder yazdım LZW algoritması için. [65, 66, 256] gibi bir int array alıyor. Bunu yazarken yabancı kaynaklardan da destek aldım ve şu kısmı anlayamadım.
elif bloğundaki şartın nasıl gerçekleşeceği aklıma gelmedi bir türlü. Bir örnek ile açıklayabilir misiniz?
Cevap gelmediğinden kendim bir örnek buldum. "BAAA" stringi incelendiğinde mantığı kavranıyor. Sonradan görecekler için yazıyorum.
Python:
def decompress_from_array(compressed):
from io import StringIO
dict_size = 256
dictionary = {i: chr(i) for i in range(dict_size)}
result = StringIO()
working = chr(compressed.pop(0))
result.write(working)
for value in compressed:
if value in dictionary:
entry = dictionary[value]
elif value == dict_size:
entry = working + working[0]
else:
raise ValueError('Bad compressed k: %s' % value)
result.write(entry)
dictionary[dict_size] = working + entry[0]
dict_size += 1
working = entry
return result.getvalue()
elif bloğundaki şartın nasıl gerçekleşeceği aklıma gelmedi bir türlü. Bir örnek ile açıklayabilir misiniz?
Basit bir decoder yazdım LZW algoritması için. [65, 66, 256] gibi bir int array alıyor. Bunu yazarken yabancı kaynaklardan da destek aldım ve şu kısmı anlayamadım.
Python:def decompress_from_array(compressed): from io import StringIO dict_size = 256 dictionary = {i: chr(i) for i in range(dict_size)} result = StringIO() working = chr(compressed.pop(0)) result.write(working) for value in compressed: if value in dictionary: entry = dictionary[value] elif value == dict_size: entry = working + working[0] else: raise ValueError('Bad compressed k: %s' % value) result.write(entry) dictionary[dict_size] = working + entry[0] dict_size += 1 working = entry return result.getvalue()
elif bloğundaki şartın nasıl gerçekleşeceği aklıma gelmedi bir türlü. Bir örnek ile açıklayabilir misiniz?
Cevap gelmediğinden kendim bir örnek buldum. "BAAA" stringi incelendiğinde mantığı kavranıyor. Sonradan görecekler için yazıyorum.
Son düzenleme: