• JS 实现计算获取某一集合的幂集的函数


    所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。

    对任何集合A,A的幂集P(A)={x|x⊆A}。

      (图1. 幂集产出步骤-出自《计算机科学精粹》)

    示例代码(可以用Set代替Array):

    /**
     * 获取某个集合的幂集
     */
    function getPowerSet(set) {
      // 幂集对象,
      // 初始化时,默认有1个空集(空集是任何集合的子集、任何非空集合的真子集)
      let powerSet = [[]];
    
      for (const el of set) {
        // 复制已有的集合
        const newPowerSet = copy(powerSet);
        // 并将当前元素添加到被复制的各个集合当中
        for (const item of newPowerSet) {
          item.push(el);
        }
        // 更新幂集(原幂集元素+新幂集元素)
        powerSet = [...powerSet, ...newPowerSet];
      }
    
      return powerSet;
    }
    
    /**
     * 复制集合
     */
    var copy = function(powerSet) {
      const newPowerSet = [];
      for (const set of powerSet) {
        newPowerSet.push([...set]);
      }
    
      return newPowerSet;
    };

    测试用例

    var set = ['A', 'B', 'C', 'D'];
    var output = getPowerSet(set);
    
    console.log(output);
    // Output:
    // 0: []
    // 1: ['A']
    // 2: ['B']
    // 3: (2)['A', 'B']
    // 4: ['C']
    // 5: (2)['A', 'C']
    // 6: (2)['B', 'C']
    // 7: (3)['A', 'B', 'C']
    // 8: ['D']
    // 9: (2)['A', 'D']
    // 10: (2)['B', 'D']
    // 11: (3)['A', 'B', 'D']
    // 12: (2)['C', 'D']
    // 13: (3)['A', 'C', 'D']
    // 14: (3)['B', 'C', 'D']
    // 15: (4)['A', 'B', 'C', 'D']
    // length: 16

    End

  • 相关阅读:
    implementaion bottle session with beaker
    [梦]20050802
    网站更新部署20100912
    Cherokee不值得推荐,你还是可以看一看
    最简单方法远程调试Python多进程子程序
    nginx相关的问题
    本地配置host解析的问题
    base target问题,
    在asp.net中自动合并小图片并使用css sprite显示出来
    html编辑器
  • 原文地址:https://www.cnblogs.com/fanqshun/p/16274957.html
Copyright © 2020-2023  润新知