前天晚上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, {})