Anonymous user
Huffman coding: Difference between revisions
→SETL
No edit summary |
(→SETL) |
||
Line 378:
d 1 111111
</pre>
=={{Header|SETL}}==
<lang SETL>
var forest := {}, encTab := {};
plaintext := 'this is an example for huffman encoding';
ft := {};
(for c in plaintext)
ft(c) +:= 1;
end;
forest := {[f, c]: [c, f] in ft};
(while 1 < #forest)
[f1, n1] := getLFN();
[f2, n2] := getLFN();
forest with:= [f1+f2, [n1,n2]];
end;
addToTable('', arb range forest);
(for e = encTab(c))
print(c, ft(c), e);
end;
print(+/ [encTab(c): c in plaintext]);
proc addToTable(prefix, node);
if is_tuple node then
addToTable(prefix + '0', node(1));
addToTable(prefix + '1', node(2));
else
encTab(node) := prefix;
end;
end proc;
proc getLFN();
f := min/ domain forest;
n := arb forest{f};
forest less:= [f, n];
return [f, n];
end proc;
</lang>
|