From 62fa7ccd41bc7ea47783b23bb5ed0d6d60fcec5d Mon Sep 17 00:00:00 2001 From: mehbark Date: Thu, 16 Apr 2026 12:58:31 -0400 Subject: [PATCH] avoid creating intermediate hashmap --- src/main.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 1a2fe33..5c68322 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,12 +10,12 @@ fn main() { for n in 1..=20 { let freqs = ngram_freqs(n, &src); - let bits = entropy(freqs.values().copied()); + let bits = entropy(freqs); println!("{n:2}: {bits:6.3} bits, {:.3} bits/letter", bits / n as f64); } } -fn ngram_freqs(n: usize, src: &[u8]) -> HashMap, f64> { +fn ngram_freqs(n: usize, src: &[u8]) -> impl Iterator { assert!(n > 0); let mut counts: HashMap, u64> = HashMap::new(); @@ -27,9 +27,8 @@ fn ngram_freqs(n: usize, src: &[u8]) -> HashMap, f64> { let total_count: u64 = counts.values().sum(); counts - .into_iter() - .map(|(k, v)| (k, v as f64 / total_count as f64)) - .collect() + .into_values() + .map(move |p| p as f64 / total_count as f64) } fn entropy(probs: impl Iterator) -> f64 {