PYTHON АЛГОРИТМ ХАФФМАНА

Алгоритм Хаффмана является алгоритмом сжатия данных, который позволяет минимизировать объем передаваемой информации без потери каких-либо данных. Он был разработан американским ученым Дэвидом Хаффманом в 1952 году и успешно используется в различных областях, в том числе в компьютерных сетях и телефонной связи.

Основной принцип алгоритма Хаффмана заключается в том, что часто встречающиеся символы заменяются на более короткие последовательности бит. Символы, которые встречаются реже, заменяются на более длинные последовательности бит. Таким образом, при передаче информации объем данных сокращается.

Реализация алгоритма Хаффмана на Python может выглядеть следующим образом:

import heapqfrom collections import defaultdictdef huffman(s): """ Функция, которая возвращает таблицу кодов Хаффмана для данной строки. """ heap = [[freq, [sym, ""]] for sym, freq in defaultdict(int, Counter(s)).items()] heapq.heapify(heap) while len(heap) > 1: lo = heapq.heappop(heap) hi = heapq.heappop(heap) for pair in lo[1:]: pair[1] = '0' + pair[1] for pair in hi[1:]: pair[1] = '1' + pair[1] heapq.heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:]) return sorted(heapq.heappop(heap)[1:], key=lambda p: (len(p[-1]), p))if __name__ == '__main__': s = "hello world" codes = huffman(s) print("Symbol\tWeight\tHuffman Code") for p in codes: print("%s\t%s\t%s" % (p[0], Counter(s)[p[0]], p[1]))

В данном примере мы создаем функцию huffman(s), которая возвращает таблицу кодов Хаффмана для заданной строки s. Для этого мы используем библиотеку heapq и класс defaultdict из collections.

Код использует кучу, чтобы хранить символы и соответствующие им частоты вхождения. Затем мы объединяем два наименьших элемента кучи, создавая новый элемент, чей вес равен сумме весов двух наименьших элементов. Каждый раз при таких операциях мы обновляем коды символов, присвоив им 0 или 1 в зависимости от того, куда они находились в соответствующем дереве кодирования Хаффмана.

В конце мы выводим таблицу с символами, их весами и соответствующими кодами Хаффмана.

Метод Хаффмана

Программирование - Кодирование по алгоритму Хаффмана на Python

Алгоритмы теория и практика Методы - 69 урок. Практика на Python: Коды Хаффмана

Код Хаффмана

py035 Сжатие по Хаффману

Практика программирования на Python 3, лекция №1

BLGPG-5044A74140FD-24-09-20-00

Новые материалы: