Published
Edited
May 12, 2022
3 stars
Chandrupatla’s root-finding methodSidi’s root-finding methodRegular numbersDruidJS workerNatural breaksDistance to a segmentRay out of a convex hullWord Tour: 40k words and their friendsHello, @thi.ng/grid-iteratorsHead/tail breaksPseudo-blue noise shaderHow fast does walk-on-spheres converge?AoC 12: shortest path under constraintsKDE estimationPlot: Correlation heatmapPoisson Finish 2Poisson disk sampling functionsWoS with transport
Simple and surprising sort
Local medianTime series topological subsamplingUnion-FindLevel set experiment 1Mean value coordinatesPoisson potentialMiddle-squareWorld of squares (spherical)World of squaresLargest Inscribed SquareHello, PyWaveletsGeothmetic meandianHello, Reorder.jsGeometric MedianImage FFTTransport to a mapDisc TransportTP3: Power Diagram and Semi-Discrete Optimal TransportThe blue waveHello, genetic-jsSliced Optimal TransportDruidJSSelf-Organizing Maps meet DelaunayHello, polygon-clippingseedrandom, minimalWalk on Spheres 2Walk on SpheresHello, AutoencoderKaprekar’s numberVoronoiMap2DHello, ccwt.jsPolygon TriangulationQuantile.invert?Linear congruential generatorHue blurNeedle in a haystackMoving average blurApollo 11 implementation of trigonometric functions, by Margaret H. Hamilton (march 1969)2D curves intersectionThe 2D approximate Newton-Raphson methodInverting Lee’s Tetrahedral projectionLinde–Buzo–Gray stipplingMean shift clustering with kd-tree2D point distributionsShortest pathKahan SummationHello, delatinDijkstra’s algorithm in gpu.jsLloyd’s relaxation on a graphManhattan DiameterManhattan VoronoiMobility landscapes — an introductionDijkstra’s shortest-path treeH3 odditiesProtein MatrixConvex Spectral WeightsSort stuff by similarityKrigingDelaunay.findTrianglen-dimensions binning?Travelling with a self-organizing mapUMAP-o-MaticMNIST & UMAP-jsHello UMAP-jsMean shift clusteringLevenshtein transitionRd quasi-random sequencesAutomated label placement (countries)Phyllotaxis explainedMotionrugsPlanar hull (Andrew’s monotone chain algorithm)South Africa’s medial axisTravelling salesperson approximation with t-SNEDistance to shoreWorkerngraph: pagerank, louvain…t-SNE VoronoiCloud ContoursCircular function drawingKruskal MazeMyceliumTravelling salesperson approximation on the globe, with t-SNEtsne.jstsne.js & worker
Insert cell
Insert cell
function SimpleAndSurprisingSort(A) {
A = A.slice();
const n = A.length;

for (let i = 0; i < n; ++i) {
for (let j = 0; j < n; ++j) {
if (A[i] < A[j]) {
[A[j], A[i]] = [A[i], A[j]]; // swap
}
}
}

return A;
}
Insert cell
SimpleAndSurprisingSort(Array.from({ length: 10 }, Math.random))
Insert cell
Insert cell
(replay, VisualizeSimpleAndSurprisingSort(d3.shuffle(d3.range(18))))
Insert cell
function VisualizeSimpleAndSurprisingSort(A) {
A = A.slice();
const n = A.length;

let steps = A.slice();
const swaps = [];

for (let i = 0; i < n; ++i) {
for (let j = 0; j < n; ++j) {
if (A[i] < A[j]) {
[A[j], A[i]] = [A[i], A[j]];
swaps.push({ i, j });
steps = steps.concat(A.slice());
}
}
}

return Plot.plot({
marks: [
Plot.cell(steps, {
x: (d, g) => g % n,
y: (d, g) => Math.floor(g / n),
fill: steps,
stroke: steps
}),
Plot.arrow(swaps, {
x1: "i",
x2: "j",
y: (d, t) => t
})
],
axis: null,
x: { padding: 0 },
y: { padding: 0 },
color: { scheme: "warm" }
});
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more