您的位置:首页 > 编程语言 > Lua

lua实现全排列和组合排列

2016-03-21 10:10 1006 查看
--组合排列
function sub(head,index,r,k,a)
for  i=head,#a+index-k do
if(index<k) then
r[index ] = a[i];
sub(i + 1, index + 1, r, k,a);
elseif (index == k)  then
r[index ] = a[i];
--local t=""
--t = table.concat(r)
--TracePrint(t,#t)
//全排列和组合排列一起使用
fullPermutation(r)
end
end
end

function fullsub(t,start,end1,r)
r = {}
start =start or  1
end1 = end1  or  #t
for tmpi=start, end1 do
sub(1,1,r,tmpi,t)
end
end

--以下为全排列
function IsSwap (fullArray, start,end1)
--这个还未理解
for tmpi=start,end1-1 do
if  fullArray[tmpi] == fullArray[end1]  then
return false
end
end
return true
end

function  fullPermutation(fullArray, start,end1)
assert(type(fullArray) == "table", "参数类型错误")
start = start or 1
end1  =end1  or #fullArray
local  ret =""
--出口
if  start >= end1 then
for tmpii=1,#fullArray do
ret = ret .. fullArray[tmpii]
end
TracePrint(ret)
return
end
--else
for tmpi=start,end1 do
--  交换得到新的排列
--去除重复数字
if  IsSwap (fullArray, start,tmpi)  then
fullArray[tmpi] ,fullArray[start]=fullArray[start],fullArray[tmpi]
--swap(fullArray,start,tmpi)
--递归
fullPermutation(fullArray, start+1,end1)
--还原至最初的排列
fullArray[tmpi] ,fullArray[start]=fullArray[start],fullArray[tmpi]
--end
end
end
--end
end

--测试代码
a={4,5,6}
fullsub(a)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: