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编码功能?在Lua中快速实施BWT
最大的减速似乎在fLexTblSort和fShallowCopy中。我已经在BWT功能之上加入了这两个功能。
尽管这是一个非常辉煌的解决方案,但它似乎并不能解决问题。您的快速排序和比较器功能与我的旧功能运行时间相同。仍然感谢您的帮助!我想它只是不会移交给Lua。 – HDeffo
是的。 Lua比C慢一些。如果你寻求性能,你可以尝试在C中实现压缩并将函数导出到Lua。它可能会变得更快。还取决于你的Lua实现,如果它反复复制表,或者使用单引用作为C版本。 – Jakuje
不幸的是,在这个项目中不能使用其他语言。我可能只需要将BWT编码从我的压缩中解脱出来,并受到压缩损失较小的影响 – HDeffo