前天晚上XY看到我桌子上有本组合数学的书,然后不停吐槽我,最后我们讨论到了全排列,正好最近在使用lua,于是昨天下午用lua写了一个字典序全排列的小程序,代码比较简洁,但是效率低下,究其原因是我使用了小的table来进行控制,在lua中小的table的创建效率是极其低下的。所以程序运行起来非常慢,9个元素的运行结果已经让我无法等待了。跟之前学校用c写的程序完全无法比,这里抛砖引玉,希望能看到若干个不同版本,效率更快,更加简洁。

--[[字典递增生成全排列,除去打印处理,只能说是效率低下,比较简洁]]
g_tbtest = {1,2,3}

function FullArray(tbtest, hh)
    if #tbtest == 1 then
        print(table.concat(hh)..table.concat(tbtest))
    else
        for key, value in ipairs(tbtest) do
            table.insert(hh, value)
            table.remove(tbtest, key)
            FullArray(tbtest, hh)
            table.insert(tbtest, key, value)
            table.remove(hh)
        end
    end
end

FullArray(g_tbtest, {})