我想将n个元素的数组划分为给定大小的子数组,并使用所有可能的元素组合。
例如:
等等。正如您所看到的,子数组中元素的顺序或子数组中子数组的顺序并不重要。它必须是输入数组子数组的最小数目。
我有下面的解决方案,但它也包括排列。我需要优化这一点,不产生任何排列在所有。JavaScript不是necesarry,任何语言都可以。提前感谢您的帮助。
function getN(n, array, subsets) {
var f,
l = array.length,
indices = [],
temp;
array = array.slice();
while (l--) {
f = factorial(l);
indices.push(Math.floor(n / f));
n %= f;
}
temp = indices.map(i => array.splice(i, 1)[0]);
return subsets
? subsets.map((i => l => temp.slice(i, i += l))(0))
: temp;
}
function factorial(num) {
var result = 1;
while (num) {
result *= num;
num--;
}
return result;
}
var i, l,
array = ['1', '2', '3', '4'],
subsets = [2, 2],
pre = document.getElementById('out');
for (i = 0, l = factorial(array.length); i < l; i++) {
pre.innerHTML += i.toString().padStart(4) +': ' + JSON.stringify(getN(i, array, subsets)) + '\n';
}
<pre id="out"></pre>
下面是一个递归公式,它将枚举实际元素的组合。在[2,2]
列表中,每个2
都被视为不同的元素。我们可以输入任意模式,如[1,2,3,4,5,6]
,将其分为所有与模式[[x],[x,x],[x,x,x]]
的组合。
function f(ns, subs){
if (ns.length != subs.reduce((a,b) => a+b))
throw new Error('Subset cardinality mismatch');
function g(i, _subs){
if (i == ns.length)
return [_subs];
let res = [];
const cardinalities = new Set();
function h(j){
let temp = _subs.map(x => x.slice());
temp[j].push(ns[i]);
res = res.concat(g(i + 1, temp));
}
for (let j=0; j<subs.length; j++){
if (!_subs[j].length && !cardinalities.has(subs[j])){
h(j);
cardinalities.add(subs[j]);
} else if (_subs[j].length && _subs[j].length < subs[j]){
h(j);
}
}
return res;
}
let _subs = [];
subs.map(_ => _subs.push([]));
return g(0, _subs);
}
console.log('\n[0,1,2,3], [2,2]:');
let str = '';
for (let i of f([0,1,2,3], [2,2]))
str += '\n' + JSON.stringify(i);
console.log(str);
console.log('\n[0,1,2,3], [1,3]:');
str = '';
for (let i of f([0,1,2,3], [1,3]))
str += '\n' + JSON.stringify(i);
console.log(str);
console.log('\n[0,1,2,3,4,5,6,7,8,9], [1,2,3,4]:');
str = '';
for (let i of f([0,1,2,3,4,5,6,7,8,9], [1,2,3,4]))
str += '\n' + JSON.stringify(i);
console.log(str);
在Apache Spark中, -允许将RDD精确划分为分区。 而是如何将给定的RDD划分成分区,使得所有分区(最后一个分区除外)都具有指定数量的元素。鉴于RDD元素的数量是未知的,做<代码>。count()的开销很大。 预期:
我有一个由32个数字组成的数组[1,2,3,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,7,7,7,7,8,9,10,10,11,9,12,13,13,14,14,15,16,17,17] 对于我最初的问题,我不需要生成所有的排列。我只需要在每次运行我的程序时生成一个随机排列。 我的方法是使用Fisher-Yates算法随机洗牌数组,并不断重新洗牌,直到我得到所有8个子数组,没有重
根据所提供的函数对每个元素进行迭代,将这些元素分成两个数组。 使用 Array.reduce() 创建两个数组的数组。 使用 Array.push() 将 fn 返回为 true 的元素添加到第一个数组,而 fn 返回 false 的元素到第二个元素。 const partition = (arr, fn) => arr.reduce( (acc, val, i, arr) => {
问题内容: 说我有一个列表L。如何获得K组所有分区上的迭代器? 示例:L = [2,3,5,7,11,13],K = 3 3组的所有可能分区的列表: ===更新=== 我正在研究一个似乎可行的解决方案,所以我只复制粘贴它即可 输出: 问题答案: 这可行,尽管它可能超级无效(我将它们全部排序以避免重复计算): 它还返回空簇,因此您可能希望将其包装起来以便仅获取非空簇: 计数只是为了检查: 有用 !
英文原文:http://emberjs.com/guides/components/customizing-a-components-element/ 默认情况下,每个组件是一个<div>元素。如果使用开发工具查看渲染后的组件,将看到一个如下所示的DOM表示: 1 2 3 <div id="ember180" class="ember-view"> <h1>My Component</h1>
问题内容: 我对Apache Spark和Python比较陌生,想知道像我将要描述的东西是否可行? 我有一个格式为[m 1,m 2,m 3,m 4,m 5,m 6, … m n ]的RDD(运行rdd.collect()时会得到这个)。我想知道是否有可能将此RDD转换为[[m 1,m 2,m 3),(m 4,m 5,m 6).....(m n-2, m n-1,m n)]。内部元组的大小应为k。如