Skip to content
Snippets Groups Projects
Select Git revision
  • 3cc1d021ead7be62531da5a225d3cda70c4fa185
  • main default protected
  • solution
3 results

solver.js

Blame
  • Forked from CSCE 310 / Greedy Algorithms
    1 commit behind, 2 commits ahead of the upstream repository.
    solver.js 853 B
    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,
        );
      }
      return results;
    }