一个排列组合问题的解法
2011-02-28 23:58
309 查看
给出N个集合(例如{1}、{2,5}、{3,5},N = 3),若在每个集合中每次取一个数,组成一个新的集合,如何求出所有这样的集合呢(如上面例子的结果为{1,2,3} 、{1,2,5}、{1,5,3}、{1,5,5})?下面给出了解决该问题的Matlab递归算法实现。
Choose.m
Rum.m
运行结果:
Choose.m
function [ ret ] = Choose( sets ) % 输入参数: % sets 胞元数组类型,数组中每个元素为一个数列集合,类型为一个一维向量,例如 [ 2 3 4 ] % 输出参数: % ret 胞元数组类型,数组中每个元素为一个数列集合,即问题的求解结果 nSetLength = length( sets ); % 若输入集合仅有一个 if 1 == nSetLength nSetOneLen = length( sets{ 1 } ); ret = cell( 1, nSetOneLen ); for i = 1 : length( sets{ 1 } ) ret{ i } = sets{ 1 }( i ); end % 否则将第一个集合,与剩下的集合排列结果,再进行排列组合 else % 递归调用自身 result = Choose( sets( 2 : end ) ); nSetOneLen = length( sets{ 1 } ); nRetLen = length( result ); ret = cell( 1, nSetOneLen * nRetLen ); for i = 1 : nSetOneLen for j = 1 : nRetLen ret{ ( i - 1 ) * nRetLen + j } = [ sets{ 1 }( i ) result{ j } ]; end end end end
Rum.m
set = { [ 1 ], [ 2 5 ], [ 7 8 ], [ 3 1 ] }; result = Choose( set ); disp( '排列组合结果为:' ); for i = 1 : length( result ) disp( num2str( result{ i } ) ); end
运行结果:
相关文章推荐
- 一个matlab里的排列组合或者说是循环嵌套的层数不定的问题
- 全排列问题、八皇后问题、组合问题的递归解法
- 排列 或组合问题的解法(包含回溯法)
- 对求解“皇后排列问题”的一个新解法!
- 递归类型的排列组合来解决问题(一个、周期类排列组合)
- leetcode 357. Count Numbers with Unique Digits 统计独特编码数组的数量 + 一个很简单的排列组合问题
- 排列组合问题,只有问题,欢迎牛人晒解法
- 排列组合问题,只有问题,欢迎牛人晒解法
- 一个简单文本处理问题的多种解法
- 编写一个方法,洗一副牌。要求做到完美洗牌,换言之,这幅牌52!种排列组合出现的概率相同。假设给定一个完美的随机发生器
- 回溯法之排列组合问题
- 递归-排列组合问题
- 多校联合练习赛1 Problem 1003 Partition 排列组合问题
- 排列组合,子集生成问题,与nyoj 组合数
- 数的组合问题,从n个数中选出m个数,结果按照字典序排列
- 全排列和组合问题
- 多重集合的排列和组合问题
- java写出一个序列的所有排列组合
- 排列组合问题
- 排列组合问题集合