Function malachite_base::vecs::random_vec_permutations
source · pub fn random_vec_permutations<T: Clone>(
seed: Seed,
xs: Vec<T>
) -> RandomVecPermutations<T> ⓘ
Expand description
Uniformly generates a random Vec
of values cloned from an original Vec
.
The permutations are Vec
s of cloned items. It may be more convenient for the iterator to
return references to a slice, in which case you may use
random_slice_permutations
instead.
The output length is infinite.
$P(p) = 1/n!$, where $n$ is xs.len()
.
Examples
use itertools::Itertools;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::vecs::random_vec_permutations;
let css: Vec<String> = random_vec_permutations(EXAMPLE_SEED, vec!['a', 'b', 'c', 'd'])
.take(20)
.map(|ds| ds.into_iter().collect())
.collect();
assert_eq!(
css.iter().map(String::as_str).collect_vec().as_slice(),
[
"cadb", "cbad", "cadb", "badc", "acdb", "cbad", "dabc", "dbca", "cdba", "cdab", "bacd",
"cabd", "adbc", "cdab", "dcab", "abcd", "abcd", "dacb", "bcad", "adcb"
]
);