{ "cells": [ { "cell_type": "markdown", "id": "facf65bc", "metadata": {}, "source": [ "\n", "# FYSS5120 Efficient Numerical Programming — Demo 1 solution\n", "\n", "## Closest pairs, neighbour searches, timing, memory, and complexity\n", "\n", "\n", "1. **algorithmic complexity**,\n", "2. **implementation overhead / constant factors**, and\n", "3. **memory complexity and data movement**.\n", "\n", "The same geometric problem is treated with several approaches:\n", "\n", "- pure Python double loop,\n", "- NumPy broadcasting,\n", "- SciPy `cKDTree`,\n", "- fixed-cutoff neighbour search,\n", "- simple cell lists,\n", "- optional periodic boundary conditions.\n", "\n", "\n", "> **First improve the algorithm, then optimize its implementation.**\n", "\n", "All timings are machine-dependent. The important quantities are the *scaling trends*, not the absolute seconds.\n" ] }, { "cell_type": "code", "execution_count": 28, "id": "e14e4b29", "metadata": {}, "outputs": [], "source": [ "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from time import perf_counter\n", "from scipy.spatial import cKDTree\n", "\n", "rng = np.random.default_rng(12345)\n" ] }, { "cell_type": "markdown", "id": "ab74b0a3", "metadata": {}, "source": [ "\n", "## 1. Generate particles\n", "\n", "We use random points in the two-dimensional unit square,\n", "\n", "$$\n", "\\mathbf r_i=(x_i,y_i), \\qquad 0\\le x_i,y_i<1.\n", "$$\n", "\n", "For two points,\n", "\n", "$$\n", "d_{ij}=\\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}.\n", "$$\n", "\n", "For closest-pair comparisons it is usually better to compare \\(d^2\\) and evaluate the square root only once at the end.\n" ] }, { "cell_type": "code", "execution_count": 29, "id": "2c39e711", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.22733602, 0.31675834],\n", " [0.79736546, 0.67625467],\n", " [0.39110955, 0.33281393],\n", " [0.59830875, 0.18673419],\n", " [0.67275604, 0.94180287]])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "def make_points(N, seed=12345):\n", " rng = np.random.default_rng(seed)\n", " return rng.random((N, 2))\n", "\n", "r = make_points(100)\n", "r[:5]\n" ] }, { "cell_type": "markdown", "id": "dede5456", "metadata": {}, "source": [ "\n", "## 2. Several distance functions\n", "\n", "Before optimizing the search, it is useful to distinguish the **distance definition** from the **search algorithm**.\n", "\n", "For two 2D points \\(a\\) and \\(b\\):\n", "\n", "- squared Euclidean distance:\n", " $$\n", " d_2^2=(a_x-b_x)^2+(a_y-b_y)^2,\n", " $$\n", "- Euclidean distance:\n", " $$\n", " d_2=\\sqrt{d_2^2},\n", " $$\n", "- Manhattan distance:\n", " $$\n", " d_1=|a_x-b_x|+|a_y-b_y|.\n", " $$\n", "\n", "For finding the smallest Euclidean distance, minimizing $d_2^2$ gives exactly the same pair as minimizing $d_2$, but avoids one square root per tested pair.\n" ] }, { "cell_type": "code", "execution_count": 30, "id": "b6b995a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "squared Euclidean: 0.25\n", "Euclidean: 0.5\n", "Manhattan: 0.7\n" ] } ], "source": [ "\n", "def dist2_squared(a, b):\n", " d = a - b\n", " return d[0]*d[0] + d[1]*d[1]\n", "\n", "def dist2(a, b):\n", " return np.sqrt(dist2_squared(a, b))\n", "\n", "def dist1(a, b):\n", " d = np.abs(a - b)\n", " return d[0] + d[1]\n", "\n", "a = np.array([0.1, 0.2])\n", "b = np.array([0.4, 0.6])\n", "\n", "print(\"squared Euclidean:\", dist2_squared(a, b))\n", "print(\"Euclidean: \", dist2(a, b))\n", "print(\"Manhattan: \", dist1(a, b))\n" ] }, { "cell_type": "markdown", "id": "8a661aa3", "metadata": {}, "source": [ "Changing `sqrt(dx*dx + dy*dy)` to `dx*dx + dy*dy` can give a constant-factor speedup, but it does **not** change the Big-O complexity." ] }, { "cell_type": "markdown", "id": "746c7f39", "metadata": {}, "source": [ "\n", "## 3. Naive closest-pair search in Python\n", "\n", "There are\n", "\n", "$$\n", "{N\\choose2}=\\frac{N(N-1)}{2}\n", "$$\n", "\n", "distinct pairs. The straightforward algorithm checks every pair once.\n", "\n", "Expected complexity of computing time and memory:\n", "\n", "$$\n", "T(N)=O(N^2), \\qquad M_{\\rm extra}(N)=O(1).\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 31, "id": "bac46576", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(15, 71, np.float64(0.007688193400863654))" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "def closest_pair_python(r):\n", " N = len(r)\n", " d2min = np.inf\n", " imin = jmin = -1\n", "\n", " for i in range(N):\n", " xi, yi = r[i]\n", " for j in range(i + 1, N):\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " d2 = dx*dx + dy*dy\n", " if d2 < d2min:\n", " d2min = d2\n", " imin, jmin = i, j\n", "\n", " return imin, jmin, np.sqrt(d2min)\n", "\n", "closest_pair_python(r)\n" ] }, { "cell_type": "markdown", "id": "2648b5c4", "metadata": {}, "source": [ "\n", "### Variant: unnecessarily evaluating the square root\n", "\n", "This version does the same $O(N^2)$ pair search, but evaluates a square root in the inner loop.\n", "\n", "Two algorithms can have identical asymptotic complexity but noticeably different execution times.\n" ] }, { "cell_type": "code", "execution_count": 32, "id": "882b442d", "metadata": {}, "outputs": [], "source": [ "\n", "def closest_pair_python_sqrt(r):\n", " N = len(r)\n", " dmin = np.inf\n", " imin = jmin = -1\n", "\n", " for i in range(N):\n", " xi, yi = r[i]\n", " for j in range(i + 1, N):\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " d = np.sqrt(dx*dx + dy*dy)\n", " if d < dmin:\n", " dmin = d\n", " imin, jmin = i, j\n", "\n", " return imin, jmin, dmin\n" ] }, { "cell_type": "markdown", "id": "318cc131", "metadata": {}, "source": [ "\n", "## 4. Timing helpers\n", "\n", "For short examples, repeated timings with the median are sufficient.\n", "\n", "For a power law\n", "\n", "$$\n", "t(N)\\propto N^p,\n", "$$\n", "\n", "we have\n", "\n", "$$\n", "\\log t = p\\log N + c.\n", "$$\n", "\n", "Therefore the slope of a log-log fit gives an empirical estimate of $p$.\n", "\n", "A useful *local* estimate between two consecutive sizes is\n", "\n", "$$\n", "p_{\\rm local}\n", "=\n", "\\frac{\\log(t_2/t_1)}{\\log(N_2/N_1)}.\n", "$$\n", "\n", "For doubling, $N_2=2N_1 $,\n", "\n", "$$\n", "p_{\\rm local}=\\log_2(t_2/t_1).\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 33, "id": "b0e37bb0", "metadata": {}, "outputs": [], "source": [ "\n", "def median_time(func, *args, repeat=3):\n", " times = []\n", " answer = None\n", " for _ in range(repeat):\n", " t0 = perf_counter()\n", " answer = func(*args)\n", " times.append(perf_counter() - t0)\n", " return float(np.median(times)), answer\n", "\n", "def empirical_exponent(N_values, times):\n", " N_values = np.asarray(N_values, dtype=float) # make sure N_values is a numpy array of floats \n", " times = np.asarray(times, dtype=float) # make sure times is a numpy array of floats\n", " return np.polyfit(np.log(N_values), np.log(times), 1)[0]\n", "\n", "def local_exponents(N_values, times):\n", " N_values = np.asarray(N_values, dtype=float)\n", " times = np.asarray(times, dtype=float)\n", " return np.diff(np.log(times)) / np.diff(np.log(N_values))\n", "\n", "def benchmark(func, N_values, repeat=3, seed=12345):\n", " times = []\n", " for N in N_values:\n", " r = make_points(int(N), seed=seed)\n", " t, _ = median_time(func, r, repeat=repeat)\n", " times.append(t)\n", " return np.asarray(times)\n" ] }, { "cell_type": "markdown", "id": "2c8fdae7", "metadata": {}, "source": [ "\n", "## 5. Pure Python timings\n", "\n", "Keep $N$ fairly small. The precise upper limit depends strongly on the machine.\n", "\n", "The two versions below have the same expected $O(N^2)$ scaling, but different constant factors.\n" ] }, { "cell_type": "code", "execution_count": 34, "id": "35dab22a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "empirical p, squared-distance version: 1.946\n", "empirical p, sqrt-in-loop version: 2.044\n", "\n", "local p values, squared-distance version:\n", " 100 -> 200: p = 1.829\n", " 200 -> 400: p = 1.984\n", " 400 -> 800: p = 1.949\n", " 800 -> 1200: p = 1.984\n", " 1200 -> 1600: p = 2.009\n" ] } ], "source": [ "\n", "N_python = np.array([100, 200, 400, 800, 1200, 1600])\n", "\n", "t_python = benchmark(closest_pair_python, N_python, repeat=3)\n", "t_python_sqrt = benchmark(closest_pair_python_sqrt, N_python, repeat=3)\n", "\n", "p_python = empirical_exponent(N_python, t_python)\n", "p_python_sqrt = empirical_exponent(N_python, t_python_sqrt)\n", "\n", "print(f\"empirical p, squared-distance version: {p_python:.3f}\")\n", "print(f\"empirical p, sqrt-in-loop version: {p_python_sqrt:.3f}\")\n", "\n", "print(\"\\nlocal p values, squared-distance version:\")\n", "for n1, n2, p in zip(N_python[:-1], N_python[1:], local_exponents(N_python, t_python)):\n", " print(f\"{n1:5d} -> {n2:5d}: p = {p:.3f}\")\n" ] }, { "cell_type": "code", "execution_count": 35, "id": "4469d8c8", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig, ax = plt.subplots()\n", "ax.loglog(N_python, t_python, \"o-\", label=\"Python, compare d²\")\n", "ax.loglog(N_python, t_python_sqrt, \"o-\", label=\"Python, sqrt in loop\")\n", "\n", "# Reference N^2 line normalized to the first measured point\n", "ref = t_python[0] * (N_python / N_python[0])**2\n", "ax.loglog(N_python, ref, \"--\", label=r\"$N^2$ reference\")\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"time [s]\")\n", "ax.legend()\n", "ax.grid(True)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "0fa67cb4", "metadata": {}, "source": [ "\n", "### Discussion\n", "\n", "- Avoiding `sqrt` does not change $p$.\n", "- Does it change the wall-clock time? Usually yes.\n", "- Why might the fitted $p$ differ from exactly 2?\n", " - small problem sizes,\n", " - timing overhead,\n", " - cache effects,\n", " - CPU frequency scaling,\n", " - interpreter effects,\n", " - noise.\n", "\n", "The asymptotic statement concerns sufficiently large $N$, not every measured point.\n" ] }, { "cell_type": "markdown", "id": "6b870443", "metadata": {}, "source": [ "\n", "## 6. NumPy broadcasting: same $O(N^2)$ algorithm, different implementation\n", "\n", "The full distance matrix is formed with broadcasting.\n", "\n", "This often runs much faster than Python loops for moderate $N$, but now the additional memory becomes\n", "\n", "$$\n", "M(N)=O(N^2).\n", "$$\n" ] }, { "cell_type": "code", "execution_count": null, "id": "6015ba0f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python: (123, 151, np.float64(0.001853386184287195))\n", "dx shape: (500, 500)\n", "d2 shape: (500, 500)\n", "NumPy: (np.int64(123), np.int64(151), np.float64(0.001853386184287195))\n" ] } ], "source": [ "\n", "def closest_pair_numpy(r):\n", " dx = r[:, 0, None] - r[None, :, 0]\n", " dy = r[:, 1, None] - r[None, :, 1]\n", " d2 = dx*dx + dy*dy\n", " \n", " np.fill_diagonal(d2, np.inf)\n", "\n", " i, j = np.unravel_index(np.argmin(d2), d2.shape)\n", " return i, j, np.sqrt(d2[i, j])\n", "\n", "r_test = make_points(500)\n", "print(\"Python:\", closest_pair_python(r_test))\n", "print(\"NumPy: \", closest_pair_numpy(r_test))\n" ] }, { "cell_type": "markdown", "id": "d390f400", "metadata": {}, "source": [ "\n", "### Memory estimate\n", "\n", "One `float64` $N\\times N$ array takes\n", "\n", "$$\n", "8N^2 \\text{ bytes}.\n", "$$\n", "\n", "The broadcasting expression can create several such arrays or temporaries. Do **not** run large cases blindly.\n" ] }, { "cell_type": "code", "execution_count": 37, "id": "7018505d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "N= 1000: one float64 N×N array = 0.008 GB = 0.007 GiB\n", "N= 10000: one float64 N×N array = 0.800 GB = 0.745 GiB\n", "N= 20000: one float64 N×N array = 3.200 GB = 2.980 GiB\n", "N= 100000: one float64 N×N array = 80.000 GB = 74.506 GiB\n" ] } ], "source": [ "\n", "N_memory = np.array([1_000, 10_000, 20_000, 100_000], dtype=np.int64)\n", "\n", "bytes_one = 8 * N_memory**2\n", "\n", "for N, b in zip(N_memory, bytes_one):\n", " print(f\"N={N:7d}: one float64 N×N array = {b/1e9:8.3f} GB = {b/2**30:8.3f} GiB\")\n" ] }, { "cell_type": "markdown", "id": "5db801e4", "metadata": {}, "source": [ "\n", "A useful live question before running the next benchmark:\n", "\n", "> At what $N$ would a full distance matrix become uncomfortable on this machine?\n", "\n", "For example, at $N=100000$, **one** full `float64` matrix already takes about 80 GB.\n" ] }, { "cell_type": "code", "execution_count": 38, "id": "e6b4e87e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "empirical p for NumPy distance matrix: 2.685\n" ] } ], "source": [ "\n", "# Adjust the largest N downward if memory is limited.\n", "N_numpy = np.array([100, 200, 400, 800, 1200, 1600, 2400, 3200])\n", "\n", "t_numpy = benchmark(closest_pair_numpy, N_numpy, repeat=3)\n", "p_numpy = empirical_exponent(N_numpy, t_numpy)\n", "\n", "print(f\"empirical p for NumPy distance matrix: {p_numpy:.3f}\")\n" ] }, { "cell_type": "code", "execution_count": 57, "id": "ca7e26bf", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig, ax = plt.subplots()\n", "ax.loglog(N_python, t_python, \"o-\", label=\"Python double loop\")\n", "ax.loglog(N_numpy, t_numpy, \"o-\", label=\"NumPy broadcast matrix\")\n", "\n", "ref_py = t_python[0] * (N_python / N_python[0])**2\n", "ax.loglog(N_python, ref_py, \"--\", label=r\"$N^2$ reference\")\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"time [s]\")\n", "ax.legend()\n", "ax.grid(True)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "7bd94fd2", "metadata": {}, "source": [ "\n", "### Important point\n", "\n", "Python loop and NumPy matrix are both $O(N^2)$.\n", "\n", "The NumPy version can nevertheless be dramatically faster at moderate \\(N\\), because the elementwise loops execute in compiled code with much smaller interpreter overhead.\n", "\n", "But the NumPy version has made the **memory complexity worse**:\n", "\n", "$$\n", "O(1)\\ \\text{extra memory} \\quad\\longrightarrow\\quad O(N^2).\n", "$$\n", "\n", "So \"vectorized\" is not synonymous with \"better algorithm\".\n" ] }, { "cell_type": "markdown", "id": "72e2f09e", "metadata": {}, "source": [ "\n", "## 7. `cKDTree`: spatial organization instead of all-pairs comparison\n", "\n", "A k-d tree recursively partitions space and can prune whole spatial regions that cannot contain a closer point.\n", "\n", "For this problem:\n" ] }, { "cell_type": "code", "execution_count": 40, "id": "c4afdbf5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NumPy: (np.int64(289), np.int64(619), np.float64(0.0003242860694168626))\n", "KDTree: (np.int64(289), np.int64(619), np.float64(0.0003242860694168626))\n" ] } ], "source": [ "\n", "def closest_pair_kdtree(r):\n", " tree = cKDTree(r)\n", " dist, ind = tree.query(r, k=2)\n", "\n", " # Column 0 is the point itself.\n", " i = np.argmin(dist[:, 1])\n", " j = ind[i, 1]\n", " return i, j, dist[i, 1]\n", "\n", "r_test = make_points(1000)\n", "print(\"NumPy: \", closest_pair_numpy(r_test))\n", "print(\"KDTree:\", closest_pair_kdtree(r_test))\n" ] }, { "cell_type": "markdown", "id": "d6dbc64b", "metadata": {}, "source": [ "\n", "For low-dimensional, well-behaved data, the build and all-point nearest-neighbour query are commonly observed to scale much better than $N^2$, often near an $N\\log N$-type trend over useful ranges.\n", "\n", "Avoid presenting $O(N\\log N)$ as an unconditional theorem for every k-d-tree workload. Dimension, distribution, leaf size, and query type matter.\n" ] }, { "cell_type": "code", "execution_count": 41, "id": "aa031041", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "empirical power-law p for cKDTree over this range: 1.105\n", "(N log N is not exactly a pure power law, so p is only a descriptive local measure.)\n" ] } ], "source": [ "\n", "N_kd = np.array([1_000, 2_000, 5_000, 10_000, 20_000, 50_000, 100_000, 200_000])\n", "\n", "t_kd = benchmark(closest_pair_kdtree, N_kd, repeat=3)\n", "p_kd = empirical_exponent(N_kd, t_kd)\n", "\n", "print(f\"empirical power-law p for cKDTree over this range: {p_kd:.3f}\")\n", "print(\"(N log N is not exactly a pure power law, so p is only a descriptive local measure.)\")\n" ] }, { "cell_type": "code", "execution_count": 42, "id": "d37c8383", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig, ax = plt.subplots()\n", "ax.loglog(N_kd, t_kd, \"o-\", label=\"cKDTree\")\n", "\n", "# N log N reference normalized at first point\n", "ref_nlogn = t_kd[0] * (N_kd*np.log(N_kd)) / (N_kd[0]*np.log(N_kd[0]))\n", "ref_n2 = t_kd[0] * (N_kd/N_kd[0])**2\n", "\n", "ax.loglog(N_kd, ref_nlogn, \"--\", label=r\"$N\\log N$ reference\")\n", "ax.loglog(N_kd, ref_n2, \"--\", label=r\"$N^2$ reference\")\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"time [s]\")\n", "ax.legend()\n", "ax.grid(True)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "2120a152", "metadata": {}, "source": [ "\n", "### Ratio test for candidate complexities\n", "\n", "Instead of fitting a power law, another useful diagnostic is to divide the timing by a candidate complexity:\n", "\n", "$$\n", "\\frac{t(N)}{N}, \\qquad\n", "\\frac{t(N)}{N\\log N}, \\qquad\n", "\\frac{t(N)}{N^2}.\n", "$$\n", "\n", "If one of these becomes approximately constant over a range, that scaling is compatible with the measurements.\n" ] }, { "cell_type": "code", "execution_count": 43, "id": "03ca6afb", "metadata": {}, "outputs": [ { "data": { "image/png": "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wJdffolBgwbl6p0UHh6e76jCRERERA4bbqSHUp06dUxWV3EOGSIiInK6cCMzd2/fvj3P9qVLl6JFixbWOi4iIiKiIrG4t5SMRzN06FBVgiOlNcuXL8fx48dVddXq1auLdhRERERE9iq56du3L37++Wc1gWapUqVU2JGRhWWbTJBHREREZE9FGuemc+fOnLadiIiItFFyQ0REROT0JTdly5Y1exTiGzduFPeYiIiIiGwbbmbOnFn0RyAiIiJytHAjvaOIiIiINNugWCclJQVpaWm5tll7pm0iIiIimzYoTkpKwqhRoxASEqK6gkt7HMOFiIiIyKnCzRtvvIFffvkFX3zxBXx8fNRkmZGRkahUqZIayI+IiIjIniyulpLB+iTEdO3aFcOGDVNj3shcU9WrV8d3332nJtQkIiIicpqSG+nqXatWLX37Gl3X706dOmHbtm3WP0IiIiIiW4YbCTZnzpxR/27QoAF++OEHfYlOmTJlLL07IiIiIvuGG6mKOnDggPr3+PHjMWvWLPj6+mL06NF4/fXXrXt0RERERLZucyMhRiciIgLHjh1DVFSUanfTrFkzS++OiIiIyHHGuRHSkFgWIiIiIqeslnrllVfw6aef5tn++eef47XXXrPWcRERERGVTLhZtmwZ7rnnnjzbO3bsiKVLlxbtKIiIiIjsFW6uX7+OoKCgPNulW/i1a9esdVxEREREJRNupOHw+vXr82xft26dfvwbIiIiIqdpUDxmzBg1t9TVq1dx3333qW1btmzBjBkzMHPmTFscIxEREZHtws0zzzyD1NRUvPfee3j33XfVtho1aqi5poYMGWLp3RERERHZvyv4iBEj1CKlN35+fggICLDuURERERGVVJubO3fuIDk5Wf27QoUKqoGxVEdt3LixqMdAREREZL9w07dvXzUruLh16xbatm2r2tvIdqmaIiIiInKqcBMdHY3OnTurf8u4NmFhYTh37pwKPKYG9yMiIiJy6HAjVVKlS5dW/5aqqAEDBsDd3R3t27dXIacoZPJNaZQsE3C2a9cOu3fvLnB/KTEaOXIkKlasCB8fH9SrVw9r164t0mMTERGRthRpnJsVK1bgwoUL2LBhA3r06KG2x8XFqYH8LLVkyRLVvXzy5MmqVCg8PBw9e/ZU92dKWloaunfvjrNnz6qSo+PHj2POnDmoXLmyxY9NRERE2mNx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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig, ax = plt.subplots()\n", "\n", "ax.semilogx(N_kd, t_kd / N_kd, \"o-\", label=r\"$t/N$\")\n", "ax.semilogx(N_kd, t_kd / (N_kd*np.log(N_kd)), \"o-\", label=r\"$t/(N\\log N)$\")\n", "ax.semilogx(N_kd, t_kd / N_kd**2, \"o-\", label=r\"$t/N^2$\")\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"scaled time\")\n", "ax.legend()\n", "ax.grid(True)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "5b4756cd", "metadata": {}, "source": [ "\n", "## 8. Compare all three closest-pair approaches\n", "\n", "The benchmark ranges are intentionally different. It is often meaningless to insist that every algorithm be tested at the same $N$: one becomes too slow, another runs out of memory, while the better algorithm still has room to grow.\n" ] }, { "cell_type": "code", "execution_count": 58, "id": "b5b3b28b", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig, ax = plt.subplots()\n", "\n", "ax.loglog(N_python, t_python, \"o-\", label=\"Python double loop\")\n", "ax.loglog(N_numpy, t_numpy, \"o-\", label=\"NumPy broadcast matrix\")\n", "ax.loglog(N_kd, t_kd, \"o-\", label=\"cKDTree\")\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"time [s]\")\n", "ax.legend()\n", "ax.grid(True)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "9f4fee8f", "metadata": {}, "source": [ "\n", "### Summary\n", "\n", "| method | typical time behavior | additional memory | main idea |\n", "|---|---:|---:|---|\n", "| Python pair loop | $O(N^2)$ | $O(1)$ | direct exhaustive search |\n", "| NumPy broadcast matrix | $O(N^2)$ | $O(N^2)$ | same search, compiled array loops |\n", "| `cKDTree` | often near $N\\log N$ in this setting | $O(N)$ | spatial pruning |\n", "\n", "Key question:\n", "\n", "> **Where did the speedup come from?**\n", "\n", "- Python $\\to$ NumPy: mostly implementation and constant factors.\n", "- all pairs $\\to$ spatial tree: algorithmic improvement.\n", "- full matrix $\\to$ tree: major memory-complexity improvement.\n" ] }, { "cell_type": "code", "execution_count": 45, "id": "116fb222", "metadata": {}, "outputs": [], "source": [ "\n", "def cutoff_pairs_bruteforce(r, rc):\n", " rc2 = rc*rc\n", " pairs = []\n", " N = len(r)\n", "\n", " for i in range(N):\n", " xi, yi = r[i]\n", " for j in range(i + 1, N):\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " if dx*dx + dy*dy < rc2:\n", " pairs.append((i, j))\n", "\n", " return pairs\n" ] }, { "cell_type": "markdown", "id": "64a5ea90", "metadata": {}, "source": [ "\n", "### Cell list\n", "\n", "Choose the cell width $h=r_c$. In 2D, only the cell itself and its eight neighbours can contain points within the cutoff.\n", "\n", "To avoid duplicate pair tests, inspect only a suitable half of the neighbouring-cell offsets.\n" ] }, { "cell_type": "code", "execution_count": 46, "id": "1f5dd233", "metadata": {}, "outputs": [], "source": [ "\n", "def cutoff_pairs_cells(r, rc):\n", " # Non-periodic unit square.\n", " # Cell width h = rc.\n", " cells = {}\n", " # Assign points to cells.\n", " # point (x,y) -> cell ([x/rc], [y/rc]), use int() to floor the division\n", " # Build a dictionary mapping cell coordinates to lists of point indices.\n", " # for example, if rc = 0.1, then cell (3, 5) contains \n", " # all points with x in [0.3, 0.4) and y in [0.5, 0.6). \n", " # the dictionary might look like this: \n", " # {\n", " # (0, 0): [3, 17],\n", " # (0, 1): [8],\n", " # (1, 0): [0, 22, 94],\n", " # (1, 1): [31, 45],\n", " # ...\n", " # }\n", " for i, (x, y) in enumerate(r):\n", " key = (int(x / rc), int(y / rc))\n", " cells.setdefault(key, []).append(i)\n", "\n", " rc2 = rc*rc\n", " pairs = []\n", "\n", " # Same cell + four neighbours.\n", " offsets = [(0, 0), (1, 0), (0, 1), (1, 1), (-1, 1)]\n", "\n", " for cell, ids1 in cells.items():\n", " cx, cy = cell\n", "\n", " for ox, oy in offsets:\n", " other = (cx + ox, cy + oy)\n", " ids2 = cells.get(other)\n", " if ids2 is None:\n", " continue\n", "\n", " if ox == 0 and oy == 0:\n", " # Unique pairs inside the same cell.\n", " for a in range(len(ids1)):\n", " i = ids1[a]\n", " xi, yi = r[i]\n", " for b in range(a + 1, len(ids1)):\n", " j = ids1[b]\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " if dx*dx + dy*dy < rc2:\n", " pairs.append((i, j))\n", " else:\n", " for i in ids1:\n", " xi, yi = r[i]\n", " for j in ids2:\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " if dx*dx + dy*dy < rc2:\n", " # keep pairs in order (i < j)\n", " pairs.append((min(i, j), max(i, j)))\n", " # pairs.append((i, j))\n", "\n", " return pairs\n" ] }, { "cell_type": "markdown", "id": "0f5dd5a2", "metadata": {}, "source": [ "\n", "### Correctness check\n" ] }, { "cell_type": "code", "execution_count": 47, "id": "547e5c60", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "brute-force pairs: 160\n", "cell-list pairs: 160\n", "first 5 brute-force pairs: [(1, 86), (47, 53), (42, 57), (35, 51), (56, 83)]\n", "first 5 cell-list pairs: [(1, 86), (47, 53), (42, 57), (35, 51), (56, 83)]\n", "sets identical: True\n" ] } ], "source": [ "# convert both lists of pairs to sets of tuples for comparison\n", "brute_force_pairs = set(cutoff_pairs_bruteforce(r, 0.1))\n", "cell_list_pairs = set(cutoff_pairs_cells(r, 0.1))\n", "print(\"brute-force pairs:\", len(brute_force_pairs))\n", "print(\"cell-list pairs: \", len(cell_list_pairs))\n", "print(\"first 5 brute-force pairs:\", list(brute_force_pairs)[:5])\n", "print(\"first 5 cell-list pairs:\", list(cell_list_pairs)[:5])\n", "print(\"sets identical: \", brute_force_pairs == cell_list_pairs)" ] }, { "cell_type": "markdown", "id": "0bc61c18", "metadata": {}, "source": [ "\n", "### Important scaling condition\n", "\n", "To obtain an approximately linear fixed-cutoff neighbour problem, we should increase system size at **fixed particle density**.\n", "\n", "If we keep the unit square fixed while increasing $N$, the density increases and each cutoff disk contains more and more particles. Then the number of physical neighbours itself grows with $N$, so $O(N)$ scaling is not expected.\n", "\n", "For a fixed 2D number density $\\rho$, choose box length\n", "\n", "$$\n", "L=\\sqrt{N/\\rho}.\n", "$$\n", "\n", "Then a fixed cutoff contains on average approximately\n", "\n", "$$\n", "\\rho\\,\\pi r_c^2\n", "$$\n", "\n", "neighbours, independent of $N$.\n" ] }, { "cell_type": "code", "execution_count": 48, "id": "0ca3723b", "metadata": {}, "outputs": [], "source": [ "\n", "def make_points_fixed_density(N, rho=100.0, seed=12345):\n", " rng = np.random.default_rng(seed)\n", " L = np.sqrt(N / rho)\n", " r = rng.random((N, 2)) * L\n", " return r, L\n", "\n", "def cutoff_pairs_cells_general_box(r, rc):\n", " cells = {}\n", "\n", " for i, (x, y) in enumerate(r):\n", " key = (int(x / rc), int(y / rc))\n", " cells.setdefault(key, []).append(i)\n", "\n", " rc2 = rc*rc\n", " count = 0\n", " offsets = [(0, 0), (1, 0), (0, 1), (1, 1), (-1, 1)]\n", "\n", " for cell, ids1 in cells.items():\n", " cx, cy = cell\n", "\n", " for ox, oy in offsets:\n", " ids2 = cells.get((cx + ox, cy + oy))\n", " if ids2 is None:\n", " continue\n", "\n", " if ox == 0 and oy == 0:\n", " for a in range(len(ids1)):\n", " i = ids1[a]\n", " xi, yi = r[i]\n", " for b in range(a + 1, len(ids1)):\n", " j = ids1[b]\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " if dx*dx + dy*dy < rc2:\n", " count += 1\n", " else:\n", " for i in ids1:\n", " xi, yi = r[i]\n", " for j in ids2:\n", " dx = xi - r[j, 0]\n", " dy = yi - r[j, 1]\n", " if dx*dx + dy*dy < rc2:\n", " count += 1\n", "\n", " return count\n", "\n", "def benchmark_fixed_density_cells(N_values, rho=100.0, rc=0.1, repeat=3):\n", " times = []\n", " counts = []\n", "\n", " for N in N_values:\n", " r, L = make_points_fixed_density(int(N), rho=rho)\n", " t, count = median_time(cutoff_pairs_cells_general_box, r, rc, repeat=repeat)\n", " times.append(t)\n", " counts.append(count)\n", "\n", " return np.asarray(times), np.asarray(counts)\n" ] }, { "cell_type": "code", "execution_count": 49, "id": "7fb034fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "empirical p for cell-list traversal: 1.060\n", "\n", "N= 1000, pairs within rc= 1547, pairs/N= 1.547\n", "N= 2000, pairs within rc= 3049, pairs/N= 1.524\n", "N= 5000, pairs within rc= 7727, pairs/N= 1.545\n", "N= 10000, pairs within rc= 15538, pairs/N= 1.554\n", "N= 20000, pairs within rc= 31183, pairs/N= 1.559\n", "N= 50000, pairs within rc= 78240, pairs/N= 1.565\n" ] } ], "source": [ "\n", "N_cells = np.array([1_000, 2_000, 5_000, 10_000, 20_000, 50_000])\n", "rho = 100.0\n", "rc = 0.1\n", "\n", "t_cells, pair_counts = benchmark_fixed_density_cells(\n", " N_cells, rho=rho, rc=rc, repeat=3\n", ")\n", "\n", "p_cells = empirical_exponent(N_cells, t_cells)\n", "\n", "print(f\"empirical p for cell-list traversal: {p_cells:.3f}\")\n", "print()\n", "for N, count in zip(N_cells, pair_counts):\n", " print(f\"N={N:7d}, pairs within rc={count:8d}, pairs/N={count/N:8.3f}\")\n" ] }, { "cell_type": "code", "execution_count": 50, "id": "2792a50e", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "fig, ax = plt.subplots()\n", "\n", "ax.loglog(N_cells, t_cells, \"o-\", label=\"cell list, fixed density\")\n", "ref_n = t_cells[0] * N_cells / N_cells[0]\n", "ref_n2 = t_cells[0] * (N_cells / N_cells[0])**2\n", "\n", "ax.loglog(N_cells, ref_n, \"--\", label=r\"$N$ reference\")\n", "ax.loglog(N_cells, ref_n2, \"--\", label=r\"$N^2$ reference\")\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"time [s]\")\n", "ax.legend()\n", "ax.grid(True)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "6521ff1e", "metadata": {}, "source": [ "\n", "### Discussion\n", "\n", "The cell-list algorithm above is intentionally written in straightforward Python, so the **constant factor may be poor** even when its asymptotic scaling is much better.\n", "\n", "\n", "- an $O(N)$ Python implementation can lose to a highly optimized $O(N^2)$ NumPy implementation for small enough $N$,\n", "- the $O(N^2)$ method eventually loses as $N$ becomes large,\n", "- after choosing the better algorithm, one could accelerate the cell traversal with Numba, C++, Cython, Rust, etc.\n" ] }, { "cell_type": "markdown", "id": "0b5c3f1b", "metadata": {}, "source": [ "\n", "## 10. SciPy fixed-cutoff query\n", "\n", "`cKDTree` can also return all neighbours within a given radius. This gives a highly optimized reference implementation for the same fixed-cutoff problem.\n", "\n", "`query_pairs(rc)` returns unique unordered pairs $(i,j)$ with $i