Изменения

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