Az adattömörítés célja az adatok méretének csökkentése azáltal, hogy redundáns vagy ismétlődő információkat eltávolít, miközben az eredeti adatokat később pontosan vagy közelítőleg vissza lehet állítani. Az adattömörítés a modern információtárolás, adattovábbítás és feldolgozás kulcsfontosságú technikája.
import heapq
from collections import defaultdict
class HuffmanNode:
def __init__(self, char, freq):
self.char = char
self.freq = freq
self.left = None
self.right = None
def __lt__(self, other):
return self.freq < other.freq
def huffman_tree(frequency):
heap =
heapq.heapify(heap)
while len(heap) > 1:
node1 = heapq.heappop(heap)
node2 = heapq.heappop(heap)
merged = HuffmanNode(None, node1.freq + node2.freq)
merged.left = node1
merged.right = node2
heapq.heappush(heap, merged)
return heap
def huffman_codes(node, prefix="", code_dict=None):
if code_dict is None:
code_dict = {}
if node is not None:
if node.char is not None:
code_dict = prefix
huffman_codes(node.left, prefix + "0", code_dict)
huffman_codes(node.right, prefix + "1", code_dict)
return code_dict
# Példa
data = "aaabbc"
frequency = defaultdict(int)
for char in data:
frequency += 1
tree = huffman_tree(frequency)
codes = huffman_codes(tree)
print("Karakter kódok:", codes)
encoded_data = "".join(codes for char in data)
print("Kódolt adat:", encoded_data)
def run_length_encode(data):
encoding =
i = 0
while i < len(data):
count = 1
while i + 1 < len(data) and data == data:
i += 1
count += 1
encoding.append(f"{count}{data}")
i += 1
return "".join(encoding)
# Példa
data = "AAAABBBCCDA"
encoded_data = run_length_encode(data)
print("Kódolt adat:", encoded_data)
def lzw_compress(data):
dictionary = {chr(i): i for i in range(256)}
current = ""
compressed =
code = 256
for char in data:
temp = current + char
if temp in dictionary:
current = temp
else:
compressed.append(dictionary)
dictionary = code
code += 1
current = char
if current:
compressed.append(dictionary)
return compressed
# Példa
data = "ABABABABABABA"
compressed_data = lzw_compress(data)
print("Kódolt adat:", compressed_data)
Az adattömörítő algoritmusok hatékony eszközök az adatok tárolási és továbbítási igényeinek csökkentésére. A veszteségmentes algoritmusok pontosan visszaállíthatók, míg a veszteséges algoritmusok kompromisszumot kínálnak a méretcsökkentés és a minőség között. Az algoritmusok kiválasztása az alkalmazástól és a felhasználási esettől függ. A modern technológiában az adattömörítés alapvető fontosságú eszköz.