VarIds ElimGraph::getEliminationOrder ( const Factors& factors, VarIds excludedVids) { if (elimHeuristic == ElimHeuristic::SEQUENTIAL) { VarIds allVids; Factors::const_iterator first = factors.begin(); Factors::const_iterator end = factors.end(); for (; first != end; ++first) { Util::addToVector (allVids, (*first)->arguments()); } TinySet<VarId> elimOrder (allVids); elimOrder -= TinySet<VarId> (excludedVids); return elimOrder.elements(); } ElimGraph graph (factors); return graph.getEliminatingOrder (excludedVids); }
inline size_t divisors_count(const Factors &factors) { return std::accumulate(factors.begin(), factors.end(), (size_t)1, [](size_t a, Factor b) { return a * (b.count + 1); }); }