Hey guys, could you help me out with a problem?
I'm trying to program the Huffman Encoding algorithm in Lua, and I'm having trouble sorting my tables in order.
Script:
-- Lua version of Huffman Encoding local buffer = {} -- This is where the characters of <str> get broken down into 0/1 if statements. local input = "" function Enc(s) -- <s> for string buffer = {} -- new buffer (global for decoding) local c = {} -- use to count unique characters in s and how often the occur local l = string.len(s) -- gets the length of the string -- This separates all unique characters and counts their occurance in <s> for i = 1,l do local n = string.sub(s,i,i) -- the Next single character in <s> if n then -- Check if the current character has already been added to <c> if c[n] then c[n] = c[n] + 1 print("Added character:",n,c[n]) else c[n] = 1 print("New character:",n) end end end print("Bef",table.concat(c," ")) table.sort(c,function(v0,v1) return c[v0] > c[v1] and v0 or v1 end) print("Aft",table.concat(c," ")) end function Dec(b) -- b for binary end Enc("AABBBC")
Just to give you an idea, the huffman process converts text to binary, and builds a hierarchy of the most occurring characters to the least occurring characters.
The Enc function first goes through the string (s) and counts how many times a letter has occurred, writing a table (c) with the Index representing the letter, and value representing the occurrence: c = { "A" = 2; "B" = 3; "C" = 1; }
I want to sort this according to Value - not Index, but I'm struggling how the sort function works, especially since it doesn't allow prints from inside the sort function... =[
Any help with the sort function would be really appreciated.