Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1.  
  2.  
  3. def compress_lzw(string, d_size):
  4. """Apply the LZW Compression algorithm"""
  5.  
  6. d = {chr(i): i for i in range(d_size)}
  7. s = ""
  8. result = []
  9. for c in string:
  10. c_next = c+s
  11. if c_next in d:
  12. s = c_next
  13. else:
  14. result.append(d[s])
  15. d[c_next] = d_size
  16. d_size += 1
  17. s = c
  18.  
  19. if s:
  20. result.append(d[s])
  21.  
  22. return result
  23.  
  24.  
  25. def compress(string, dict_size=256):
  26. """
  27. LZW Compression Algorithm
  28. - input -> string (optional dict_size with default value 256)
  29. - output -> dictionary with the following params:
  30. - compressed_string,
  31. - output_dict(codes: indices),
  32. - compression_ratio
  33. """
  34.  
  35. result = compress_lzw(string, dict_size)
  36.  
  37. compressed_string = "".join([chr(i) for i in result])
  38. output_dict = {chr(i): i for i in result}
  39. compression_ratio = len(string) / len(compressed_string)
  40.  
  41. return {
  42. 'Output string': compressed_string,
  43. 'Output dictionary': output_dict,
  44. 'Compression rate': compression_ratio
  45. }
  46.  
  47.  
  48. string = input()
  49.  
  50. compressed_string = compress(string)
  51. print(compressed_string)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement