don't allocate ngrams on the heap (lol)
This commit is contained in:
parent
c3c60e38dd
commit
c92d9d99a2
1 changed files with 5 additions and 5 deletions
10
src/main.rs
10
src/main.rs
|
|
@ -8,7 +8,7 @@ fn main() {
|
||||||
let mut src = Vec::new();
|
let mut src = Vec::new();
|
||||||
io::stdin().read_to_end(&mut src).unwrap();
|
io::stdin().read_to_end(&mut src).unwrap();
|
||||||
|
|
||||||
let mut table: HashMap<Box<[u8]>, u64> = HashMap::new();
|
let mut table: HashMap<&[u8], u64> = HashMap::new();
|
||||||
for n in 1..=20 {
|
for n in 1..=20 {
|
||||||
let (ngrams, freqs) = ngram_freqs(n, &src, &mut table);
|
let (ngrams, freqs) = ngram_freqs(n, &src, &mut table);
|
||||||
let bits = entropy(freqs);
|
let bits = entropy(freqs);
|
||||||
|
|
@ -19,17 +19,17 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ngram_freqs(
|
fn ngram_freqs<'a>(
|
||||||
n: usize,
|
n: usize,
|
||||||
src: &[u8],
|
src: &'a [u8],
|
||||||
counts: &mut HashMap<Box<[u8]>, u64>,
|
counts: &mut HashMap<&'a [u8], u64>,
|
||||||
) -> (usize, impl Iterator<Item = f64>) {
|
) -> (usize, impl Iterator<Item = f64>) {
|
||||||
assert!(n > 0);
|
assert!(n > 0);
|
||||||
|
|
||||||
counts.clear();
|
counts.clear();
|
||||||
|
|
||||||
for ngram in src.windows(n) {
|
for ngram in src.windows(n) {
|
||||||
*counts.entry(Box::from(ngram)).or_default() += 1;
|
*counts.entry(ngram).or_default() += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
let total_count: u64 = counts.values().sum();
|
let total_count: u64 = counts.values().sum();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue