现在我想计算 80 里面取 20 个数的所有组合可能, 这个数据量比较大, 计算比较耗时, 享用多线程计算应该会快, 但是不知到多线程怎么写这个程序
https://stackoverflow.com/questions/9430568/generating-combinations-in-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 351 天前
什么场景?如果不需要立即求值的话可以写个迭代器
|
2
caidaoli 350 天前
你耗时主要在 std::cout 上,用一个变量存储,组合完成再输出
|
![]() |
3
helloworld000 350 天前
你主要的耗时是一个个打印
但是你也没办法把所有结果一次存内存里,C(80, 20) 太大了 每 100,000 就结果写进 disk ,然后清空 vector 或者 string 可以试试 |
![]() |
4
helloworld000 350 天前
同 ls ,迭代器是最好的选择
|
5
cwaken 350 天前 via iPhone
有一个双线程方法,利用头尾指针那套思维
|
![]() |
6
woshichuanqilz OP @ChaosesIb 我有一个表格里面有 80 行数据,我想把里面所有取二十行情况都列出来。满足条件的就保存下来。
这个迭代器的写法能不能给点提示? |
7
kilasuelika 349 天前 via Android
C(80,20)的量级是 2 的 6
1 次方左右,你 |
8
kilasuelika 349 天前 via Android
C(80,20)的量级是 2 的 61 次方左右,你确信能遍历所有可能性吗?
|
9
aloxaf 349 天前
@woshichuanqilz #6 你这是典型的 X-Y 问题,建议描述一下你的原始需求
|