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日

相关文章

  • PHP哈希表实现算法原理解析

    PHP哈希表实现算法原理解析 什么是哈希表 哈希表又称为散列表(Hash Table),是根据关键码值(Key-Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到 Hash 表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function),存放记录的数组叫做哈希表(Hash Table)。 PHP哈希表实现…

    算法与数据结构 2023年5月19日
    00
  • 详解js数组的完全随机排列算法

    详解JS数组的完全随机排列算法 1. 算法原理 完全随机排列算法是指将一个数组中的元素完全随机地排列,使每个元素出现在每个位置的可能性相同。 算法的实现原理是: 从数组的最后一个位置开始依次向前遍历,对于每个位置i,随机生成一个介于[0,i]之间的整数j 将位置i上的元素与位置j上的元素交换 经过这样的遍历,整个数组就被完全随机排列了。 2. JS代码实现 …

    算法与数据结构 2023年5月19日
    00
  • java ArrayList按照同一属性进行分组

    要按照同一属性进行分组,我们需要用到Java中的Collections类和Comparator接口。 首先,我们需要为ArrayList中的对象定义一个属性,以便按照该属性进行分组。例如,我们定义一个Person类,其中包含name和age两个属性,我们想要按照年龄进行分组。则代码如下: public class Person { private Strin…

    算法与数据结构 2023年5月19日
    00
  • ASP使用FSO读取模板的代码

    ASP(Active Server Pages)是Microsoft公司推出的一种服务器端动态网页开发技术。FSO(File System Object)是ASP中访问文件系统的一种重要方式。通过FSO,我们可以实现对文件的读写、创建和删除等操作。在ASP中使用FSO读取模板文件,可以实现动态网站中的静态内容显示。下面是使用FSO读取模板文件的完整攻略: 1…

    算法与数据结构 2023年5月19日
    00
  • 又一个PHP实现的冒泡排序算法分享

    下面我将详细讲解一下“又一个PHP实现的冒泡排序算法分享”的完整攻略。 前言 冒泡排序是一种简单直观的排序方法,它重复地走访过要排序的数列,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。 原理 冒泡排序的原理主要包括以下两个步骤: 比较相邻的元素,如果第一个比第二个大,就交换它们两个; 对每一对相邻元素重复执行步骤 1,直到最后一对元素。这样做…

    算法与数据结构 2023年5月19日
    00
  • PHP实现批量检测网站是否能够正常打开的方法

    以下是详细讲解“PHP实现批量检测网站是否能够正常打开的方法”的完整攻略: 步骤一:获取待检测的网站列表 首先我们需要准备一个文本文件,里面包含了我们需要检测的网站列表。每一行应该包含一个网站的URL地址,如下所示: https://www.google.com http://www.baidu.com http://www.github.com 注意:每个…

    算法与数据结构 2023年5月19日
    00
  • js算法中的排序、数组去重详细概述

    JS算法中的排序、数组去重详细概述 排序算法 在JavaScript中,常用的排序算法有冒泡排序、插入排序、选择排序、快速排序等。下面将分别对他们进行介绍。 冒泡排序 冒泡排序是一种稳定的排序算法,它的基本思想是从左到右依次比较相邻两个元素的大小,并且将较大的元素向右移动,较小的元素向左移动。重复这个过程直到没有任何元素需要移动为止。 下面是冒泡排序的Jav…

    算法与数据结构 2023年5月19日
    00
  • 数组Array的排序sort方法

    下面是关于JavaScript中数组排序sort()方法的详细攻略。 标准语法 array.sort(compareFunction) 参数 compareFunction是可选的,是用来指定按照什么顺序进行排序的,具体取决于具体实现。 如果省略,sort() 方法按照每个字符的 Unicode 代码点进行排序,因此 “10” 在排列时会在 “2” 之前,此…

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