从一个数组的大小为N组合 [英] combinations of size N from an array

查看:167
本文介绍了从一个数组的大小为N组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想建立一个JavaScript函数从阵列获取的大小为N的所有组合。
可以说,我有:

 常量Xarray =19,21,42,23,25,28];
常量N = 4;combinationsOfN(Xarray,N)=>[19,21,42,23]
  [19,21,42,25]
  [19,21,42,28]
  [19,21,23,25]
  [19,21,23,28]
  [19,21,25,28]
...。 ]


解决方案

自己做,这可能是相当艰难的,因为我已经试过了。目前已经是一个JS的工具,可以实现这个要求, combinations.js

\r
\r

/ **\r
 *版权所有2012 AkseliPalén。\r
 *创建2012-07-15。\r
 *根据MIT许可证授权。\r
 * /\r
功能k_combinations(套,K){\r
变种I,J,梳子,头,tailcombs;\r
如果(K> set.length || K&下; = 0){\r
返回[];\r
}\r
如果(K == set.length){\r
返回[设定]\r
}\r
如果(K == 1){\r
梳子= [];\r
对于(i = 0; I< set.length;我++){\r
combs.push([设为[I]);\r
}\r
返回梳子;\r
}\r
梳子= [];\r
对于(i = 0; I< set.length - K + 1;我++){\r
头= set.slice(I,I + 1);\r
tailcombs = k_combinations(set.slice第(i + 1)中,k - 1);\r
为(J = 0; J< tailcombs.length; J ++){\r
combs.push(head.concat(tailcombs [J]));\r
}\r
}\r
返回梳子;\r
}\r
功能组合(套){\r
变种K,I,梳子,k_combs;\r
梳子= [];\r
为(K = 1; K&下; = set.length; k ++){\r
k_combs = k_combinations(套,K);\r
对于(i = 0; I< k_combs.length;我++){\r
combs.push(k_combs [I]);\r
}\r
}\r
返回梳子;\r
}\r
\r
变种数组= [19,21,42,23,25,28];\r
\r
document.body.innerHTML + =< pre>中+ JSON.stringify(k_combinations(阵列,4),假的,\\ t的)+< / pre>中;

\r

\r
\r

I am trying to build a javascript function to get all combinations of size N from an array. lets say I got:

const Xarray = ["19", "21","42","23",  "25", "28"];
const n = 4;

combinationsOfN(Xarray, n) =>

[ ["19", "21", "42", "23"],
  ["19", "21", "42", "25"],
  ["19", "21", "42", "28"],
  ["19", "21", "23", "25"],
  ["19", "21", "23", "28"],
  ["19", "21", "25", "28"],
…. ]

解决方案

Doing this by yourself might be rather tough, because I've tried that. There's already a js tool that does this for you, combinations.js

/**
 * Copyright 2012 Akseli Palén.
 * Created 2012-07-15.
 * Licensed under the MIT license.
 */
function k_combinations(set, k) {
	var i, j, combs, head, tailcombs;
	if (k > set.length || k <= 0) {
		return [];
	}
	if (k == set.length) {
		return [set];
	}
	if (k == 1) {
		combs = [];
		for (i = 0; i < set.length; i++) {
			combs.push([set[i]]);
		}
		return combs;
	}
	combs = [];
	for (i = 0; i < set.length - k + 1; i++) {
		head = set.slice(i, i+1);
		tailcombs = k_combinations(set.slice(i + 1), k - 1);
		for (j = 0; j < tailcombs.length; j++) {
			combs.push(head.concat(tailcombs[j]));
		}
	}
	return combs;
}
function combinations(set) {
	var k, i, combs, k_combs;
	combs = [];
	for (k = 1; k <= set.length; k++) {
		k_combs = k_combinations(set, k);
		for (i = 0; i < k_combs.length; i++) {
			combs.push(k_combs[i]);
		}
	}
	return combs;
}
	
var array = ["19", "21","42","23", "25", "28"];

document.body.innerHTML += "<pre>" + JSON.stringify(k_combinations(array, 4), false, "\t") + "</pre>";

这篇关于从一个数组的大小为N组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆