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 関数の上にも両方を含めました。