Lua实现组合算法,从数组中取n个的所有组合
local function copy_array ( arr)
local newarr = { } ;
for i, v in ipairs ( arr) do
if type ( v) == type ( { } ) and # v ~= 0 then
table. insert ( newarr, copy_array ( v) ) ;
else
table. insert ( newarr, v) ;
end
end
return newarr;
end
local function split_array ( arr, st, en)
local newarr = { } ;
en = en or # arr;
for i = en, st, - 1 do
table. insert ( newarr, 1 , arr[ i] ) ;
table. remove ( arr, i) ;
end
return newarr, arr;
end
local function make_ranks ( array, n)
if # array== n then
return { array} ;
end
local ranks = { } ;
local count = # array- n + 1 ;
for i = 1 , count, 1 do
if num > 1 then
local newarray = copy_array ( array) ;
local rmarray, leftarray = split_array ( newarray, 1 , i) ;
local child_ranks = make_ranks ( leftarray , n- 1 ) ;
for ii, vv in ipairs ( child_ranks) do
table. insert ( vv, 1 , array[ i] )
table. insert ( ranks, vv) ;
end
elseif n == 1 then
local rank = { array[ i] } ;
table. insert ( ranks, rank) ;
end
end
return ranks;
end