• C++组合数(combination)的实现


    实现:

    (nm)

    • 既需要计算组合的总数 (32)=3
    • 也需要分别获得每一种组合的情形,用于穷举搜索;
      • 1, 2; 1, 3; 2, 3

    1. 递归实现

    // picked + toPick == m
    void comb(int n, vector<int>& picked, int toPick){
        if (toPick == 0) { printPicked(picked); return; }
        int smallest = picked.empty() ? 0 : picked.back() + 1;
        for (int next = smallest; next < n; ++next){
            picked.push_back(next);
            comb(n, picked, toPick-1);
            picked.pop_back();
                                    // 关键!!!
        }
    }

    对于 (42) 而言,四个之中选 2 个,调用端代码如下,

    vector<int> picked;             // 开始为空;
    comb(4, picked, 2);
                                    // 第一个参数表示 n = 4,第三个参数表示 m=2

    最终的输出结果为:

    0 1
    0 2
    0 3
    1 2
    1 3
    2 3

    也即,

    • 0 先进数组,1 再进数组 ⇒ toPick == 0, 输出 (0, 1)
    • 1 出数组,2 进数组 ⇒ toPick == 0, 输出 (0, 2)
    • 2 出数组,3 进数组 ⇒ toPick == 0, 输出 (0, 3)
    • 3 出数组,0 出数组 ⇒ next ⇒ 1
  • 相关阅读:
    Zookeeper zkCli.sh常用命令
    windows 服务
    Zookeeper的下载安装
    Zookeeper 基础知识
    在Java中使用Redis
    Redis 集群(cluster)
    Redis 哨兵(Sentinel)机制
    Redis 主从复制
    Redis 发布/订阅
    Redis 事务
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423899.html
Copyright © 2020-2023  润新知