js实现简单排列组合的方法

下面是详细讲解 "js实现简单排列组合的方法" 的攻略。

排列组合的概念

排列就是由给定的n个元素中取出m(m ≤ n)个元素的所有排列总数的不同的排列数,用A(n, m)表示。例如,有3个元素A、B、C,则它们的排列有:ABC、ACB、BAC、BCA、CAB、CBA,共6种排列。

组合是指从n个不同元素中,取出m(m≤n)个元素的所有组合情况,用C(n,m)表示。

排列算法实现

以下是一个生成一个序列中所有排列的JavaScript函数:

function generatePerm(arr) { 
    var permutations = [], 
        usedChars = []; 
    function permute(arr) { 
        var i, ch; 
        for (i = 0; i < arr.length; i++) { 
            ch = arr.splice(i, 1)[0]; 
            usedChars.push(ch); 
            if (arr.length === 0) { 
                permutations.push(usedChars.slice());  
            } 
            permute(arr); 
            arr.splice(i, 0, ch); 
            usedChars.pop(); 
        } 
        return permutations; 
    } 
    return permute(arr); 
} 

使用方法

var arr = [1, 2, 3]; 
console.log(generatePerm(arr));

输出:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 

以上算法中,使用一个递归函数permute,将数组中的每个元素当作起始元素,以此生成不同的排列。

组合算法实现

以下是一个生成一个序列中所有组合的JavaScript函数:

function generateComb(arr, numElements) { 
    var results = [], 
        result = []; 
    function combine(arr, numElements, pos) { 
        if (result.length === numElements) { 
            results.push(result.slice()); 
            return; 
        } 
        for (var i = pos; i < arr.length; i++) { 
            result.push(arr[i]); 
            combine(arr, numElements, i+1); 
            result.pop(); 
        } 
    } 
    combine(arr, numElements, 0); 
    return results; 
} 

使用方法:

var arr = [1, 2, 3]; 
console.log(generateComb(arr, 2));

输出:

[[1, 2], [1, 3], [2, 3]] 

以上算法中,使用一个递归函数combine,从数组的第一个元素开始,逐个把元素加入结果数组,如果元素加满了,就把该组合加入结果集。如果还没加满,就继续往后递归。需要注意的是,递归时的pos参数表示起始位置,要逐个枚举数组中剩余的元素。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现简单排列组合的方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • C#实现希尔排序

    C#实现希尔排序攻略 简介 希尔排序(Shell Sort)是插入排序的一种改进版本,也称为缩小增量排序(Diminishing Increment Sorting)。希尔排序首先将要排序的序列分成若干个子序列,分别进行插入排序,待子序列基本有序时,再对全体记录进行一次直接插入排序。其算法主要思想是将原序列按一定间隔分为若干子序列,对每个子序列分别进行插入排…

    算法与数据结构 2023年5月19日
    00
  • JS简单数组排序操作示例【sort方法】

    JS简单数组排序操作示例【sort方法】 操作说明 在JavaScript中,通过数组的sort()方法可以对数组进行排序操作。sort()方法会直接对原数组进行排序,返回排序后的原数组。 sort()方法通常需要传入一个比较函数,来指定排序规则。比较函数接收两个参数,分别表示待比较的两个元素,如果返回值小于0,则表示第一个元素排在第二个元素前面;如果返回值…

    算法与数据结构 2023年5月19日
    00
  • 图解Java中归并排序算法的原理与实现

    图解Java中归并排序算法的原理与实现 什么是归并排序 归并排序是一种经典的排序算法,它的基本思想是通过将待排序序列不停地划分成两个子序列,将每个子序列排序后再将其合并,直到最终合并为一个有序的序列。 归并排序的原理 划分过程 首先将待排序序列分为两个长度相等的子序列,然后对每个子序列进行排序。 合并过程 合并两个有序的子序列,生成一个有序的子序列。重复此过…

    算法与数据结构 2023年5月19日
    00
  • java冒泡排序简单实例

    下面我来详细讲解一下“Java冒泡排序简单实例”的完整攻略。 简介 冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,每次比较相邻的两个元素,如果它们的顺序错误就将它们交换过来。重复上述步骤直到整个数列都有序为止。 实现步骤 首先,我们需要定义一个整型数组,用于存储待排序的数据。 int[] array = {5, 3, 8, 6, 4}; 定义一个…

    算法与数据结构 2023年5月19日
    00
  • JS常见面试试题总结【去重、遍历、闭包、继承等】

    来讲解一下“JS常见面试试题总结【去重、遍历、闭包、继承等】”的完整攻略。 一、去重 JS中去重的方法有很多种,我这里介绍两种比较常见的方法。 1.1 利用Set去重 let arr = [1, 2, 3, 1, 2, 3]; let unique = […new Set(arr)]; console.log(unique); // [1, 2, 3] …

    算法与数据结构 2023年5月19日
    00
  • PHP常见数组排序方法小结

    PHP常见数组排序方法小结 PHP的数组是一种非常有用的数据结构。当我们需要对数组进行排序时,PHP提供了许多常见的排序方法,包括冒泡排序、选择排序、插入排序、快速排序等,本文将对这些排序方法进行简要介绍和示例说明。 冒泡排序 冒泡排序是一种常见的排序方法,它的基本思想是:对相邻的元素进行比较,如果顺序不正确就交换。这个过程会持续到整个数组都有序为止。 fu…

    算法与数据结构 2023年5月19日
    00
  • 算法系列15天速成 第六天 五大经典查找【下】

    算法系列15天速成 第六天 五大经典查找【下】- 完整攻略 简介 本篇文章是算法系列15天速成中的第六天内容,主要是介绍五大经典查找的后三种查找算法:插值查找、斐波那契查找以及分块查找。在介绍每一种查找算法时都会包含具体的思路、复杂度和应用场景等内容。 插值查找 思路 插值查找是在二分查找的基础上优化的一种查找算法,它不是通过数组的中间元素进行查找,而是通过…

    算法与数据结构 2023年5月19日
    00
  • Linux静态链接库使用类模板的快速排序算法

    下面是对“Linux静态链接库使用类模板的快速排序算法”的详细讲解。 简介 静态链接库是一种文件格式,其中包含了许多可共享的目标文件,这些目标文件可以在运行时被动态链接器加载。可以将静态链接库视为预编译的代码,包含在可执行程序中,因此在执行时无需加载库文件,从而提高程序的运行效率。 在Linux下,可以使用静态链接库的方式来实现类模板的快速排序算法,具有较高…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部