The linear assignment problem
LAP-JV
import greenlet from "npm:greenlet";
import {queue} from "../components/queue.js";
const lapjv = import.meta.resolve("../components/lap-jv.js");
const solve = queue((data) =>
greenlet(async (data, lapjv) => {
const {lap} = await import(lapjv);
const n = data.length;
const m = Math.ceil(Math.sqrt(n));
const costs = data.map((d) =>
data.map((_, k) => {
const i = k % m;
const j = (k - i) / m;
const dx = d[0] - i - 0.5;
const dy = d[1] - j - 0.5;
return dx * dx + dy * dy;
})
);
const t = performance.now();
const {row} = lap(n, costs);
console.warn("lap", n, performance.now() - t);
return row;
})(data, lapjv));
We’re using greenlet and a queue to make computations happen in the background with a web worker.