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?Быстрая реализация BWT в Lua
Наибольшее замедление, по-видимому, находится в fLexTblSort и fShallowCopy. Я включил оба над функцией BWT.
Хотя это очень блестящее решение, похоже, это, похоже, не решает проблему. ваши функции быстрой сортировки и компаратора выполняются в то же время, что и мои старые. Еще спасибо за попытку помочь! Наверное, он просто не переносит на Луа. – HDeffo
Да. Lua немного медленнее, чем C. Если вы ищете производительность, вы можете попытаться реализовать сжатие в C и экспортировать функцию в Lua. Это может ускориться. Также зависит от вашей реализации Lua, если она копирует таблицы снова и снова или использует одну ссылку в качестве версии C. – Jakuje
К сожалению, использование другого языка в этом проекте не является вариантом. Мне просто нужно взять кодировку BWT из моего сжатия и страдать от небольшой потери сжатия – HDeffo