【发布时间】:2014-08-07 09:19:03
【问题描述】:
我正在尝试用 C++ 计算很多组合。我自己想出了以下工具,但它的效率并不令人满意。得到C-18-2(每2个18的组合)需要3秒以上,我相信这可以在更短的时间内完成。
vector<vector<int>> Mytool::combo2(int len){
MatrixXd ma = MatrixXd::Zero(len*len*len,2);
int ind = 0;
for (int i = 0 ;i<len;i++){
for (int j = 0 ;j<len;j++){
VectorXd v1(2);
v1<<i,j;
ma.row(ind) = v1;
ind++;
}
};
ind = 0;
vector<vector<int>> res;
for (int i=0;i<ma.rows();i++){
int num1 = ma(i,0);
int num2 = ma(i,1);
if (num1!=num2){
vector<int> v1;
v1.push_back(num1);
v1.push_back(num2);
sort(v1.begin(),v1.end());
if (find(res.begin(),res.end(),v1)==res.end())
res.push_back(v1);
}
}
return res;
}
任何提示或建议都会有所帮助。提前谢谢你。
【问题讨论】:
标签: c++ combinations permutation