如何在 C++ 中创建一个算法来在不重复的情况下查找集合的变体(即 n 个元素,选择 k)?

例如,(n = 3, k = 2)我已经设置{1, 2, 3}并且我需要我的算法来找到:{1, 2}, {1, 3}, {2, 1}, {2, 3}, {3, 1}, {3, 2}

我能够用 制作一个算法next_permutation,但它的工作速度非常慢n = 10, k = 4(这是我需要的)。

这是我的代码:

#include <iostream>
#include <algorithm>

#define pb push_back

using namespace std;

int main() {
    vector <int> s = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int k = 4; // (n = 10, k = 4)
    map <string, int> m; // To check if we already have that variation

    vector <string> v; // Variations
    do {
        string str = "";
        for (int i = 0; i < k; i++) str += to_string(s[i]);
        if (m[str] == 0) {
            m[str] = 1;
            v.pb(str);
        }
    } while (next_permutation(s.begin(), s.end()));

    return 0;
}

我怎样才能制作一个更快的算法?

管理层收购

此代码按字典顺序从 n 生成 k 个项目的排列,为简单起见打包成整数(因此 153 对应于 (1,5,3))

void GenArrangement(int n, int k, int idx, int used, int arran) {
    if (idx == k) {
        std::cout << arran << std::endl;
        return;
    }

    for (int i = 0; i < n; i++) 
        if (0 == (used & (1 << i))) 
            GenArrangement(n, k, idx + 1, used | (1 << i), arran * 10 + (i + 1));
}

int main()
{
    GenArrangement(5, 3, 0, 0, 0);
}

123 124 125 132 134 135 142 143 145 152 153 154 213 214 215 231 234 235 241 243 245 251 253 254 312 314 315 321 324 325 341 342 345 351 352 354 412 413 415 421 423 425 431 432 435 451 452 453 512 513 514 521 523 524 531 532 534 541 542 543

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在XPath中选择一个空元素?

来自分类Dev

如何在XPath中选择一个空元素?

来自分类Dev

如何从n个元素中找到k个置换的索引?

来自分类Dev

如何在代码接收中选择第n个元素

来自分类Dev

从mapreduce的n个元素中选择k

来自分类Dev

如何在XPath中选择前n个元素

来自分类Dev

如何用N个大小对向量的k个第一个元素进行randperm

来自分类Dev

如何从JavaPairRDD中选择前N个元素?-Apache Spark

来自分类Dev

所有可能组合的最快解决方案,在k> 2和n大的情况下,从n个可能的元素中取出k个元素

来自分类Dev

如何在CSS中的每个第n个元素之后选择一组元素?

来自分类Dev

如何理解以下实现算法以从n返回k个元素的所有组合的C#linq代码

来自分类Dev

如何选择空间有限的最少N个元素?

来自分类Dev

如何在指令中正确选择一个元素?

来自分类Dev

如何在C ++中找到向量的第m个和第n个元素之间的max元素?

来自分类Dev

如何在不重复的情况下将多个data.frame中的向量集集成为一个?

来自分类Dev

如何检查一个元素是否存在,以使其在C#的控件集合中不重复?

来自分类Dev

C ++如何在n个元素的一维数组中查找最小值和最大值?

来自分类Dev

如何在C ++中创建一个'n'大小的数组?

来自分类Dev

给定长度为n的列表,请使用C#选择k个随机元素

来自分类Dev

如何创建一组包含k个和平的n个元素的变体?

来自分类Dev

nCk的函数从python中的n列表中选择了k个元素

来自分类Dev

如何从n个元素中找到k个置换的索引?

来自分类Dev

如何在不对列表进行排序的情况下找到列表的第k个最小元素?

来自分类Dev

如何选择前N个元素?

来自分类Dev

如何选择具有最大第 n 个元素的向量

来自分类Dev

如何在不重新创建 Map 的情况下从 ES6 Map 对象中删除前 N 个项目?

来自分类Dev

考虑到数组未排序且 n 是数组的大小,如何在 nk 个比较中找到 k 个最小元素之一

来自分类Dev

如何从 K 个对象中随机选择少于 N 个对象?

来自分类Dev

如何在没有整数溢出的情况下找到 n%(k*k)?

Related 相关文章

  1. 1

    如何在XPath中选择一个空元素?

  2. 2

    如何在XPath中选择一个空元素?

  3. 3

    如何从n个元素中找到k个置换的索引?

  4. 4

    如何在代码接收中选择第n个元素

  5. 5

    从mapreduce的n个元素中选择k

  6. 6

    如何在XPath中选择前n个元素

  7. 7

    如何用N个大小对向量的k个第一个元素进行randperm

  8. 8

    如何从JavaPairRDD中选择前N个元素?-Apache Spark

  9. 9

    所有可能组合的最快解决方案,在k> 2和n大的情况下,从n个可能的元素中取出k个元素

  10. 10

    如何在CSS中的每个第n个元素之后选择一组元素?

  11. 11

    如何理解以下实现算法以从n返回k个元素的所有组合的C#linq代码

  12. 12

    如何选择空间有限的最少N个元素?

  13. 13

    如何在指令中正确选择一个元素?

  14. 14

    如何在C ++中找到向量的第m个和第n个元素之间的max元素?

  15. 15

    如何在不重复的情况下将多个data.frame中的向量集集成为一个?

  16. 16

    如何检查一个元素是否存在,以使其在C#的控件集合中不重复?

  17. 17

    C ++如何在n个元素的一维数组中查找最小值和最大值?

  18. 18

    如何在C ++中创建一个'n'大小的数组?

  19. 19

    给定长度为n的列表,请使用C#选择k个随机元素

  20. 20

    如何创建一组包含k个和平的n个元素的变体?

  21. 21

    nCk的函数从python中的n列表中选择了k个元素

  22. 22

    如何从n个元素中找到k个置换的索引?

  23. 23

    如何在不对列表进行排序的情况下找到列表的第k个最小元素?

  24. 24

    如何选择前N个元素?

  25. 25

    如何选择具有最大第 n 个元素的向量

  26. 26

    如何在不重新创建 Map 的情况下从 ES6 Map 对象中删除前 N 个项目?

  27. 27

    考虑到数组未排序且 n 是数组的大小,如何在 nk 个比较中找到 k 个最小元素之一

  28. 28

    如何从 K 个对象中随机选择少于 N 个对象?

  29. 29

    如何在没有整数溢出的情况下找到 n%(k*k)?

热门标签

归档