ホームページ >バックエンド開発 >Python チュートリアル >Python を使用してハフマン符号化アルゴリズムを実装するにはどうすればよいですか?
Python を使用してハフマン符号化アルゴリズムを実装するにはどうすればよいですか?
要約:
ハフマンコーディングは、文字の出現頻度に基づいて一意のコードを生成することで、データの効率的な圧縮と保存を実現する古典的なデータ圧縮アルゴリズムです。この記事では、Python を使用してハフマン コーディング アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。
キューにノードが 1 つだけ残るまで、次の操作をループします。
import heapq from collections import defaultdict class Node: def __init__(self, frequency, value=None): self.frequency = frequency self.value = value self.left_child = None self.right_child = None def __lt__(self, other): return self.frequency < other.frequency def build_huffman_tree(freq_dict): priority_queue = [] for char, freq in freq_dict.items(): heapq.heappush(priority_queue, Node(freq, char)) while len(priority_queue) > 1: left_child = heapq.heappop(priority_queue) right_child = heapq.heappop(priority_queue) new_node = Node(left_child.frequency + right_child.frequency) new_node.left_child = left_child new_node.right_child = right_child heapq.heappush(priority_queue, new_node) return heapq.heappop(priority_queue)ハフマンコーディングテーブルの生成
def generate_huffman_codes(huffman_tree): code_dict = {} def traverse(node, current_code=''): if node.value: code_dict[node.value] = current_code else: traverse(node.left_child, current_code + '0') traverse(node.right_child, current_code + '1') traverse(huffman_tree) return code_dict
def compress_data(data, code_dict): compressed_data = '' for char in data: compressed_data += code_dict[char] return compressed_data def decompress_data(compressed_data, huffman_tree): decompressed_data = '' current_node = huffman_tree for bit in compressed_data: if bit == '0': current_node = current_node.left_child else: current_node = current_node.right_child if current_node.value: decompressed_data += current_node.value current_node = huffman_tree return decompressed_data
以上がPython を使用してハフマン符号化アルゴリズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。