【发布时间】:2011-10-17 13:41:53
【问题描述】:
void AlgoMMPCbar::subs(const std::vector<unsigned int>& org, const std::vector<unsigned int>& pre, size_t k, size_t n, SubSets& c){
if (n <= 1) {
for(size_t i = k; i < org.size(); i++){
std::vector<unsigned int> v(pre);// instead of printing...
v.push_back(org.at(i));
c.push_back(v);
}
} else {
size_t n1 = n - 1;
for(size_t i = k; i != org.size() - n1; i++){ //
std::vector<unsigned int> s(pre);
s.push_back(org.at(i));
subs(org,s,i+1,n1,c);
}
}
}
void AlgoMMPCbar::computeSubSets(const std::vector<unsigned int>& org, size_t& n, SubSets& c){
c.clear(); // clear previous data
std::vector<unsigned int> pre;
pre.reserve(n+1); // for performance
if (n==0)
c.push_back(pre);
else
subs(org,pre,0, n, c);
}
上述代码用于生成大小为 n 的子集以供进一步测试/处理。但我从不需要测试所有这些生成的子集(在最坏的情况下它会检查它们)。该程序的主要耗时部分是子集生成。现在我想转换上述功能以一个一个地生成子集(不是一次全部生成,所以我可以随时停止进一步的子集生成)。
请分享您的专业知识,将上述功能转换为子集.next() 等函数,以节省计算时间。
提前致谢。
【问题讨论】: