zoukankan      html  css  js  c++  java
  • 排列组合算法的javascript实现

    命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M)

    js解法:

     1 function queue(arr, size){
     2   if(size > arr.length){ return;}
     3   var allResult = [];
     4 
     5   (function(arr, size, result){
     6     if(result.length == size){
     7       allResult.push(result);
     8     }else{
     9       for(var i =0 ,len = arr.length;i < len; i++){
    10         var newArr = [].concat(arr),
    11             curItem = newArr.splice(i,1);
    12         arguments.callee(newArr, size, [].concat(result,curItem));
    13       }
    14     }
    15   })(arr, size, []);
    16 
    17   return allResult;
    18 }
    19 
    20 
    21 function choose(arr, size ){
    22   var allResult = [];
    23 
    24   (function(arr, size, result){
    25     var arrLen = arr.length;
    26     if(size > arrLen){
    27       return;
    28     }
    29     if(size == arrLen){
    30       allResult.push([].concat(result, arr))
    31     }else{
    32       for(var i =0 ; i < arrLen; i++){
    33         var newResult = [].concat(result);
    34         newResult.push(arr[i]);
    35 
    36         if(size == 1){
    37           allResult.push(newResult);
    38         }else{
    39           var newArr = [].concat(arr);
    40           newArr.splice(0, i + 1);
    41           arguments.callee(newArr, size - 1, newResult);
    42         }
    43       }
    44     }
    45   })(arr, size, []);
    46 
    47   return allResult;
    48 }
    49 
    50 function showResult(result){
    51   console.log('The number of result sets: ' + result.length );
    52   for(var i=0 , len = result.length;i < len; i++){
    53     console.log(result[i]);
    54   }
    55 }
    56 
    57 
    58 var arr = ['姬光','王子', '三桂','科长'];
    59 
    60 showResult(choose(arr, 4));
    61 showResult(queue(arr, 4));

    个人原创,如有漏洞或建议,请留言。

  • 相关阅读:
    0121 集合类 ArrayList 的练习
    0121 有关接口的使用练习
    泛型相关知识
    0120 父类与子类创建、重写及转型练习
    0118练习 单例模式
    java设计模式 略版
    0117 面向对象OOP有关方法、类、构造方法及权限修饰符的练习
    0115 创建类并调用
    [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
    POJ1284 Primitive Roots (原根)
  • 原文地址:https://www.cnblogs.com/kaiye/p/3606373.html
Copyright © 2011-2022 走看看