diff --git a/455-Codage_Sources/algo_code/LZW.py b/455-Codage_Sources/algo_code/LZW.py new file mode 100755 index 0000000..501c985 --- /dev/null +++ b/455-Codage_Sources/algo_code/LZW.py @@ -0,0 +1,46 @@ +#!/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) +print(code) +print(dictionnaire) +msg = decode_LZW(code, univers) +print(message) +print(msg)