想象一下,我们有一个只有唯一值的向量,并且想要生成所有对。这样做的算法是:
vector< int > data;
// ... pushback some data
vector< vector< int > > pairs;
for( size_t i = 0; i < data.size() - 1; ++i )
{
for( size_t j = i + 1; j < data.size(); ++j )
{
vector< int > pair;
pair.push_back( data[i] );
pair.push_back( data[j] );
pairs.push_back( pair );
}
}
现在,对于三元组,算法更改为:
vector< int > data;
// ... pushback some data
vector< vector< int > > triples;
for( size_t i = 0; i < data.size() - 2; ++i )
{
for( size_t j = i + 1; j < data.size() - 1; ++j )
{
for( size_t k = j + 1; k < data.size(); ++k )
{
vector< int > triple;
triple.push_back( data[i] );
triple.push_back( data[j] );
triple.push_back( data[k] );
triples.push_back( triple );
}
}
}
为四元组和其他元组类型编写代码相当容易。
有人可以告诉我如何实现生成各种元组的通用算法吗?既然我们在这里,我如何计算给定向量中元素数量的元组数量?对于对,公式为 n(n-1)/2。
谢谢!