Implementieren eines kartesischen Vektorprodukts mit Rekursion und Iteration
Sie haben einen Vektor aus Vektorelementen unterschiedlicher Größe und möchten ein kartesisches Produkt generieren Produkt ihrer Elemente.
Zunächst kann ein rekursiver Ansatz verwendet werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | void cart_product(
Vvi& rvvi,
Vi& rvi,
Vvi::const_iterator me,
Vvi::const_iterator end )
{
if (me == end ) {
rvvi.push_back(rvi);
return ;
}
const Vi& mevi = *me;
for (Vi::const_iterator it = mevi.begin(); it != mevi. end (); it++) {
rvi.push_back(*it);
cart_product(rvvi, rvi, me + 1, end );
rvi.pop_back();
}
}
|
Nach dem Login kopieren
Betrachten Sie nun den iterativen Ansatz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | void cart_product(
Vvi& out,
Vvi& in)
{
Vd vd;
for (Vvi::const_iterator it = in.begin(); it != in. end (); ++it) {
Digits d = {(*it).begin(), (*it). end (), (*it).begin()};
vd.push_back(d);
}
while (1) {
Vi result;
for (Vd::const_iterator it = vd.begin(); it != vd. end (); it++) {
result.push_back(*(it->me));
}
out.push_back(result);
for (Vd::iterator it = vd.begin(); ; ) {
++(it->me);
if (it->me == it-> end ) {
if (it + 1 == vd. end ()) {
return ;
} else {
it->me = it->begin;
++it;
}
} else {
break ;
}
}
}
}
|
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonWie implementiert man ein kartesisches Produkt von Vektoren mithilfe von Rekursion und Iteration?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!