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のサブセットを生成するために使用されました。しかし、これらの生成されたサブセットをすべてテストする必要はありません(最悪の場合は、すべてをチェックします)。プログラムの主要な時間はサブセットの生成です。今私は上記の機能を1つずつサブセットを生成するように変換したい(一度にすべてではないので、いつでもサブセットの生成を止めることができます)。複雑さを軽減するために、サイズnのサブセットを1つずつ生成するには?
計算時間を節約するために、上記の機能をsubset.next()のような関数に変換する専門知識を共有してください。
ありがとうございます。
生成されたサブセットは独立性テストに使用されます。サブセット(i)で独立性が見つかった場合は、さらにサブセットを確認する必要はありません。最初にすべてのサブセットを生成してからテストを開始すると、時間がかかります。ですから、時間を節約するためにサブセットを1つずつ生成したいと思います。 – DataMiner