{ "cells": [ { "cell_type": "markdown", "id": "183af68c-ecea-4944-a5d1-ebf2e2f1d16f", "metadata": {}, "source": [ "# Implementation of closest-points D&C algorithm\n", "\n", "First, we generate the points." ] }, { "cell_type": "code", "execution_count": 1, "id": "6cd6a83a-f0be-4e71-8ae1-c70d580c6d8d", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import plotly.graph_objects as go\n", "import plotly.io as pio\n", "pio.renderers.default = 'notebook'\n", "\n", "def generate_2d_points(N):\n", " return 200*np.random.rand(N,2)-100\n", "\n", "def plot_2d_points(points):\n", " fig = go.Figure(data=go.Scatter(\n", " x=points[:, 0],\n", " y=points[:, 1],\n", " mode='markers',\n", " marker=dict(\n", " size=10,\n", " opacity=0.7\n", " )\n", " ))\n", "\n", " fig.update_layout(width=600, height=600)\n", " return fig" ] }, { "cell_type": "code", "execution_count": 2, "id": "d27d34c9-cdf8-4514-b03b-4a75a9e52b08", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "marker": { "opacity": 0.7, "size": 10 }, "mode": "markers", "type": "scatter", "x": { "bdata": "CJmQGD/VNsBKNyoaB6lAwJgBgw7lSyDAHCH7y41RVcBFCaY4ubdMwHTk2on/tURAFP+8kwlMR0Dk3QmxcJFFQMgZQVzumEBAEKHQHCAZL8BwVVQT6hJAQEB/kuLJ6fE/joC5NGLKUEAALZ+q9B8RwJVxdIae0VbAqVMWIms8VsCJhpmzwT9RwI/Dvn34D1fAGBHVEGfqUUCujLKX23JXwLVJx5V9RkjAOFeJ8kvTRUCAyG9+mVEJwOoO4P5HKFFAhBsvYUy0VEDQzscbihtVQBquvXd8ikHA9lXe3DpsUsDc+bgA/19WQDRaQ0foP1dA0K4cFN0bUMAL+i9SRx9WwJNdtJeDBUvA2PnGhfD4NUAozkeYDa03wDS0oOWJyVRAgF+1fPWzTEBQLHO7rmUQwOCEcSFZs1dA6KB81DaFR0Bwi60a+vszQBTyGKFXxkJA46Go4UNVQ8Ds6yN+NVdJwCxMLMuyyUxAC6T8Z1wVRcBG2ZRa7xZSwN7VK23/SUHA9NXDYbRMT0DMgsxWfnpRQA==", "dtype": "f8" }, "y": { "bdata": "3Imd6z+fM8BnnhWY/UJRwFg1JMgeuT9ArYkcgG3pUsBY33ZTfyxFQEhXe5DDAjXApbK0b0ItT8BSnYa0MJZFwFC9FDhbTxHAak1eQtOdVMDQ9fyS/WkxQObJaZfLHEDAwdfRJVBLUMBiau/DSNVQQGzu0/rnBk5AfD8lwUTaSkDkHymLcytQQDTqbstfF1HAiPbUaL1dLsBKOlsg0v9TQNpyDLEiY03Ap4sEd1BHU8Da2I8IUGtXQDqgtmJSMEXAYNAMC1JhKkDISeJh4JYvQPwhuhXSRjnABJWh7NEIQMDgGgTJx2AowAA64o3DB9A/6vGU+7hwU8AniX0s0EtFwGjrSv0+E0HAGld1nirqU0AAjSgyUes9QEi+Y4/n7T1AzvVmJvVLWMAecXlUCTlLwPCL6gAgQSFAvheaOeWKScAA6m9N1kBMQBA3KpoGCS5AcKmuCqElSEAgI0cxXilUwFq9lHfg4k/AGGnkXnBcLUBMSN5pqcNAQPkUWCtZV1fAq7XXy9htVsDYXS6yCHo9wA==", "dtype": "f8" } } ], "layout": { "height": 600, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermap": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermap" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "width": 600 } }, "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N = 50\n", "points = generate_2d_points(N)\n", "fig = plot_2d_points(points)\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "3edab88c-62a1-411e-90ec-1ce3052c7e12", "metadata": {}, "source": [ "## Brute Force Implementation\n", "\n", "The brute force implementation has no surprises. It returns a tuple of the two points, and the distance between them." ] }, { "cell_type": "code", "execution_count": 3, "id": "b1a80fb4-ceae-4eeb-9299-8d8cfaeec36f", "metadata": {}, "outputs": [], "source": [ "def brute_force(points):\n", " bestpair = (points[0], points[1], np.linalg.norm(points[0]-points[1]))\n", " N, _ = points.shape\n", "\n", " for i in range(N-1):\n", " for j in range(i+1,N):\n", " dist = np.linalg.norm( points[i,:]-points[j,:] )\n", " if dist