Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
46
Task/Knuths-algorithm-S/Rust/knuths-algorithm-s.rust
Normal file
46
Task/Knuths-algorithm-S/Rust/knuths-algorithm-s.rust
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
use rand::{Rng,weak_rng};
|
||||
|
||||
struct SofN<R: Rng+Sized, T> {
|
||||
rng: R,
|
||||
sample: Vec<T>,
|
||||
i: usize,
|
||||
n: usize,
|
||||
}
|
||||
|
||||
impl<R: Rng, T> SofN<R, T> {
|
||||
fn new(rng: R, n: usize) -> Self {
|
||||
SofN{rng, sample: Vec::new(), i: 0, n}
|
||||
}
|
||||
|
||||
fn add(&mut self, item: T) {
|
||||
self.i += 1;
|
||||
if self.i <= self.n {
|
||||
self.sample.push(item);
|
||||
} else if self.rng.gen_range(0, self.i) < self.n {
|
||||
self.sample[self.rng.gen_range(0, self.n)] = item;
|
||||
}
|
||||
}
|
||||
|
||||
fn sample(&self) -> &Vec<T> {
|
||||
&self.sample
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn main() {
|
||||
const MAX: usize = 10;
|
||||
let mut bin: [i32; MAX] = Default::default();
|
||||
for _ in 0..100000 {
|
||||
let mut s_of_n = SofN::new(weak_rng(), 3);
|
||||
|
||||
for i in 0..MAX { s_of_n.add(i); }
|
||||
|
||||
for s in s_of_n.sample() {
|
||||
bin[*s] += 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (i, x) in bin.iter().enumerate() {
|
||||
println!("frequency of {}: {}", i, x);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue