
现在我想计算 80 里面取 20 个数的所有组合可能, 这个数据量比较大, 计算比较耗时, 享用多线程计算应该会快, 但是不知到多线程怎么写这个程序
https://stackoverflow.com/questions/9430568/generating-combinations-n-c
计算方法参考的这个链接
#include <iostream> #include <algorithm> #include <vector> int main() { int n, r; std::cin >> n; std::cin >> r; std::vector<bool> v(n); std::fill(v.end() - r, v.end(), true); do { for (int i = 0; i < n; ++i) { if (v[i]) { std::cout << (i + 1) << " "; } } std::cout << "\n"; } while (std::next_permutation(v.begin(), v.end())); return 0; } 1 ChaosesIb 2022-04-09 20:02:08 +08:00 什么场景?如果不需要立即求值的话可以写个迭代器 |
2 caidaoli 2022-04-09 22:34:55 +08:00 你耗时主要在 std::cout 上,用一个变量存储,组合完成再输出 |
3 helloworld000 2022-04-09 22:49:09 +08:00 你主要的耗时是一个个打印 但是你也没办法把所有结果一次存内存里,C(80, 20) 太大了 每 100,000 就结果写进 disk ,然后清空 vector 或者 string 可以试试 |
4 helloworld000 2022-04-09 22:49:34 +08:00 同 ls ,迭代器是最好的选择 |
5 cwaken 2022-04-10 11:14:49 +08:00 via iPhone 有一个双线程方法,利用头尾指针那套思维 |
6 woshichuanqilz OP @ChaosesIb 我有一个表格里面有 80 行数据,我想把里面所有取二十行情况都列出来。满足条件的就保存下来。 这个迭代器的写法能不能给点提示? |
7 kilasuelika 2022-04-11 09:50:45 +08:00 via Android C(80,20)的量级是 2 的 6 1 次方左右,你 |
8 kilasuelika 2022-04-11 09:51:28 +08:00 via Android C(80,20)的量级是 2 的 61 次方左右,你确信能遍历所有可能性吗? |
9 aloxaf 2022-04-11 11:04:17 +08:00 @woshichuanqilz #6 你这是典型的 X-Y 问题,建议描述一下你的原始需求 |