1
我想創建一個快速的Sudoku求解器,並在其中一個步驟中我需要保存拼圖的狀態。我開始使用各種深層複製功能來做到這一點,但發現它很慢。最後,我提出了這兩個功能,但luatrace顯示這兩個功能仍然佔用大量時間。優化lua表備份
有沒有什麼可以做到這一點,以優化或現在寫在C?
local function backupCells(cells)
local serial = {{}, {}}
for i = 1, #cells do
serial[1][i] = {unpack(cells[i].domain)}
serial[2][i] = cells[i].value
end
return serial
end
local function restoreCells(cells, serial)
for i=1, #cells do
cells[i].domain = serial[1][i]
cells[i].value = serial[2][i]
end
end
更新:(!請求額外信息)
所以,在cells
每個單元代表的數獨格正方形。一旦確定了單元格的值,則會設置value
屬性(否則爲nil
)。 domain
是所有可能值的表格。在撥打backupCells
和restoreCells
的呼叫之間,轉發檢查已完成,並且單元格的值/域發生了相當大的變化 - serial
不會發生任何此類更改。
通常情況下,恢復是一個「撤消」,以便解算器可以猜測另一個值並從那裏進行檢查。
我不是很確定爲什麼它們是按原樣書寫的,對於任何有用的答案,「細胞」(含語義和基本原理)的確切佈局是必需的。同樣有趣的是,在調用之間'cells'會發生什麼,'serial'會發生什麼。 – Deduplicator 2014-10-19 18:45:37
我已更新該帖子以包含有關數獨解算器的其他信息! – FourierTransformer 2014-10-19 21:03:42