Python LZW sıkıştırma algoritmasındaki "else if" bloğu neden var?

Katılım
26 Ocak 2020
Mesajlar
6.332
Makaleler
1
Çözümler
13
Yer
İstanbul
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?

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:

Technopat Haberler

Yeni konular

Geri
Yukarı