大小元素的排列 [英] Permutations of small and large elements

查看:65
本文介绍了大小元素的排列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果数组为: 2,3,7,9 ;那么我们可以进行排列的方式是:

If the array is : 2,3,7,9; then the ways in which we can have permutations are:

2 7 3 9
2 9 3 7
3 7 2 9
3 9 2 7
7 9 2 3

so total ways are 5.

这里的限制是:

  1. 选择一个元素后,下一个元素必须大于它.
  2. 此后的下一个元素必须小于前一个,依此类推,直到最后一个元素.

我有下面的代码,但是我无法获得排列的逻辑:

I have below code, but I am not able to get the logic for permutaions:

let array = [2, 3, 7, 9];
array.sort((a, b) => a - b);
let res = [];
let n = array.length;
let i = 0;
let j = n - 1;
let k = 0;
while (i < j) {
  res[k++] = array[i++];
  res[k++] = array[j--];
}
if (n % 2 != 0) {
  res[k++] = arr[i];
}

console.log(res);

基于评论:

function Factorial(n) { 

    var res=1; 
      
    for (var i = 2; i <= n; i++) 
        res = res * i; 
    return res; 
} 


let n = 4;
let A = [];
let C = [];
let a = Factorial(n);
for(let i=0; i<=n;i++) {
    A[i] = 0;
}
A[1] = 1;
for(let k=0; k<n; k++) {
    let b = Factorial(k)*Factorial(n-k);
    
    A[k] = a/b * A[k]*A[n-k]/2;
}
console.log(A);



prints [0, 0, 0, 0]

推荐答案

这种排列称为 zigzag或交替排列

众所周知, n 个元素的这种排列数量可以用递归公式来描述:

It is known that the number of such permutations of n elements might be described with recurrent formula:

A(n+1) = Sum(k=0..n){C(n,k)*A(k)*A(n-k)} / 2

其中 A(n) n 个项目的排列数量,初始A [] = 1 C(n,k)二项式系数

where A(n) is number of permutation of n items, initial A[] = 1, C(n,k) is binomial coefficient

所以我们可以逐步使用计算出的条目填充数组

So we can fill array with calculated entries step-by step

function cnk(n, k) {
  let res = 1;
  for (let i = 0; i < k; i++) 
    res = res * (n - i) / (i + 1);
  return res;
}

let m = 15;
let A = [1,1];
for (let i = 0; i < m-1; i++) {
  A.push(0);
}

for (let n = 2; n < m; n++) 
  for (let k = 0; k <= n; k++) 
    A[n + 1] += A[k] * A[n - k] * cnk(n, k) / 2;
    
console.log(A);

[1, 1, 1, 2, 5, 16, 61, 272, 1385, 7936, 50521, 353792, 2702765,
 22368256, 199360981, 1903757312]

这篇关于大小元素的排列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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