Huffman 코딩 알고리즘을 Python을 사용하여 구현하는 방법은 무엇입니까?
요약:
허프만 코딩은 문자 발생 빈도에 따라 고유한 코드를 생성하여 데이터의 효율적인 압축 저장을 달성하는 고전적인 데이터 압축 알고리즘입니다. 이 기사에서는 Python을 사용하여 허프만 코딩 알고리즘을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.
큐에 노드가 하나만 남을 때까지 다음 작업을 반복합니다.
다음은 코드 예제입니다.
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을 사용하여 허프만 코딩 알고리즘을 구현하는 방법을 소개합니다. 주요 단계에는 허프만 트리 구축, 허프만 코딩 테이블 생성, 데이터 압축 및 압축 해제가 포함됩니다. 이 기사의 소개와 코드 예제가 독자가 허프만 코딩 알고리즘을 더 잘 이해하고 적용하는 데 도움이 되기를 바랍니다.
위 내용은 Python을 사용하여 허프만 코딩 알고리즘을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!