Function malachite_base::vecs::exhaustive::exhaustive_unique_vecs_min_length
source · pub fn exhaustive_unique_vecs_min_length<I: Iterator>(
min_length: u64,
xs: I,
) -> ExhaustiveUniqueVecs<I> ⓘ
Expand description
Generates Vec
s with a mininum length, with elements from a single iterator, such that each
Vec
has no repeated elements.
The source iterator should not repeat any elements, but this is not enforced.
If the input iterator is infinite, the output length is also infinite.
If the input iterator length is $n$ and the min_length
is $\ell$, the output length is
$$
\sum_ {k=\ell}^n \frac{n!}{k!}.
$$
§Examples
use itertools::Itertools;
use malachite_base::vecs::exhaustive::exhaustive_unique_vecs_min_length;
let xss = exhaustive_unique_vecs_min_length(2, 1..=4)
.take(20)
.collect_vec();
assert_eq!(
xss.iter().map(Vec::as_slice).collect_vec().as_slice(),
&[
&[1, 2][..],
&[1, 3],
&[2, 1],
&[2, 3],
&[3, 1],
&[3, 2],
&[1, 2, 3],
&[1, 2, 4],
&[1, 3, 2],
&[1, 4],
&[2, 1, 3],
&[2, 4],
&[2, 3, 1],
&[4, 1],
&[3, 1, 2],
&[3, 4],
&[3, 2, 1],
&[4, 2],
&[1, 4, 2],
&[1, 3, 4]
]
);