Нужно построить дерево префиксного кодирования. Дано: вектор длин уже построен по методу Хаффмана, операция вставки пути сделана(длина кода L, кодируемое слово w), мне нужно написать функцию, выполняющую декодирование слова(в формате байта) путем идентификации пути из корня в соответствующий лист по правилу: если из кодированного потока считан "0", то спуск влево, "1"- спуск вправо. Помогите, если можете.
Извините пожалуйста, всё оказалось несколько проще, чем я думал, но не настолько, чтоб я это сходу запрограммировал ...
Задача заключается в том, что дано дерево, построенное в префиксном порядке, а мне нужно проделать обратную процедуру: из дерева в выражение ... Кто-нибудь знает как это реализовать?
Что-то вот такого типа:
function decode(root: pnode): word;, где GetNextBit - функция, получающая следующий бит из кодированного потока данных(Function GetNextBit: Boolean, возвращает True, если очередной бит = 1 и False - если он = 0).
begin
if (root^.left = nil) and (root^.right = nil) then decode := root^.w
else begin
if GetNextBit then decode := decode(root^.right)
else decode := decode(root^.left);
end;
end;
while { поток не пуст } do begin
DecodedValue := decode(RootOfHuffmanTree);
{
Ну, и делать то, что тебе надо делать с полученным значением.
Писать DecodedValue в выходной поток, наверное...
}
end;
Были проблемы с институтом, пришлось на время забросить л/р ... Логика задачи в принципе понятна, а как сделать ввод дерева? (чтоб его инерпретировать, его следует сначала задать ...) Работаю в Delphi и подозреваю, что нужно использовать класс TTree, но ничего про него не знаю.
+Эту задачу надо рещить с использованием абстрактного типа данных - АТД(стек или очередь) Я думаю здесь можно использовать стек(записывать туда декодированные[функция decode] данные, а потом из него сразу и вывод данных на экран сделать), надеюсь я правильно понял ...