【发布时间】:2016-05-14 15:18:24
【问题描述】:
local function fShallowCopy(tData)
local tOutput = {}
for k,v in ipairs(tData) do
tOutput[k] = v
end
return tOutput
end
local function fLexTblSort(tA,tB) --sorter for tables
for i=1,#tA do
if tA[i]~=tB[i] then
return tA[i]<tB[i]
end
end
return false
end
function fBWT(tData)
--setup--
local iSize = #tData
local tSolution = {}
local tSolved = {}
--key table--
for n=1,iSize do
tData[iSize] = fRemove(tData,1)
tSolution[n] = fShallowCopy(tData)
end
table.sort(tSolution,fLexTblSort)
--encode output--
for i=1,iSize do
tSolved[i] = tSolution[i][iSize]
end
--finalize--
for i=1,iSize do
if fIsEqual(tSolution[i],tData) then
return i,tSolved
end
end
return false
end
以上是我目前在 Lua 中实现 BWT 编码的代码。问题是由于表的大小和循环的长度,它需要很长时间才能运行。对于 1000 个字符的输入,平均编码时间约为 1.15 秒。有没有人有关于制作更快的 BWT 编码功能的建议?
最大的减速似乎出现在 fLexTblSort 和 fShallowCopy。我也将两者都包含在 BWT 函数之上。
【问题讨论】:
标签: lua compression burrows-wheeler-transform