From a886cf35f7f7017f64beb6e420077f1e4f550a78 Mon Sep 17 00:00:00 2001 From: Frederic Langlet Date: Thu, 18 Jan 2024 15:42:37 -0800 Subject: [PATCH] A few perf tweaks --- java/src/main/java/kanzi/entropy/EntropyUtils.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/kanzi/entropy/EntropyUtils.java b/java/src/main/java/kanzi/entropy/EntropyUtils.java index 595b7722..28875c57 100644 --- a/java/src/main/java/kanzi/entropy/EntropyUtils.java +++ b/java/src/main/java/kanzi/entropy/EntropyUtils.java @@ -200,7 +200,7 @@ public static int normalizeFrequencies(int[] freqs, int[] alphabet, int totalFre { final int delta = (int) (sumScaledFreq-scale); - if (Math.abs(delta) * 20 < freqs[idxMax]) + if (Math.abs(delta) * 10 < freqs[idxMax]) { // Fast path (small error): just adjust the max frequency (or fallback to the slow path) if (freqs[idxMax] > delta) @@ -211,15 +211,21 @@ public static int normalizeFrequencies(int[] freqs, int[] alphabet, int totalFre } // Slow path: spread error across frequencies - final int inc = (sumScaledFreq > scale) ? -1 : 1; + final int inc = (delta > 0) ? -1 : 1; LinkedList queue = new LinkedList<>(); for (int i=0; i= 2) // Do not distort small frequencies queue.add(new FreqSortData(freqs, alphabet[i])); } + if (queue.isEmpty()) + { + freqs[idxMax] -= delta; + return alphabetSize; + } + Collections.sort(queue); while (sumScaledFreq != scale)