Function malachite_base::vecs::random::random_ordered_unique_vecs_length_range
source · [−]pub fn random_ordered_unique_vecs_length_range<I: Iterator>(
seed: Seed,
a: u64,
b: u64,
xs_gen: &dyn Fn(Seed) -> I
) -> RandomOrderedUniqueVecs<I::Item, RandomUnsignedRange<u64>, I>ⓘNotable traits for RandomOrderedUniqueVecs<T, I, J>impl<T: Ord, I: Iterator<Item = u64>, J: Iterator<Item = T>> Iterator for RandomOrderedUniqueVecs<T, I, J> type Item = Vec<T>;
where
I::Item: Ord,
Expand description
Generates random Vec
s with lengths in $[a, b)$, using elements from an iterator, where the
Vec
s have no repeated elements, and the elements are in ascending order.
The lengths of the Vec
s are sampled from a uniform distribution on $[a, b)$. $a$ must be
less than $b$.
The input iterator must generate at least $b$ distinct elements.
$$ P((x_i)_{i=0}^{n-1}, a, b) = \frac{n!}{b - a}\prod_{i=0}^{n-1}P(x_i). $$
xs_gen
must be infinite.
Panics
Panics if $a \geq b$.
Examples
extern crate itertools;
use itertools::Itertools;
use malachite_base::num::random::random_primitive_ints;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::vecs::random::random_ordered_unique_vecs_length_range;
let xs = random_ordered_unique_vecs_length_range(
EXAMPLE_SEED,
2,
5,
&random_primitive_ints::<u8>
);
let values = xs.take(20).collect_vec();
assert_eq!(
values.iter().map(Vec::as_slice).collect_vec().as_slice(),
&[
&[11, 85, 136][..],
&[134, 200, 203, 235],
&[38, 223, 235],
&[32, 162, 177, 217],
&[30, 166, 218, 234],
&[9, 90, 106],
&[204, 216],
&[97, 151, 213],
&[78, 253],
&[39, 91, 175, 191],
&[2, 170, 232, 233],
&[22, 35, 217],
&[17, 32, 114, 198],
&[65, 114, 173],
&[25, 121, 173, 222],
&[79, 115, 144, 148],
&[52, 69, 73, 137],
&[91, 153],
&[34, 95, 112, 178],
&[106, 167]
]
);