LZW.py 1.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/bin/env python3

import numpy as np

univers = ['a','b','c']
message = "aabababac"

def code_LZW(message, univers):
    msg = message
    dictionnaire = dict(zip(univers,[i for i in range (len(univers))]))
    w=""
    code =[]
    for c in msg:
        wc = w+c
        if wc in dictionnaire:
            w =wc
        else:
            code.append(dictionnaire[w])
            dictionnaire[wc] = len(dictionnaire)
            w = c
    if w:
        code.append(dictionnaire[w])
    return code,dictionnaire

def decode_LZW(code,univers):
    dictionnaire = dict(zip([i for i in range(len(univers))],univers))
    w = dictionnaire[code.pop(0)]
    msg = [w]
    for k in code:
        if k in dictionnaire:
            entry = dictionnaire[k]
        elif k == len(dictionnaire):
            entry = w +w[0]
        msg.append(entry)
        dictionnaire[len(dictionnaire)] = w+entry[0]
        w = entry
    print(dictionnaire)
    return ''.join(msg)

code,dictionnaire = code_LZW(message,univers)
msg = decode_LZW(code, univers)
42
print(code, dictionnaire, msg)