Изменения
нет описания правки
# В массив запишем частотность каждой буквы.
# В массив запишем частотность каждой буквы.
# Слева приписываем массив той же длины, но с порядковыми номерами из правого массива. Левый массив получается списком указателей на элементы правой части.
# Слева приписываем массив той же длины, но с порядковыми номерами из правого массива. Левый массив получается списком указателей на элементы правой части.
# В левой части делаем не [[Двоичная куча|возрастающую пирамиду]]. Но heap будет не по значению элементов массива, а по значению на ссылаемый элемент массива.
# В левой части делаем не [[Двоичная куча|возрастающую пирамиду]]. Но куча будет не по значению элементов массива, а по значению на ссылаемый элемент массива.
# Самый левый элемент указывает на символ из правого массива с наименьшей частотностью. Его можно удалить следующим образом:
# Самый левый элемент указывает на символ из правого массива с наименьшей частотностью. Его можно удалить следующим образом:
## Правую половину не трогаем
## Правую половину не трогаем
## Из-за того объединили два элемента нужно изменить значения этих элементов массива ссылкой на родителя, куда их положили.
## Из-за того объединили два элемента нужно изменить значения этих элементов массива ссылкой на родителя, куда их положили.
# Повторяем, пока в куче слева не останется 1 элемент.
# Повторяем, пока в куче слева не останется 1 элемент.
# В правой части массива получились ссылки на элементы, объеднияющие 2 символа. Поэтому идём по массиву по ссылкам, инкрементируя уровень погружения.
# В правой части массива получились ссылки на элементы, объединяющие 2 символа. Поэтому идём по массиву по ссылкам, инкрементируя уровень погружения.
# Количество переходов по ссылкам будет длиной кода Хаффмана.
# Количество переходов по ссылкам будет длиной кода Хаффмана.
|}
|}