cours-m1-eea/455-Codage_Sources/algo_code/LZW.py

43 lines
1 KiB
Python
Raw Permalink Normal View History

2019-03-01 09:53:53 +01:00
#!/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)
print(code, dictionnaire, msg)