Задание:
Нужно реализовать алгоритм Хаффмана на python с разными мощностями.
Описания алгоритма:
На вход с клавиатуры должен подаваться текст(и русские буквы и латиница а также все знаки препинания и пробелы должны быть учтены).
После этого с клавиатуры должна задаваться "мощность алфавита" или же "кодовый алфавит" - на выбор 2 или 3.
Далее в этом тексте нужно определить вероятности появления всех символов и записать их в таблицу, отсортировав в порядке убывания вероятностей.
После этого реализуем алгоритм Хаффмана следующим образом:
Для выбранной мощности - 2:
Шаг 1: Объединяем 2 символа с наименьшими вероятностями. Символу с большей вероятностью приписываем цифру 1, символу с меньшей вероятностью приписываем цифру 0 в качестве элементов их кодов.
Шаг 2: Считаем объединения символов за один символ с вероятностью, равной сумме вероятностей объединения символов.
Шаг 3: Возвращаемся на шаг 1 до тех пор, пока все символы не будут объединены в один с вероятностью, равной единице.
Шаг 4: После этого строим таблицу соответствия символа и кодового слова. Берём символ, и присваиваем ему кодовое значение. Его кодовым значением будет являться набор цифр, присвоенных этому символу на шаге 1, в порядке убывания.
Для выбранной мощности - 3:
Шаг 1: Объединяем 3 символа с наименьшими вероятностями. Символу с большей вероятностью приписываем цифру 2, символу с меньшей вероятностью приписываем цифру 0, оставшемуся символу присваиваем цифру 1, в качестве элементов их кодов.
Шаг 2: Считаем объединения символов за один символ с вероятностью, равной сумме вероятностей объединения символов.
Шаг 3: Возвращаемся на шаг 1 до тех пор, пока все символы не будут объединены в один с вероятностью, равной единице.
Шаг 4: Если в конце остаются 2 символа вместо трёх, то мы объединяем их, символу с большей вероятностью присваиваем цифру 2, символу с меньшей вероятностью присваиваем цифру один
Шаг 5: После этого строим таблицу соответствия символа и кодового слова. Берём символ, и присваиваем ему кодовое значение. Его кодовым значением будет являться набор цифр, присвоенных этому символу на шаге 1, в порядке убывания.
5) После этого выводим на экран таблицу соответствия символа и кодового слова а также закодированное предложение.
Программа должна решать общие случаи а не частные(любой текст и любой язык(кириллица, латиница)). Допустимо приводить символы к одному регистру.