From 9edf0bea990801a6a98c566c396b2df72e9d06f0 Mon Sep 17 00:00:00 2001
From: "Brady J. Garvin" <bgarvin@cse.unl.edu>
Date: Sat, 29 Oct 2022 13:10:54 -0500
Subject: [PATCH] Implemented the greedy algorithm for the encoding problem.
---
.../src/features/encoding/solver.js | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/greedy-algorithms/src/features/encoding/solver.js b/greedy-algorithms/src/features/encoding/solver.js
index 7c7344b..ffa56ad 100644
--- a/greedy-algorithms/src/features/encoding/solver.js
+++ b/greedy-algorithms/src/features/encoding/solver.js
@@ -1,8 +1,25 @@
+import { PriorityQueue } from './collections.js';
+
export function findEncoding(frequencies) {
const results = new Map();
+ const partitioning = new PriorityQueue();
for (const [meaning, frequency] of frequencies) {
results.set(meaning, '');
+ partitioning.insert(new Set([meaning]), frequency);
+ }
+ while (partitioning.size > 1) {
+ const [firstMeaningSet, firstFrequency] = partitioning.remove();
+ const [secondMeaningSet, secondFrequency] = partitioning.remove();
+ for (const meaning of firstMeaningSet) {
+ results.set(meaning, `0${results.get(meaning)}`);
+ }
+ for (const meaning of secondMeaningSet) {
+ results.set(meaning, `1${results.get(meaning)}`);
+ }
+ partitioning.insert(
+ new Set([...firstMeaningSet, ...secondMeaningSet]),
+ firstFrequency + secondFrequency,
+ );
}
- // TODO: stub
return results;
}
--
GitLab