时间:2021-05-26
排列 (Permutation / Arrangement)
概念
n 个不同元素中任意选取 m (m <= n) 个元素进行排列,所有排列情况的个数叫做 排列数,其值等于:
A = n! / (n - m)!! 表示数学中的阶乘运算符,可以通过以下函数实现:
function factorial(n) { if (n === 0 || n === 1) { return 1; } else if (n < 0) { return null; } else { return n * factorial(n - 1); }}console.log(factorial(4)); // 24当 n = m 时,称为 全排列,其值等于:
A = n!全排列相当于将所有元素进行排序,得到所有不同顺序情况的个数;
分析
利用阶乘函数,通过上述数学公式只能得到所有情况的个数值,不容易得到具体的每种情况,要获取每种情况的输出值的话需要另寻他法;
用数组举例分析:
全排列:
[1, 2, 3] => [
[1, 2, 3],
[1, 3, 2],
[2, 1, 3],
[2, 3, 1],
[3, 1, 2],
[3, 2, 1]
]
共 6 种情况
树状图表示:
1 2 3
/ \ / \ / \
2 3 1 3 1 2
| | | | | |
3 2 3 1 2 1 => 6
3 个元素中选取 2 个时:(n = 3, m = 2)
[1, 2, 3] => [
[1, 2],
[1, 3],
[2, 1],
[2, 3],
[3, 1],
[3, 2]
]
共 6 种情况
树状图表示:
1 2 3
/ \ / \ / \
2 3 1 3 1 2 => 6
实现
最终实现函数就是 permutation(a, m),其中参数 a 为输入数组,包含需要排列的所有元素,参数 m 为选取需要排列的个数,默认等于输入数组的长度,即默认全排列,注意 m 不能大于元素个数;
拓展
以上函数输出值为一个二维数组,如果需要便于观察,输出一个一维数组,可以定义一个合并函数:
function merge(arr) { return arr.map(x => x.join(''));}let result = merge(permutation([1, 2, 3]));console.log(result);// [123, 132, 213, 231, 312, 321]总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JavaScript实现数组全排列、去重及求最大值算法。分享给大家供大家参考,具体如下:1、全排列(递归)functionpermutation(
本文实例为大家分享了python递归全排列的实现方法,供大家参考,具体内容如下排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;全排列:当n=
本文实例讲述了JS实现的数组全排列输出算法。分享给大家供大家参考。具体分析如下:这段js代码对数组进行全排列输出,改进了一些老的代码从n个不同元素中任取m(m≤
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;全排列:当n==m时,称为全排列;比如:集合{1,2,3}的全排列为:复制代码代码如下:{1
本文实例讲述了JavaScript数组随机排列实现随机洗牌功能的方法。分享给大家供大家参考。具体分析如下:这段JS代码可以对数组内的元素进行随机排列,这个非常有