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 函数之上。