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();
|
||||
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 {
|
||||
let (ngrams, freqs) = ngram_freqs(n, &src, &mut table);
|
||||
let bits = entropy(freqs);
|
||||
|
|
@ -19,17 +19,17 @@ fn main() {
|
|||
}
|
||||
}
|
||||
|
||||
fn ngram_freqs(
|
||||
fn ngram_freqs<'a>(
|
||||
n: usize,
|
||||
src: &[u8],
|
||||
counts: &mut HashMap<Box<[u8]>, u64>,
|
||||
src: &'a [u8],
|
||||
counts: &mut HashMap<&'a [u8], u64>,
|
||||
) -> (usize, impl Iterator<Item = f64>) {
|
||||
assert!(n > 0);
|
||||
|
||||
counts.clear();
|
||||
|
||||
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();
|
||||
|
|
|
|||
Loading…
Reference in a new issue