Huffman coding: Difference between revisions

No edit summary
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>
Anonymous user