11#ifndef PERMUTAHEDRAL_REPRESENTATION_SET_PARTITION_ITERATOR_H_
12#define PERMUTAHEDRAL_REPRESENTATION_SET_PARTITION_ITERATOR_H_
16#include <boost/range/iterator_range.hpp>
20namespace coxeter_triangulation {
28 :
public boost::iterator_facade<Set_partition_iterator, std::vector<std::vector<uint>> const,
29 boost::forward_traversal_tag> {
30 using value_t = std::vector<std::vector<uint>>;
33 friend class boost::iterator_core_access;
37 value_t
const& dereference()
const {
return value_; }
40 for (uint i = 0; i < k_; i++) value_[i].clear();
41 for (uint i = 0; i < n_; i++) value_[rgs_[i]].push_back(i);
50 while (rgs_[i] + 1 > max_[i] || rgs_[i] + 1 >= k_) i--;
57 mm += (rgs_[i] >= mm);
69 }
while (max_[i] < p);
75 : value_(k), rgs_(n, 0), max_(n + 1), is_end_(n == 0), n_(n), k_(k) {
76 max_[0] = std::numeric_limits<uint>::max();
77 for (uint i = 0; i <= n - k; ++i) value_[0].push_back(i);
78 for (uint i = n - k + 1, j = 1; i < n; ++i, ++j) {
80 value_[j].push_back(i);
82 for (uint i = 1; i <= n; i++) max_[i] = rgs_[i - 1] + 1;
90 if (n_ > 0) is_end_ =
false;
91 for (uint i = 0; i <= n_ - k_; ++i) rgs_[i] = 0;
92 for (uint i = n_ - k_ + 1, j = 1; i < n_; ++i, ++j) rgs_[i] = j;
93 for (uint i = 1; i <= n_; i++) max_[i] = rgs_[i - 1] + 1;
99 std::vector<uint> rgs_;
100 std::vector<uint> max_;
Class that allows the user to generate set partitions of a set {0,...,n-1} in k parts.
Definition: Set_partition_iterator.h:29
Gudhi namespace.
Definition: SimplicialComplexForAlpha.h:14