求助JS二维数组从N个项取M个进行排列的组合算法函数
来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/10/06 15:26:03
求助JS二维数组从N个项取M个进行排列的组合算法函数
如数组:arr1=[[1,2,3],[3,6],4,6,[3,4]];取4项的排列组合为
1、[[1,2,3],4,6,[3,4]]
2、[[1,2,3],[3,6],6,[3,4]]
3、[[1,2,3],[3,6],4,[3,4]]
4、[[1,2,3],[3,6],4,6]
5、[[3,6],4,6,[3,4]]
五种结果,其中m=5,n=4.
要求m,n为随机的,返回值的结果为以上五种结果组成的数组,即return arr2=[[[1,2,3],4,6,[3,4]],[[1,2,3],[3,6],6,[3,4]],[[1,2,3],[3,6],4,[3,4]],[[1,2,3],[3,6],4,6],[[3,6],4,6,[3,4]]];
如数组:arr1=[[1,2,3],[3,6],4,6,[3,4]];取4项的排列组合为
1、[[1,2,3],4,6,[3,4]]
2、[[1,2,3],[3,6],6,[3,4]]
3、[[1,2,3],[3,6],4,[3,4]]
4、[[1,2,3],[3,6],4,6]
5、[[3,6],4,6,[3,4]]
五种结果,其中m=5,n=4.
要求m,n为随机的,返回值的结果为以上五种结果组成的数组,即return arr2=[[[1,2,3],4,6,[3,4]],[[1,2,3],[3,6],6,[3,4]],[[1,2,3],[3,6],4,[3,4]],[[1,2,3],[3,6],4,6],[[3,6],4,6,[3,4]]];
var arr1 = [];//你的原始数组
function getArr(m,n){
var rt = [];
for(var i=0;i<m;i++){
var arr = arr1.concat();
arr.splice(i,1);
getNext(arr,n-1);
}
return rt;
function getNext(arr,n){
if(!n){
return rt.push(arr);
}
for(var i=0;arr[i];i++){
var _arr = arr.concat();
_arr.splice(i,1);
getNext(_arr,n-1);
}
}
}
getArr(arr1.length,arr1.length - (arr1.length * Math.random() | 0));//这个也是随机的 m应该就是arr1数组的长度 n要说才是真正随机 第二个参数实际是m-n
再问: 好像不行啊 var arr=[[1,2,3],[3,6],4,6,[3,4]]; var arr2=getArr(arr.length,2); //alert(arr2[0].length); //alert(arr2[0][0].length) alert(arr2.length);//输出为0,正常的C(5,2)应该是10啊
再答: arr1=[[1,2,3],[3,6],4,6,[3,4]]; 你题目是arr1 我里面提到的是arr1 你现在用arr肯定不行
再问: 因为新手, 刚才无看清,不好意思,还有以下问题麻烦解决一下 arr1=[[1,2,3],[3,6],4,6,[3,4]]; var arr2=getArr(arr1.length,3); alert(arr2[.length) //输出60,应该C(5,3)=C(5,2)=10,不需要排序的
再答: arr1=[[1,2,3],[3,6],4,6,[3,4]];
function getArr(m,n){
var rt = [];
for(var i=0;i<m;i++){
getNext([i],n-1,i+1);
}
for(var i=0,row;row = rt[i];i++){
var cell = [];
for(var j in row){
cell = cell.concat([arr1[row[j]]]);
}
rt[i] = cell;
}
return rt;
function getNext(arr,n,index){
if(!n){
return rt.push(arr);
}
for(var i=index;i<m;i++){
getNext(arr.concat(i),n-1,i+1);
}
}
}
getArr(arr1.length,arr1.length * Math.random() | 0);换个思路 就是你要的答案了、 请试用 好的话 请采纳现在的n是选择的多少个
function getArr(m,n){
var rt = [];
for(var i=0;i<m;i++){
var arr = arr1.concat();
arr.splice(i,1);
getNext(arr,n-1);
}
return rt;
function getNext(arr,n){
if(!n){
return rt.push(arr);
}
for(var i=0;arr[i];i++){
var _arr = arr.concat();
_arr.splice(i,1);
getNext(_arr,n-1);
}
}
}
getArr(arr1.length,arr1.length - (arr1.length * Math.random() | 0));//这个也是随机的 m应该就是arr1数组的长度 n要说才是真正随机 第二个参数实际是m-n
再问: 好像不行啊 var arr=[[1,2,3],[3,6],4,6,[3,4]]; var arr2=getArr(arr.length,2); //alert(arr2[0].length); //alert(arr2[0][0].length) alert(arr2.length);//输出为0,正常的C(5,2)应该是10啊
再答: arr1=[[1,2,3],[3,6],4,6,[3,4]]; 你题目是arr1 我里面提到的是arr1 你现在用arr肯定不行
再问: 因为新手, 刚才无看清,不好意思,还有以下问题麻烦解决一下 arr1=[[1,2,3],[3,6],4,6,[3,4]]; var arr2=getArr(arr1.length,3); alert(arr2[.length) //输出60,应该C(5,3)=C(5,2)=10,不需要排序的
再答: arr1=[[1,2,3],[3,6],4,6,[3,4]];
function getArr(m,n){
var rt = [];
for(var i=0;i<m;i++){
getNext([i],n-1,i+1);
}
for(var i=0,row;row = rt[i];i++){
var cell = [];
for(var j in row){
cell = cell.concat([arr1[row[j]]]);
}
rt[i] = cell;
}
return rt;
function getNext(arr,n,index){
if(!n){
return rt.push(arr);
}
for(var i=index;i<m;i++){
getNext(arr.concat(i),n-1,i+1);
}
}
}
getArr(arr1.length,arr1.length * Math.random() | 0);换个思路 就是你要的答案了、 请试用 好的话 请采纳现在的n是选择的多少个
matlab 列举从X数组中选出m个元素进行全排列的结果
求算法:一个数组有N个元素,求出所有的排列
从一个二维数组b[m][n]中找出最大值元素的时间复杂度为 A.m B.n C.m+n D.m*n
C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统:共有M个选手参加比赛,N个评委进行打分(M、
其他排列与组合公式 从n个元素中取出m个元素的循环排列数=A(n,m)/m=n!/m(n-m)!.我不太明白他表达的意思
请编写函数int fun ,a是一个M行N列的二维数组,函数的功能是求出二维数组周边元素之和,作为函数值返回.
有一n行m列数组,每行任选一个数,组成一个1行n列数组,一共有多少个组合?怎么计算?注意是组合,非排列
求1 java算法 一个数组中m个数(连续的) 需要分成n组 求这n组的所有组合方式
急求完全排列的算法,例如有6个字母abcdef,列举这6个字母完全组合的算法,如果有n个字母怎么算?
排列组合公式一种公式是指排列,从N个元素取R个进行排列(即排序).一种公式是指组合,从N个元素取R个,不进行排列(即不排
下列程序定义了N×N的二维数组,并在主函数中赋值.
随机组合排列的js或者jquery如何写?