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