Huffman coding: Difference between revisions

m
Line 3,221:
 
=={{header|Julia}}==
<lang julia>abstract type HuffmanTree end
abstract type HuffmanTree end
 
mutable struct HuffmanLeaf <: HuffmanTree
Line 3,245 ⟶ 3,246:
d
end
 
function huffmantree(ftable::Dict)
trees::Vector{HuffmanTree} = [HuffmanLeaf(ch, fq) for (ch, fq) in ftable]
while length(trees) > 1
sort!(trees, lt = (x, y) -> x.freq < y.freq, rev = true) # as priority queue within this loop
least = pop!(trees)
nextleast = pop!(trees)
Line 3,257 ⟶ 3,258:
end
 
printencoding(lf::HuffmanLeaf, code::String) = println(lf.ch == ' ' ? "space" : lf.ch, "\t", lf.freq, "\t", code)
 
function printencoding(nd::HuffmanNode, code::String)
prefixcode *= '0'
printencoding(nd.left, code)
prefixcode = prefixcode[1:end-1]
 
prefixcode *= '1'
printencoding(nd.right, code)
prefixcode = prefixcode[1:end-1]
end
 
Line 3,294 ⟶ 3,295:
a 3 1100
i 3 1101
space 6 111
</pre>
 
4,103

edits