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
Выше приведен мой текущий код для достижения кодирования BWT в Lua. Проблема в том, что из-за размера таблиц и длины циклов выполнение занимает много времени. Для ввода 1000 символов среднее время кодирования составляет около 1,15 секунды. Есть ли у кого-нибудь предложения по более быстрой функции кодирования BWT?
наибольшее замедление наблюдается в функциях fLexTblSort и fShallowCopy. Я также включил обе выше функции BWT.