diff --git a/DeepNote/example-two-sum-2.ipynb b/DeepNote/example-two-sum-2.ipynb deleted file mode 100644 index dbf66b5..0000000 --- a/DeepNote/example-two-sum-2.ipynb +++ /dev/null @@ -1,550 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Two Sum (two solutions)\n", - "\n", - "*Michael Snowden*, 21 January 2024" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "3dab5b7cbe1443acb7ae1b3c9a849b96", - "deepnote_cell_type": "markdown" - }, - "source": [ - "This essay aims to solve the classic [Two\n", - "Sum](https://leetcode.com/problems/two-sum/) problem from [LeetCode](https://leetcode.com/). \n", - "\n", - "Readers should have an intermediate understanding of Python and familiarity\n", - "with Big-Oh notation to understand this essay." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "669a241a038a4ea9acd6d114edf21192", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 1 Problem\n", - "\n", - "Given an array of integers `nums` and an integer `target`, return indices of\n", - "the two numbers such that they add up to `target`.\n", - "\n", - " - $-109 \\leq$ `nums[i]` $\\leq 109$\n", - " - $-109 \\leq$ `target` $\\leq 109$\n", - " - Only one valid answer exists." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "7770c0f5f8874b8cb75275c9de3a8424", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 2 Algorithms\n", - "\n", - "With our problem defined, the next step is to think of ways to solve it. This section\n", - "presents two approaches to solving Two Sum: brute force, and mapping." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "873b3fad44264c8f9d89f71953220701", - "deepnote_cell_type": "markdown" - }, - "source": [ - "\n", - "### 2.1 Brute force\n", - "\n", - "A brute force algorithm tries all possibilities, and selects the correct one.\n", - "For example, we can sum every number in `nums` with every other number and see\n", - "if our sum matches the `target`. If it does, then we have found our solution.\n", - "\n", - ">**Brute force algorithm**: An outer loop iterates through each number in\n", - ">`nums`, then for each number, an inner loop iterates `nums` again. For each\n", - ">pair of numbers, if their indices are different and their sum matches `target`,\n", - ">return their indices.\n", - "\n", - "Let _n_ = `len(nums)`, then this algorithm has two nested for loops that do _n_\n", - "iterations each. The operations performed within the inner loop are constant\n", - "time, meaning this solution will do at most _n_ $\\times$ _n_ $\\times$ O(1)\n", - "steps. Thus, the worst-case time complexity is O(_n_ $^2$). In the best case,\n", - "the first and second numbers in `nums` sum to `target`. No matter the size of\n", - "`nums`, the run-times would not increase. Therefore, the best-case time\n", - "complexity would be O(1).\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "602d836888cf43e1abc9e17837086972", - "deepnote_cell_type": "markdown" - }, - "source": [ - "### 2.2 Mapping\n", - "\n", - "In the Brute force algorithm, we checked each pair of numbers in `nums` to see\n", - "if the resulting sum was equal to `target`. Since we are already checking every\n", - "number in the list, why not store some piece information from each number that\n", - "will help us find our matching pair?\n", - "\n", - "For every number in `nums`, we can map the difference between it and the target\n", - "(`target` - number) to its corresponding index using a hashtable. This allows\n", - "us to check the hashmap for matching numbers in constant time.\n", - "\n", - ">**Mapping algorithm**: For each number in `nums`, if its in the hashmap, return\n", - ">its index and the index mapped to it. Otherwise, calculate the difference\n", - ">(`target` - number) and map it to the corresponding index of number.\n", - "\n", - "Let _n_ = `len(nums)`, then this algorithm has a single loop that does _n_\n", - "iterations. Because we are using a hashmap, all the operations performed in the\n", - "loop are done in constant time. Thus, our mapping algorithm has O(_n_) time\n", - "complexity in in the worst-case. Similar to the brute force approach, if the\n", - "correctly summing numbers are in the first two positions of `nums`, then the\n", - "run-times will be unaffected by increasing input sizes, giving a best-case\n", - "complexity of O(1)." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "b874355374024f0aac10bf85290e3830", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 3 Code\n", - "\n", - "In this section we will implement and test the algorithms" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "cell_id": "aaadf1a848f74353838a9173da3520ab", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 572, - "execution_start": 1700998213233, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "pytype was activated\n", - "ruff was activated\n", - "allowed was activated\n" - ] - } - ], - "source": [ - "from algoesup import test, time_functions, time_cases\n", - "\n", - "%pytype on\n", - "%ruff on\n", - "%allowed on" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "3d5d24a861574074ae34951e9a0ecef1", - "deepnote_cell_type": "markdown" - }, - "source": [ - "### 3.1 Testing\n", - "\n", - "We now start thinking about writing some unit tests for our solutions.\n", - "\n", - "To thoroughly test these solutions, we need to consider edge cases alongside\n", - "other important functional tests. For the Two Sum problem, we should test the\n", - "minimum size for `nums` and also the extremes of the values that can be\n", - "present. We should include negative numbers and zero in our tests because\n", - "integers are present in the inputs." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "cell_id": "ac8b19eaedc64b4580b0a0ee55a38d06", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 561, - "execution_start": 1700998214777, - "source_hash": null - }, - "outputs": [], - "source": [ - "two_sum_tests = [\n", - " [\"minimum size for nums\", [1, 2], 3, (0, 1)],\n", - " [\"non-adjacent indices\", [1, 4, 9, 7], 8, (0, 3)],\n", - " [\"first two elements\", [5, 7, 1, 2, 8], 12, (0, 1)],\n", - " [\"last two elements\", [1, 3, 5, 7, 8], 15, (3, 4)],\n", - " [\"repeated elements\", [6, 2, 3, 2], 4, (1, 3)],\n", - " [\"max and min range\", [-109, 109, 0], 0, (0, 1)],\n", - " [\"lowest target value\", [-50, 1, -59], -109, (0, 2)],\n", - " [\"highest target value\", [50, 1, 59], 109, (0, 2)],\n", - "]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.2 Implementations\n", - "\n", - "The next cell implements the brute force algorithm using nested `for` loops" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "cell_id": "44329d9330bd4375a0ac59857f7ab3a8", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 490, - "execution_start": 1700998215236, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing two_sum_bf:\n", - "Tests finished.\n" - ] - } - ], - "source": [ - "def two_sum_bf(nums: list, target: int) -> tuple[int, int]:\n", - " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", - "\n", - " Preconditions:\n", - " len(nums) >= 2\n", - " -109 <= nums[i] <= 109\n", - " -109 <= target <= 109\n", - " Exactly one pair a and b in nums has a + b = target\n", - " \"\"\"\n", - " for index_1 in range(len(nums)):\n", - " for index_2 in range(len(nums)):\n", - " if index_1 != index_2 and nums[index_1] + nums[index_2] == target:\n", - " return index_1, index_2\n", - " return (-1, -1)\n", - "\n", - "\n", - "test(two_sum_bf, two_sum_tests)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next up is the mapping algorithm implemented using Python's `dict`." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "cell_id": "f1acd50e3be54a0e948c7795637ee2a0", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 443, - "execution_start": 1700998216141, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing two_sum_map:\n", - "Tests finished.\n" - ] - }, - { - "data": { - "text/markdown": [ - "**allowed** found issues:\n", - "- 10: unknown construct" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def two_sum_map(nums: list, target: int) -> tuple[int, int]:\n", - " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", - "\n", - " Preconditions:\n", - " len(nums) >= 2\n", - " -109 <= nums[i] <= 109\n", - " -109 <= target <= 109\n", - " Exactly one pair a and b in nums has a + b = target\n", - " \"\"\"\n", - " differences: dict[int, int] = {}\n", - " for index in range(len(nums)):\n", - " difference = target - nums[index]\n", - " if nums[index] in differences:\n", - " return differences[nums[index]], index\n", - " differences[difference] = index\n", - " return (-1, -1)\n", - "\n", - "\n", - "test(two_sum_map, two_sum_tests)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "11e07df56c7543d8951171e634bbfa14", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 4 Performance\n", - "\n", - "In this section we will measure the run-times of our solutions under various conditions to see if\n", - "our analysis matches empirical data." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.1 generating inputs\n", - "\n", - "Since the functions that time the code require an input generators, we must\n", - "write the generator first. The worst-case complexity is often the most useful,\n", - "so here we write a function that generates a worst case instance by locating\n", - "the matching pair of numbers at the end of `nums`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "cell_id": "01f9421892f340f8b3ade6e25e315a09", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 471, - "execution_start": 1700998216591, - "source_hash": null - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "**allowed** found issues:\n", - "- 8: random.randint\n", - "- 9: random.randint\n", - "- 13: random.randint" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import random\n", - "\n", - "def worst(size: int) -> tuple[list[int], int]:\n", - " \"\"\"Given a size, generate a problem instance for two sum.\n", - "\n", - " Preconditions: size >= 2; scenario in {\"best\", \"normal\", \"worst\"}\n", - " \"\"\"\n", - " num1 = random.randint(-109, 109)\n", - " num2 = random.randint(-109, 109)\n", - " target = num1 + num2\n", - " nums = [num1, num2]\n", - " while len(nums) < size:\n", - " new_num = random.randint(-109, 109)\n", - " valid = True\n", - " for num in nums:\n", - " if target - new_num == num:\n", - " valid = False\n", - " if valid:\n", - " nums.append(new_num)\n", - " nums = nums[2:] + nums[:2]\n", - " return nums, target" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.2 Run-times for each solution\n", - "\n", - "We now compare the runtimes for both solutions using the input generator for\n", - "the worst case." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "cell_id": "aba31a656d9f45c385f81e314f656e34", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 17260, - "execution_start": 1700998217027, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Inputs generated by worst\n", - "\n", - "Input size two_sum_bf two_sum_map \n", - " 100 669.3 9.2 µs\n", - " 200 2660.1 21.0 µs\n", - " 400 10770.2 40.6 µs\n", - " 800 45877.3 75.1 µs\n", - " 1600 181893.9 150.2 µs" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "solutions = [two_sum_bf, two_sum_map]\n", - "time_functions(solutions, worst, start=100, double=4, chart=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The run-times for `two_sum_bf` almost instantly eclipse that of `two_sum_map`.\n", - "In this chart it looks as if the run-times for `two_sum_map` are not growing at\n", - "all, but we know this is false by observing the printed run times. Let us see\n", - "if we can modify the inputs of `time_functions` for a better visual\n", - "representation." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB9dElEQVR4nO3dd3yN5//H8ddJSESmIGKPqh2j2qqa/QkxS60aNbu0WqOoaquo1uygU33b0qFaFG3NhgpKUHvUblAktEYiRmRcvz/u5tSRINEkJ4n38/E4D/e4zn1/7pNwPq77uj+XzRhjEBEREZGbcnF2ACIiIiI5gZImERERkTRQ0iQiIiKSBkqaRERERNJASZOIiIhIGihpEhEREUkDJU0iIiIiaaCkSURERCQNlDSJiIiIpIGSJhGRbGrmzJnYbDaOHDly03a9e/fGy8sra4ISuYMpaRJxguQvw82bNzs7FAAuXbrE6NGjCQsLc3YoOY4+u+xhyZIljB492tlhSC6npElEuHTpEmPGjNEX/23QZ5c9LFmyhDFjxjg7DMnllDSJiFwjISGBq1evOjsMAa5cuUJSUpKzwxCxU9Ikkk0kj0s5ceIE7dq1w8vLi8KFCzN06FASExPt7Y4cOYLNZuOtt97i3XffpXTp0nh4eNCoUSN2797tcMzGjRvTuHHjVM9VpkwZ+/EKFy4MwJgxY7DZbNhsNvutjqioKPr06UOJEiVwd3enaNGitG3b9pbjbADmzp1LlSpVyJcvH9WqVWPBggUO506WlJTElClTqFq1Kvny5aNIkSI8/fTTnDt3zqFdmTJlaN26Nb/++iv3338/+fLlo1y5cnz55Zcpzn3+/HkGDRpEyZIlcXd3p3z58kycONHhS/jaz3LKlCncdddduLu78/vvv3P16lVee+01ateuja+vL56enjRo0IBVq1Y5vP9mnx3Avn376NixI/7+/uTLl497772XH3/8MUW8e/bs4f/+7//w8PCgRIkSvPHGG+lOGP744w9CQkLw9PSkWLFivP766xhjADDGUKZMGdq2bZvifVeuXMHX15enn376hsdu374999xzj8O2Nm3aYLPZHK5n48aN2Gw2li5d6hBXp06d8Pf3J3/+/DzwwAMsXrzY4VhhYWHYbDa+/fZbXn31VYoXL07+/PmJiYkhPj6eMWPGcPfdd5MvXz4KFixI/fr1CQ0NBazf5w8//BDA/jOw2Wzp+uxE0iKPswMQkX8lJiYSEhJCnTp1eOutt1ixYgVvv/02d911F88884xD2y+//JILFy7Qv39/rly5wtSpU/m///s/du3aRZEiRdJ8zsKFC/Pxxx/zzDPP8Mgjj9C+fXsAqlevDkCHDh3Ys2cPzz//PGXKlOH06dOEhoZy7NixFMnPtRYvXsyjjz5KUFAQ48eP59y5czz++OMUL148Rdunn36amTNn0qdPHwYMGEBERAQffPAB27ZtY926deTNm9fe9tChQ3Ts2JHHH3+cXr168fnnn9O7d29q165N1apVAeuWWaNGjThx4gRPP/00pUqVYv369YwYMYLIyEimTJnicP4ZM2Zw5coVnnrqKdzd3fH39ycmJoZPP/2Url278uSTT3LhwgU+++wzQkJC2LRpEzVr1rzlZ7dnzx7q1atH8eLFeemll/D09GTOnDm0a9eO77//nkceeQSwEtOHHnqIhIQEe7vp06fj4eGR5p9jYmIizZs354EHHmDSpEksW7aMUaNGkZCQwOuvv47NZuOxxx5j0qRJnD17Fn9/f/t7f/rpJ2JiYnjsscduePwGDRrwww8/EBMTg4+PD8YY1q1bh4uLC2vXruXhhx8GYO3atbi4uFCvXj0ATp06xYMPPsilS5cYMGAABQsW5IsvvuDhhx9m3rx59s8g2dixY3Fzc2Po0KHExcXh5ubG6NGjGT9+PE888QT3338/MTExbN68ma1bt9K0aVOefvppTp48SWhoKF999VWaPzORdDMikuVmzJhhAPPbb7/Zt/Xq1csA5vXXX3doW6tWLVO7dm37ekREhAGMh4eHOX78uH37xo0bDWAGDx5s39aoUSPTqFGjFOfv1auXKV26tH39r7/+MoAZNWqUQ7tz584ZwEyePDnd1xgUFGRKlChhLly4YN8WFhZmAIdzr1271gBm1qxZDu9ftmxZiu2lS5c2gFmzZo192+nTp427u7sZMmSIfdvYsWONp6enOXDggMMxX3rpJePq6mqOHTtmjPn3s/Tx8TGnT592aJuQkGDi4uIctp07d84UKVLE9O3b177tRp+dMcY0adLEBAUFmStXrti3JSUlmQcffNDcfffd9m2DBg0ygNm4caPDdfn6+hrAREREpDj2tZJ/d55//nmH87Rq1cq4ubmZv/76yxhjzP79+w1gPv74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tG7dmvnz5/PII4/QqlUrIiIimDZtGlWqVHGI/0afXbVq1fjwww+pX78+QUFBPPnkk5QrV45Tp04RHh7O8ePH2bFjBwAvvvgiX331Fc2bN2fgwIH2kgOlS5dO89idfPnysWzZMnr16kWdOnVYunQpixcv5uWXX05xi7NVq1YULFiQuXPn0qJFCwICAtJ0jvz581O7dm02bNhgr9EEVk/TxYsXuXjxYoqk6aWXXmL27Nm0aNGCAQMG4O/vzxdffEFERATff/89Li63/r97lSpVaNy4MbVr18bf35/Nmzczb948h4HvtWvXBmDAgAGEhISkKxkUSTNnProncqe6UckBT0/PFG1HjRrl8Ch18mPykydPNm+//bYpWbKkcXd3Nw0aNDA7duxI8f6vv/7alCtXzri5uZmaNWua5cuXpyg5YIwx69evN7Vr1zZubm72R+j//vtv079/f1OpUiXj6elpfH19TZ06dcycOXPSdJ3ffvutqVSpknF3dzfVqlUzP/74o+nQoYOpVKlSirbTp083tWvXNh4eHsbb29sEBQWZF1980Zw8edLepnTp0qk+ep5aaYULFy6YESNGmPLlyxs3NzdTqFAh8+CDD5q33nrLXL16NcVneb2kpCQzbtw4U7p0aePu7m5q1aplFi1alObPLtnhw4dNz549TWBgoMmbN68pXry4ad26tZk3b57DMXbu3GkaNWpk8uXLZ4oXL27Gjh1rPvvsszSXHPD09DSHDx82zZo1M/nz5zdFihQxo0aNsj/Sf71nn33WAOabb7656bGvN2zYMAOYiRMnOmwvX768Aczhw4dTvOfw4cOmY8eOxs/Pz+TLl8/cf//9ZtGiRQ5tkksOzJ07N8X733jjDXP//fcbPz8/4+HhYSpVqmTefPNN+8/RGKtExPPPP28KFy5sbDabyg9IprAZk8ooURHJto4cOULZsmWZPHkyQ4cOdXY46ZZcFDK5mrM4x+DBg/nss8+Iioqy32IUkZvTmCYRyRTx8fEpxg6FhYWxY8eOVKd2kaxz5coVvv76azp06KCESSQdNKZJRDLFiRMnCA4O5rHHHqNYsWLs27ePadOmERgYmKKAp2SN06dPs2LFCubNm8eZM2cYOHCgs0MSyVGUNIlIpihQoAC1a9fm008/5a+//sLT05NWrVoxYcIEChYs6Ozw7ki///473bt3JyAggPfe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cuUoVKgQhw4dAiAwMJDTp087tElISODs2bMEBgba25w6dcqhTfL6rdok70+Nu7s7Pj4+Di8REZGcZv586N3bGsX03HPghKk/c4wclTQdP36cM2fOULRoUQDq1q3L+fPn2bJli73NL7/8QlJSkn0Osbp167JmzRri4+PtbUJDQ6lYsSIF/pmWuW7duqxcudLhXKGhodStWzezL0lERMRpli2zilcmJlqJ09SpoIdyb8ypSVNsbCzbt29n+/btAERERLB9+3aOHTtGbGwsw4YNY8OGDRw5coSVK1fStm1bypcvT0hICACVK1emefPmPPnkk2zatIl169bx3HPP0aVLF4oVKwZAt27dcHNz4/HHH2fPnj189913TJ061eHW2sCBA1m2bBlvv/02+/btY/To0WzevJnnnnsuyz8TERGRrLBmjTU9Snw8dOoEn35qlRiQm8iCp/luaNWqVQZI8erVq5e5dOmSadasmSlcuLDJmzevKV26tHnyySdNVFSUwzHOnDljunbtary8vIyPj4/p06ePuXDhgkObHTt2mPr16xt3d3dTvHhxM2HChBSxzJkzx1SoUMG4ubmZqlWrmsWLF6frWlRyQEREcoqNG43x9rbKCrRqZcw1VXnuOOn5/rYZY4wTc7ZcIyYmBl9fX6KjozW+SUREsq2dO6FxYzh3Dh56CBYvBg8PZ0flPOn5/lZHnIiIyB3iwAFo2tRKmB54AH788c5OmNJLSZOIiMgd4MgRa/6406ehZk1YsgSumaZV0kBJk4iISC4XGQnBwXD8OFSqBD//DP88QC7poKRJREQkF/v7bythOnwYypaFFSugcGFnR5UzKWkSERHJpaKjISQEfv8diheHlSutP+X2KGkSERHJhS5ehFatYOtWq2dpxQqrp0lun5ImERGRXObKFWjXDtatAz8/awxTpUrOjirnU9IkIiKSi8THw6OPWj1Lnp6wdKn1tJz8d0qaREREconEROjZ06q/lC8f/PSTVY9JMoaSJhERkVzAGOjXD779FvLkgXnzrIrfknGUNImIiORwxsALL/w76e4331iDwCVjKWkSERHJ4UaNgilTrOXPP4dOnZwaTq6lpElERCQHmzQJxo61lj/4AHr1cm48uZmSJhERkRzqo49g+HBrecIE6N/fufHkdkqaREREcqAvvvg3SXrllX+TJ8k8SppERERymHnzoG9fa3nAgH9vz0nmUtIkIiKSgyxZAt26QVKSlTi9+y7YbM6O6s6gpElERCSHCAuDDh3+rfo9fbpVYkCyhj5qERGRHGDjRmjTxppXrk0b+OorcHV1dlR3FiVNIiIi2dyOHdC8OcTGQpMmMGcO5M3r7KjuPEqaREREsrF9+6BpUzh/Hh58EBYutOaVk6ynpElERCSbioiA4GD46y+oVQsWLwYvL2dHdedS0iQiIpINnTxpJUwnTkDlyrB8Ofj5OTuqO5uSJhERkWzmr7+shOmPP6BcOVixAgoXdnZUoqRJREQkGzl/Hpo1g717oUQJWLkSihVzdlQCSppERESyjdhYaNkStm+HgACrh6lMGWdHJcmUNImIiGQDV65A27YQHg4FCkBoKFSs6Oyo5FpKmkRERJwsPh46dYJffrGejlu2DKpXd3ZUcj0lTSIiIk6UmAg9esCiRVb9pUWL4P77nR2VpEZJk4iIiJMkJcGTT8J331kVvufPh0aNnB2V3IiSJhEREScwBgYNghkzrEl3Z8+GFi2cHZXcjJImERERJ3j1VXj/fWt5xgzo0MG58citKWkSERHJYuPHw7hx1vJHH0HPns6NR9JGSZOIiEgWev99ePlla3nSJHjmGefGI2mnpElERCSLzJgBAwZYyyNHwrBhzo1H0kdJk4iISBaYOxeeeMJaHjwYxoxxbjySfkqaREREMtnixdCt278lBt5+G2w2Z0cl6aWkSUREJBP98ov1ZFxCgpU4ffyxEqacSkmTiIhIJgkPh4cfhrg4a165mTPB1dXZUcntcmrStGbNGtq0aUOxYsWw2WwsXLjQvi8+Pp7hw4cTFBSEp6cnxYoVo2fPnpw8edLhGGXKlMFmszm8JkyY4NBm586dNGjQgHz58lGyZEkmTZqUIpa5c+dSqVIl8uXLR1BQEEuWLMmUaxYRkTvDtm1WscqLF6Fp03+rfkvO5dSk6eLFi9SoUYMPP/wwxb5Lly6xdetWRo4cydatW5k/fz779+/n4YcfTtH29ddfJzIy0v56/vnn7ftiYmJo1qwZpUuXZsuWLUyePJnRo0czffp0e5v169fTtWtXHn/8cbZt20a7du1o164du3fvzpwLFxGRXG3vXmjWDKKjoX59WLAA3N2dHZX8VzZjjHF2EAA2m40FCxbQrl27G7b57bffuP/++zl69CilSpUCrJ6mQYMGMWjQoFTf8/HHH/PKK68QFRWFm5sbAC+99BILFy5k3759ADz66KNcvHiRRYsW2d/3wAMPULNmTaZNm5am+GNiYvD19SU6OhofH580vUdERHKfP/6ABg3g5EmoXRtWrgRfX2dHJTeSnu/vHDWmKTo6GpvNhp+fn8P2CRMmULBgQWrVqsXkyZNJSEiw7wsPD6dhw4b2hAkgJCSE/fv3c+7cOXub4OBgh2OGhIQQHh6eeRcjIiK5zvHjEBxsJUxVq8KyZUqYcpM8zg4gra5cucLw4cPp2rWrQyY4YMAA7rnnHvz9/Vm/fj0jRowgMjKSd955B4CoqCjKli3rcKwiRYrY9xUoUICoqCj7tmvbREVF3TCeuLg44uLi7OsxMTH/+RpFRCTnOn3aSpgiIqB8eQgNhUKFnB2VZKQckTTFx8fTuXNnjDF8/PHHDvteeOEF+3L16tVxc3Pj6aefZvz48bhn4g3k8ePHM0aVyUREBDh3zhrDtH8/lCwJK1ZA0aLOjkoyWra/PZecMB09epTQ0NBb3m+sU6cOCQkJHDlyBIDAwEBOnTrl0CZ5PTAw8KZtkvenZsSIEURHR9tff/75Z3ovTUREcoELF6BlS9ixA4oUsRKm0qWdHZVkhmydNCUnTAcPHmTFihUULFjwlu/Zvn07Li4uBAQEAFC3bl3WrFlDfHy8vU1oaCgVK1akQIEC9jYrV650OE5oaCh169a94Xnc3d3x8fFxeImIyJ3l8mWrDtOGDeDvb92Sq1DB2VFJZnHq7bnY2FgOHTpkX4+IiGD79u34+/tTtGhROnbsyNatW1m0aBGJiYn2MUb+/v64ubkRHh7Oxo0beeihh/D29iY8PJzBgwfz2GOP2ROibt26MWbMGB5//HGGDx/O7t27mTp1Ku+++679vAMHDqRRo0a8/fbbtGrVim+//ZbNmzc7lCUQERG51tWr0LEjhIWBt7c16DsoyNlRSaYyTrRq1SoDpHj16tXLREREpLoPMKtWrTLGGLNlyxZTp04d4+vra/Lly2cqV65sxo0bZ65cueJwnh07dpj69esbd3d3U7x4cTNhwoQUscyZM8dUqFDBuLm5mapVq5rFixen61qio6MNYKKjo2/78xARkZwhPt6YTp2MAWM8PIxZvdrZEcntSs/3d7ap05TTqU6TiMidISkJ+vaFL74ANzf48UcICXF2VHK7cm2dJhEREWcyBgYMsBImV1f49lslTHcSJU0iIiJpYAyMGAEffgg2mzX57iOPODsqyUpKmkRERNJg3DiYONFanjYNHnvMufFI1lPSJCIicgtTp8Krr1rLb70FTz3l3HjEOZQ0iYiI3MRnn0HynPCjR8OQIc6MRpxJSZOIiMgNfPstPPmktTxkCLz2mnPjEedS0iQiIpKKn36CHj2sAeBPPw2TJ1sDwOXOpaRJRETkOitWQKdOkJBgDfj+6CMlTKKkSURExMG6ddC2LcTFWSUFZswAF31bCkqaRERE7LZuhZYt4dIlq2jl7NmQx6mztEp2oqRJREQE2LMHmjWDmBho0ADmzwd3d2dHJdmJkiYREbnjHT4MTZvCmTNw332waBHkz+/sqCS7UdIkIiJ3tD//hCZNIDISqlWDpUtB865LapQ0iYjIHevUKQgOhqNH4e67ITQUChZ0dlSSXSlpEhGRO9LZs9YYpgMHoFQpq8xAYKCzo5LsTEmTiIjccS5cgBYtYOdOK1FaudJKnERuRkmTiIjcUS5dgjZtYNMm8Pe3bsmVL+/sqCQnUNIkIiJ3jLg46NABVq+2Bnv//LM1+FskLZQ0iYjIHSEhAbp1g2XLwMMDFi+G2rWdHZXkJEqaREQk10tKgr59rYKVbm7www9Qv76zo5KcRkmTiIjkasbAc8/BV1+BqyvMmWMVshRJLyVNIiKSaxkDw4fDxx+DzWYlTm3bOjsqyamUNImISK71xhswebK1/Mkn0LWrc+ORnE1Jk4iI5Ervvguvvfbv8pNPOjceyfmUNImISK7zv//BCy9Yy6+/DoMGOTUcySWUNImISK7yzTfw9NPW8rBh8Oqrzo1Hco886WmclJTE6tWrWbt2LUePHuXSpUsULlyYWrVqERwcTMmSJTMrThERkVv64Qfo2dMaAP7MMzBxojUAXCQjpKmn6fLly7zxxhuULFmSli1bsnTpUs6fP4+rqyuHDh1i1KhRlC1blpYtW7Jhw4bMjllERCSF0FDo3BkSE63E6YMPlDBJxkpTT1OFChWoW7cu//vf/2jatCl58+ZN0ebo0aN88803dOnShVdeeYUnNeJORESyyK+/WqUErl61pkn57DNw0QAUyWA2Y4y5VaO9e/dSuXLlNB0wPj6eY8eOcdddd/3n4HKSmJgYfH19iY6OxsfHx9nhiIjcMTZvhiZNICYGWrSAhQutqt8iaZGe7+805eFpTZgA8ubNe8clTCIi4hy7d0NIiJUwNWoE33+vhEkyT7o7L5ctW8avv/5qX//www+pWbMm3bp149y5cxkanIiIyI0cPGhNh3L2LNx/P/z0kzURr0hmSXfSNGzYMGJiYgDYtWsXQ4YMoWXLlkRERPBCclEMERGRTHTsGAQHQ1QUVK8OS5eCt7ezo5LcLl0lBwAiIiKoUqUKAN9//z2tW7dm3LhxbN26lZYtW2Z4gCIiIteKirLGMB07BhUqwM8/g7+/s6OSO0G6e5rc3Ny4dOkSACtWrKBZs2YA+Pv723ugREREMsOZM9YtuUOHoHRpWLECihRxdlRyp0h3T1P9+vV54YUXqFevHps2beK7774D4MCBA5QoUSLDAxQREQFrsHfz5tbg76JFYeVKUE1lyUrp7mn64IMPyJMnD/PmzePjjz+mePHiACxdupTmzZtneIAiIiKXLkHr1lZ5gUKFrB4mPagtWS1NdZrk1lSnSUQkc8TFwcMPW2OXfHxg1Sq45x5nRyW5RXq+v9N9ew6sOegOHTrE6dOnSUpKctjXsGHD2zmkiIhICvHx0KWLlTDlz289JaeESZwl3UnThg0b6NatG0ePHuX6TiqbzUZiYmKGBSciIneupCTo08eq8O3uDj/+CA8+6Oyo5E6W7jFN/fr1495772X37t2cPXuWc+fO2V9nz55N17HWrFlDmzZtKFasGDabjYULFzrsN8bw2muvUbRoUTw8PAgODubgwYMObc6ePUv37t3x8fHBz8+Pxx9/nNjYWIc2O3fupEGDBuTLl4+SJUsyadKkFLHMnTuXSpUqkS9fPoKCgliyZEm6rkVERDKOMfDsszBrFuTJA3PnWmUGRJwp3UnTwYMHGTduHJUrV8bPzw9fX1+HV3pcvHiRGjVq8OGHH6a6f9KkSbz33ntMmzaNjRs34unpSUhICFeuXLG36d69O3v27CE0NJRFixaxZs0annrqKfv+mJgYmjVrRunSpdmyZQuTJ09m9OjRTJ8+3d5m/fr1dO3alccff5xt27bRrl072rVrx+7du9P56YiIyH9lDAwbBp98AjYbfPUVtGnj7KhEAJNODz30kFm6dGl633ZLgFmwYIF9PSkpyQQGBprJkyfbt50/f964u7ub2bNnG2OM+f333w1gfvvtN3ubpUuXGpvNZk6cOGGMMeajjz4yBQoUMHFxcfY2w4cPNxUrVrSvd+7c2bRq1cohnjp16pinn346zfFHR0cbwERHR6f5PSIiktLo0cZYqZMxn33m7Ggkt0vP93e6e5qef/55hgwZwsyZM9myZQs7d+50eGWUiIgIoqKiCA4Otm/z9fWlTp06hIeHAxAeHo6fnx/33nuvvU1wcDAuLi5s3LjR3qZhw4a4XTODY0hICPv377fPlRceHu5wnuQ2yedJTVxcHDExMQ4vERH5b95+G0aPtpanToW+fZ0ajoiDdA8E79ChAwB9r/lNttlsGGMydCB4VFQUAEWuK/VapEgR+76oqCgCAgIc9ufJkwd/f3+HNmXLlk1xjOR9BQoUICoq6qbnSc348eMZM2bMbVyZiIik5pNPYOhQa/mNN2DAAOfGI3K925p7TmDEiBEOExTHxMRQUqVpRURuy9dfwzPPWMsvvQQvv+zceERSk+6kqXTp0pkRRwqBgYEAnDp1iqJFi9q3nzp1ipo1a9rbnD592uF9CQkJnD171v7+wMBATp065dAmef1WbZL3p8bd3R13d/fbuDIREbnWggXQu7c1ium552DcOGsAuEh2k6YxTRs2bEjzAS9dusSePXtuO6BkZcuWJTAwkJUrV9q3xcTEsHHjRurWrQtA3bp1OX/+PFu2bLG3+eWXX0hKSqJOnTr2NmvWrCE+Pt7eJjQ0lIoVK1KgQAF7m2vPk9wm+TwiIpI5li+HRx+FxEQrcZo6VQmTZGNpGVlevnx506xZMzNnzhwTGxubaps9e/aYESNGmMDAQPPFF1+kacT6hQsXzLZt28y2bdsMYN555x2zbds2c/ToUWOMMRMmTDB+fn7mhx9+MDt37jRt27Y1ZcuWNZcvX7Yfo3nz5qZWrVpm48aN5tdffzV333236dq1q33/+fPnTZEiRUyPHj3M7t27zbfffmvy589vPvnkE3ubdevWmTx58pi33nrL7N2714waNcrkzZvX7Nq1K03XYYyenhMRSa/Vq43x8LCekuvUyZj4eGdHJHei9Hx/pylpunr1qpk6daqpUKGCyZMnj6lSpYoJDg42rVu3NvXq1TMFCxY07u7upkuXLmbnzp1pDnTVqlUGSPHq1auXMcYqOzBy5EhTpEgR4+7ubpo0aWL279/vcIwzZ86Yrl27Gi8vL+Pj42P69OljLly44NBmx44dpn79+sbd3d0UL17cTJgwIUUsc+bMMRUqVDBubm6matWqZvHixWm+DmOUNImIpMemTcZ4e1sJU6tWxlxTFUYkS6Xn+zvdE/Zu3ryZX3/9laNHj3L58mUKFSpErVq1eOihh/D398/YbrAcRBP2ioikza5d0KgRnDsHDz0EixeDh4ezo5I7VaZO2Hvvvfc61EUSERFJqwMHoGlTK2F64AH44QclTJJzpLu4pYiIyO04ehSCg+HUKahZE5YsAW9vZ0clknZKmkREJNNFRloT7v75J1SqZD01988DzCI5hpImERHJVH//bd2SO3wYypaFFSvguskcRHIEJU0iIpJpoqMhJAT27IFixWDlSihe3NlRidye/5Q0XblyJaPiEBGRXObiRWjVCrZuhUKFrB6m66YCFclR0p00JSUlMXbsWIoXL46Xlxd//PEHACNHjuSzzz7L8ABFRCTnuXIFHnkE1q0DPz8IDYXKlZ0dlch/k+6k6Y033mDmzJlMmjQJNzc3+/Zq1arx6aefZmhwIiKS88THW1OjhIaCpycsXWo9LSeS06U7afryyy+ZPn063bt3x9XV1b69Ro0a7Nu3L0ODExGRnCUxEXr1gh9/BHd3688HHnB2VCIZI91J04kTJyhfvnyK7UlJSQ6T4oqIyJ3FGOjXD2bPhjx54Pvv4f/+z9lRiWScdCdNVapUYe3atSm2z5s3j1q1amVIUCIikrMYAy+8AJ9+Ci4uMGuWNQhcJDdJ9zQqr732Gr169eLEiRMkJSUxf/589u/fz5dffsmiRYsyI0YREcnmRo2CKVOs5c8+g86dnRqOSKZId09T27Zt+emnn1ixYgWenp689tpr7N27l59++ommTZtmRowiIpKNTZoEY8day++/D717OzUckUxjM8YYZweRG6RnlmQRkdzio4+gf39refx4eOkl58Yjkl7p+f5O9+25a8XGxpKUlOSwTQmDiMid4csv/02YXn5ZCZPkfum+PRcREUGrVq3w9PTE19eXAgUKUKBAAfz8/Cig2RdFRO4I338PffpYywMGwBtvODcekayQ7p6mxx57DGMMn3/+OUWKFMFms2VGXCIikk0tWQJdu0JSEvTtC+++C/oqkDtBupOmHTt2sGXLFipWrJgZ8YiISDYWFgYdOvxb9Xv6dKvEgMidIN2/6vfddx9//vlnZsQiIiLZ2MaN0KaNNa9c69bw1VdwzcQQIrleunuaPv30U/r168eJEyeoVq0aefPmddhfvXr1DAtORESyhx07oHlziI21qnzPnQvX/fMvkuulO2n666+/OHz4MH2SRwACNpsNYww2m43ExMQMDVBERJxr/35o2hTOn4cHH4QffoB8+ZwdlUjWS3fS1LdvX2rVqsXs2bM1EFxEJJc7cgSCg+Gvv6BWLVi8GLy8nB2ViHOkO2k6evQoP/74Y6qT9oqISO5x8iQ0aQLHj0PlyrB8Ofj5OTsqEedJ90Dw//u//2PHjh2ZEYuIiGQTf/1l9TD98QeUKwcrVkDhws6OSsS50t3T1KZNGwYPHsyuXbsICgpKMRD84YcfzrDgREQk650/DyEhsHcvFC8OK1dCsWLOjkrE+dI995zLTQpy3MkDwTX3nIjkBrGxVsK0fj0EBMCaNaCyfJKbZercc9fPNSciIrnDlSvQtq2VMPn5wc8/K2ESuZbquIqICPHx0Lkz/PKL9XTcsmVQo4azoxLJXtLU0/Tee+/x1FNPkS9fPt57772bth0wYECGBCYiIlkjMRF69ICffrLqL/30E9Sp4+yoRLKfNI1pKlu2LJs3b6ZgwYKULVv2xgez2fjjjz8yNMCcQmOaRCQnSkqCJ5+Ezz+3Knz/8AO0aOHsqESyToaPaYqIiEh1WUREci5jYPBgK2FycYHZs5UwidxMusc0vf7661y6dCnF9suXL/P6669nSFAiIpL5Ro6E5BEXM2ZAhw7OjUcku0t3yQFXV1ciIyMJCAhw2H7mzBkCAgJUckC350QkB5gwAUaMsJY//BCefda58Yg4S3q+v9Pd05Q8Me/1duzYgb+/f3oPJyIiWeyDD/5NmCZOVMIkklZprtNUoEABbDYbNpuNChUqOCROiYmJxMbG0q9fv0wJUkREMsbMmfD889byq6/Ciy86NRyRHCXNSdOUKVMwxtC3b1/GjBmDr6+vfZ+bmxtlypShbt26mRKkiIj8d3PnwuOPW8uDBoGGoYqkT5qTpl69egFW+YF69eqRJ0+6i4mLiIiTLF4M3bpZJQaeeALeeQdSGWkhIjeR7jFNjRo1sidMrVq1IjIyMsODEhGRjPPLL9aTcQkJ0LUrTJumhEnkdvynaVTWrFnD5cuXMyoWERHJYOHh8PDDEBdn/fnFF+Dq6uyoRHImzT0nIpJLbd9uFau8eBGCg+G776yq3yJye/5T0lS6dGnyZvLfwDJlytif2rv21b9/fwAaN26cYt/1T/EdO3aMVq1akT9/fgICAhg2bBgJCQkObcLCwrjnnntwd3enfPnyzJw5M1OvS0QkM+3dC82aQXQ01KsHCxda88qJyO37T6O5d+/enVFx3NBvv/3mUDBz9+7dNG3alE6dOtm3Pfnkkw7VyPPnz29fTkxMpFWrVgQGBrJ+/XoiIyPp2bMnefPmZdy4cYA1NUyrVq3o168fs2bNYuXKlTzxxBMULVqUkJCQTL9GEZGM9McfVs/SX3/BPfdYg8A9PZ0dlUjOl+6K4ADnz59n06ZNnD59mqSkJId9PXv2zLDgUjNo0CAWLVrEwYMHsdlsNG7cmJo1azJlypRU2y9dupTWrVtz8uRJihQpAsC0adMYPnw4f/31F25ubgwfPpzFixc7JIFdunTh/PnzLFu2LE1xqSK4iGQHJ05AgwYQEQFVqsDq1VCokLOjEsm+MnzC3mv99NNPdO/endjYWHx8fByKXNpstkxNmq5evcrXX3/NCy+84HDeWbNm8fXXXxMYGEibNm0YOXKkvbcpPDycoKAge8IEEBISwjPPPMOePXuoVasW4eHhBAcHO5wrJCSEQYMG3TCWuLg44uLi7OsxMTEZdJUiIrfn9GmrhykiAu66C1asUMIkkpHSnTQNGTKEvn37Mm7cOIfbYFlh4cKFnD9/nt69e9u3devWjdKlS1OsWDF27tzJ8OHD2b9/P/PnzwcgKirKIWEC7OtRUVE3bRMTE8Ply5fx8PBIEcv48eMZM2ZMRl6eiMhtO3fOGsO0bx+ULAkrV0LRos6OSiR3SXfSdOLECQYMGJDlCRPAZ599RosWLShWrJh921NPPWVfDgoKomjRojRp0oTDhw9z1113ZVosI0aM4IUXXrCvx8TEULJkyUw7n4jIjVy4AC1bwo4dUKSI1cNUurSzoxLJfdL99FxISAibN2/OjFhu6ujRo6xYsYInnnjipu3q1KkDwKFDhwAIDAzk1KlTDm2S1wMDA2/axsfHJ9VeJgB3d3d8fHwcXiIiWe3yZWjbFjZsgAIFIDQUKlRwdlQiuVO6e5patWrFsGHD+P333wkKCkpRcuDhhx/OsOCuNWPGDAICAmjVqtVN223fvh2Aov/0S9etW5c333yT06dPExAQAEBoaCg+Pj5UqVLF3mbJkiUOxwkNDdVceiKSrV29Cp06wapV4O0Ny5dDUJCzoxLJvdL99JyLy407p2w2m0N5gIySlJRE2bJl6dq1KxMmTLBvP3z4MN988w0tW7akYMGC7Ny5k8GDB1OiRAlWr14NWCUHatasSbFixZg0aRJRUVH06NGDJ554wqHkQLVq1ejfvz99+/bll19+YcCAASxevDjNJQf09JyIZKWEBGsuublzwcMDli2Dhg2dHZVIzpOu72+TAyxfvtwAZv/+/Q7bjx07Zho2bGj8/f2Nu7u7KV++vBk2bJiJjo52aHfkyBHTokUL4+HhYQoVKmSGDBli4uPjHdqsWrXK1KxZ07i5uZly5cqZGTNmpCvG6OhoA6Q4t4hIRktMNKZ3b2PAmLx5jVm2zNkRieRc6fn+vq06TZKSeppEJCsYAwMGwAcfWHPIzZ0Ljzzi7KhEcq5MrdN0beXt1Lz22mvpPaSIiKTRyy9bCZPNBjNnKmESyUrpTpoWLFjgsB4fH09ERAR58uThrrvuUtIkIpJJxo2D5GGdH38Mjz3m3HhE7jTpTpq2bduWYltMTAy9e/fmEf2XR0QkU7z3HrzyirX81lvw9NPOjUfkTpTuOk2p8fHxYcyYMYwcOTIjDiciItf4/HMYONBaHjUKhgxxbjwid6oMSZoAoqOjiY6OzqjDiYgI8N13kFzT94UXrKRJRJwj3bfn3nvvPYd1YwyRkZF89dVXtGjRIsMCExG50/30kzVuyRjrdtxbb1kDwEXEOdKdNL377rsO6y4uLhQuXJhevXoxYsSIDAtMROROtnKlVe07IQG6d4ePPlLCJOJs6U6aIiIibrjv8uXL/ykYERGB9evh4YchLg7atbNKC9xkMgYRySIZ8tcwLi6Od955h7Jly2bE4URE7lhbt0LLlnDpEjRrBt9+C3nS/d9bEckMaU6a4uLiGDFiBPfeey8PPvggCxcuBODzzz+nbNmyvPvuuwwePDiz4hQRyfV+/91KlKKjoUEDWLAA3N2dHZWIJEvz/19ee+01PvnkE4KDg1m/fj2dOnWiT58+bNiwgXfeeYdOnTrh6uqambGKiORahw9DcDCcOQP33guLFkH+/M6OSkSuleakae7cuXz55Zc8/PDD7N69m+rVq5OQkMCOHTuwaXSiiMht+/NPaNIEIiOhWjVYtgw0haVI9pPm23PHjx+ndu3aAFSrVg13d3cGDx6shElE5D84dcrqYTp6FMqXh9BQKFjQ2VGJSGrSnDQlJibi5uZmX8+TJw9eXl6ZEpSIyJ3g7FlrDNOBA1CqlFVmIDDQ2VGJyI2k+facMYbevXvj/s+oxCtXrtCvXz88PT0d2s2fPz9jIxQRyYUuXIAWLWDnTihSBFassBInEcm+0pw09erVy2H9MU2vLSJyWy5dgjZtYNMm8Pe3Eqa773Z2VCJyK2lOmmbMmJGZcYiI3BGuXoWOHWH1avD2huXLrcHfIpL9qcasiEgWSUiAbt1g6VLw8IDFi63yAiKSMyhpEhHJAklJ0LcvfP89uLnBwoVWAUsRyTmUNImIZDJj4Lnn4KuvwNUV5syxnpoTkZxFSZOISCYyBoYPh48/BpsNvvwS2rZ1dlQicjuUNImIZKI33oDJk63lTz6xxjSJSM6kpElEJJNMmQKvvWYtv/MOPPmkU8MRkf9ISZOISCb49FMYPNhaHjPm32URybmUNImIZLDZs+Gpp6zlYcNg5EjnxiMiGUNJk4hIBvrhB+jRwxoA/swzMHGiNQBcRHI+JU0iIhkkNBQ6d4bERCtx+uADJUwiuYmSJhGRDPDrr9CunTVNSvv28Pnn4KJ/YUVyFf2VFhH5j7ZsgVatrIl4mze3xjTlSfPMniKSUyhpEhH5D/bsgZAQiImBhg3/nSZFRHIfJU0iIrfp0CEIDoYzZ+C+++CnnyB/fmdHJSKZRUmTiMhtOHYMmjSBqCgICoJly8DHx9lRiUhmUtIkIpJOUVFWD9OxY1ChgvXUnL+/s6MSkcympElEJB3OnIGmTeHgQShdGlasgCJFnB2ViGQFJU0iImkUE2M9Hbd7NxQtaiVMJUs6OyoRySpKmkRE0uDSJWjdGjZvhoIFrYSpfHlnRyUiWUlJk4jILcTFWQUr1661Bnv//DNUqeLsqEQkqylpEhG5iYQE6NoVli+3ygksWQL33OPsqETEGZQ0iYjcQFIS9OkDCxZYBSt/+AHq1XN2VCLiLEqaRERSYQw8+yx8/TW4usLcuVaZARG5c2XrpGn06NHYbDaHV6VKlez7r1y5Qv/+/SlYsCBeXl506NCBU6dOORzj2LFjtGrVivz58xMQEMCwYcNISEhwaBMWFsY999yDu7s75cuXZ+bMmVlxeSKSTRkDw4bBJ5+AzWYlTg8/7OyoRMTZsnXSBFC1alUiIyPtr19//dW+b/Dgwfz000/MnTuX1atXc/LkSdq3b2/fn5iYSKtWrbh69Srr16/niy++YObMmbz22mv2NhEREbRq1YqHHnqI7du3M2jQIJ544gmWL1+epdcpItnH66/D229by//7H3Tp4tx4RCSbMNnYqFGjTI0aNVLdd/78eZM3b14zd+5c+7a9e/cawISHhxtjjFmyZIlxcXExUVFR9jYff/yx8fHxMXFxccYYY1588UVTtWpVh2M/+uijJiQkJF2xRkdHG8BER0en630ikr289ZYxVl+TMVOmODsaEcls6fn+zvY9TQcPHqRYsWKUK1eO7t27c+zYMQC2bNlCfHw8wdcMMqhUqRKlSpUiPDwcgPDwcIKCgihyTbnekJAQYmJi2LNnj71N8HUDFUJCQuzHuJG4uDhiYmIcXiKSs33yCQwdai2/8QYMHOjceEQke8nWSVOdOnWYOXMmy5Yt4+OPPyYiIoIGDRpw4cIFoqKicHNzw8/Pz+E9RYoUISoqCoCoqCiHhCl5f/K+m7WJiYnh8uXLN4xt/Pjx+Pr62l8lVRZYJEf7+mt45hlrefhwePll58YjItlPHmcHcDMtWrSwL1evXp06depQunRp5syZg4eHhxMjgxEjRvDCCy/Y12NiYpQ4ieRQCxZA797WTbn+/WH8eGsAuIjItbJ1T9P1/Pz8qFChAocOHSIwMJCrV69y/vx5hzanTp0iMDAQgMDAwBRP0yWv36qNj4/PTRMzd3d3fHx8HF4ikvMsXw6PPgqJidCrF7z3nhImEUldjkqaYmNjOXz4MEWLFqV27drkzZuXlStX2vfv37+fY8eOUbduXQDq1q3Lrl27OH36tL1NaGgoPj4+VPlnDoS6des6HCO5TfIxRCT3WrMGHnkE4uOhY0f49FNwyVH/KopIVsrW/zwMHTqU1atXc+TIEdavX88jjzyCq6srXbt2xdfXl8cff5wXXniBVatWsWXLFvr06UPdunV54IEHAGjWrBlVqlShR48e7Nixg+XLl/Pqq6/Sv39/3N3dAejXrx9//PEHL774Ivv27eOjjz5izpw5DB482JmXLiKZ7LffrAl4L1+Gli1h1izIk60HLIiIs2XrfyKOHz9O165dOXPmDIULF6Z+/fps2LCBwoULA/Duu+/i4uJChw4diIuLIyQkhI8++sj+fldXVxYtWsQzzzxD3bp18fT0pFevXrz++uv2NmXLlmXx4sUMHjyYqVOnUqJECT799FNCQkKy/HpFJHMkJlqT7UZGQtGi4OcHISFw4QI0bgzz5lnTpIiI3IzNGGOcHURuEBMTg6+vL9HR0RrfJJKNzJ9vlQ44fvzfbS4u1rxydepAaCh4ezsvPhFxrvR8f2frniYRkf9i/nxrrNL1/zVMSrL+fPZZJUwiknbZekyTiMjtSky0ephu1Jdus8Grr1rtRETSQkmTiORKa9c63pK7njHw559WOxGRtFDSJCK50smTaWsXGZm5cYhI7qGkSURynS1b4O2309a2aNHMjUVEcg8lTSKSa0REQLducO+9sHXrzdvabFCyJDRokDWxiUjOp6RJRHK8v/+GwYOhYkWYPdva9thj8PHHVnJ0/bQoyetTpoCra5aGKiI5mEoOiEiOdekSTJ0KEyZATIy1rWlTmDgRatWy1gMCUtZpKlHCSpjat8/ykEUkB1PSJCI5TmIifPEFvPYanDhhbatZEyZNspKma7VvD23bOlYEb9BAPUwikn5KmkQkxzAGliyB4cNhzx5rW+nS8MYb1limG0226+pqTZciIvJfKGkSkRxh0yZ48UVYvdpaL1AAXnkF+veHfPmcG5uI3BmUNIlItnb4MLz8MsyZY627u1tjlF56yUqcRESyipImEcmWTp+GsWNh2jRISLCeeOvZE15/HUqVcnZ0InInUtIkItnKxYvw7rvWoO4LF6xtzZtbT8RVr+7c2ETkzqakSUSyhYQEmDEDRo36d2qT2rWt5On//s+5sYmIgJImEXEyY+DHH2HECNi719pWtiy8+SY8+uiNn4gTEclqSppExGk2bIBhw+DXX631ggVh5Ejo188a8C0ikp0oaRKRLHfggNWzNH++tZ4vnzUNyvDh4Ovr3NhERG5ESZOIZJlTp2DMGJg+3arq7eICffpY24oXd3Z0IiI3p6RJRDJdbCy8/TZMnmw9HQfQurU1Z1zVqs6NTUQkrZQ0iUimiY+HTz+1epJOnbK23XeflTw1auTc2ERE0ktJk4hkOGNgwQJr3NKBA9a28uVh3Djo2NEqVCkiktMoaRKRDLVunfVEXHi4tV64MLz2Gjz1FLi5OTc2EZH/QkmTiGSIvXutnqUffrDW8+eHF16wEigfH+fGJiKSEZQ0ich/EhkJo0dbY5eSksDVFR5/3NpWtKizoxMRyThKmkTktsTEWAO633kHLl2ytrVtC+PHQ+XKzo1NRCQzKGkSkXS5etWqs/T66/DXX9a2Bx6wEqj69Z0bm4hIZlLSJCJpYgzMm2eNWzp82NpWoYLVs/TII3oiTkRyPyVNInJLq1fDiy/Cpk3WepEi1pilxx+HvHmdGpqISJZR0iQiN7RnD7z0EixaZK17elpPww0ZAl5ezo1NRCSrKWkSkRROnLBqK82c+e8TcU89ZW0LDHR2dCIizqGkSUTsoqNh4kSYMgUuX7a2dehgVfKuUMGpoYmIOJ2SJhEhLg6mTYOxY+HMGWtb/fowaRLUrevc2EREsgslTSJ3sKQkmDMHXn4ZIiKsbZUqwYQJ8PDDeiJORORaSppE7lC//GI9Ebdli7UeGGjVXurTB/LoXwYRkRT0T6PIHWbnThg+HJYts9a9va3kafBg6+k4ERFJnZImkTvEsWPW029ffmkVqsyTB/r1g5EjISDA2dGJiGR/SppEcrlz56wxSlOnWgO+ATp3hjffhPLlnRubiEhOoqRJJJe6cgU+/NBKjs6ds7Y1amQ9EXf//c6NTUQkJ3JxdgA3M378eO677z68vb0JCAigXbt27N+/36FN48aNsdlsDq9+/fo5tDl27BitWrUif/78BAQEMGzYMBISEhzahIWFcc899+Du7k758uWZOXNmZl+eSKZISoKvv7aeghs61EqYqla1qnqvWqWESUTkdmXrpGn16tX079+fDRs2EBoaSnx8PM2aNePixYsO7Z588kkiIyPtr0mTJtn3JSYm0qpVK65evcr69ev54osvmDlzJq+99pq9TUREBK1ateKhhx5i+/btDBo0iCeeeILly5dn2bWKZITQUKhdG3r0gKNHoXhx+Owz2LEDWrVSCQERkf/CZowxzg4irf766y8CAgJYvXo1DRs2BKyeppo1azJlypRU37N06VJat27NyZMnKVKkCADTpk1j+PDh/PXXX7i5uTF8+HAWL17M7t277e/r0qUL58+fZ1nyI0a3EBMTg6+vL9HR0fj4+Py3CxVJp23brCfiQkOtdR8fa864gQMhf37nxiYikp2l5/s7W/c0XS86OhoAf39/h+2zZs2iUKFCVKtWjREjRnDp0iX7vvDwcIKCguwJE0BISAgxMTHs2bPH3iY4ONjhmCEhIYSHh2fWpYhkiCNHrF6le+6xEqa8eWHQIDh8GEaMUMIkIpKRcsxA8KSkJAYNGkS9evWoVq2afXu3bt0oXbo0xYoVY+fOnQwfPpz9+/czf/58AKKiohwSJsC+HhUVddM2MTExXL58GQ8PjxTxxMXFEZf8KBJWpiqSVc6etQZ4f/ABXL1qbevaFd54A8qVc25sIiK5VY5Jmvr378/u3bv59ddfHbY/9dRT9uWgoCCKFi1KkyZNOHz4MHfddVemxTN+/HjGjBmTaccXSc3ly/D++zB+PJw/b237v/+znoirXdupoYmI5Ho54vbcc889x6JFi1i1ahUlSpS4ads6deoAcOjQIQACAwM5deqUQ5vk9cDAwJu28fHxSbWXCWDEiBFER0fbX3/++Wf6L0wkjRITYeZMqFDBGrt0/jxUrw5Ll8KKFUqYRESyQrZOmowxPPfccyxYsIBffvmFsmXL3vI927dvB6Bo0aIA1K1bl127dnH69Gl7m9DQUHx8fKhSpYq9zcqVKx2OExoaSt2bTO/u7u6Oj4+Pw0skoxljJUa1allzwh0/DiVLWgnU1q3QvLmeiBMRySrZOmnq378/X3/9Nd988w3e3t5ERUURFRXF5cuXATh8+DBjx45ly5YtHDlyhB9//JGePXvSsGFDqlevDkCzZs2oUqUKPXr0YMeOHSxfvpxXX32V/v374+7uDkC/fv34448/ePHFF9m3bx8fffQRc+bMYfDgwU67dpHNm6FJE2jZEnbtAj8/6zbc/v3Qqxe4ujo7QhGRO4zJxoBUXzNmzDDGGHPs2DHTsGFD4+/vb9zd3U358uXNsGHDTHR0tMNxjhw5Ylq0aGE8PDxMoUKFzJAhQ0x8fLxDm1WrVpmaNWsaNzc3U65cOfs50io6OtoAKc4tkl6HDxvTpYsxVj+TMW5uxgwZYsyZM86OTEQk90nP93eOqtOUnalOk/xXf/9tPf320UcQH2/dduveHcaOhTJlnB2diEjulJ7v7xzz9JxIbnXpEkyZAhMnQnLlimbNrPWaNZ0ZmYiIXEtJk4iTJD8R99prcPKkta1mTWvcUtOmzoxMRERSo6RJJIsZA4sXW9Oc/FOUntKlrWKVXbuCS7Z+PENE5M6lpEkkC23cCC++CGvWWOsFCsCrr8Kzz0K+fM6NTUREbk5Jk0gWOHQIXn4Z5s611t3drTniXnrJKiUgIiLZn5ImkUx0+jS8/jp88gkkJFhPxPXqZW0rWdLZ0YmISHooaRLJBBcvwjvvWIO6Y2OtbS1awIQJ1vQnIiKSdomJiaxdu5bIyEiKFi1KgwYNcHVChV8lTSIZKCEBPv8cRo2CqChrW+3aVvL0f//n3NhERHKi+fPnM3DgQI4fP27fVqJECaZOnUr79u2zNBY9pyOSAYyBhQshKAieftpKmMqWhdmzYdMmJUwiIrdj/vz5dOzY0SFhAjhx4gQdO3Zk/vz5WRqPkiaR/yg8HBo0gEcegX37oGBBq1jl3r3QpYtKCIiIpJcxhosXL/L888+T2sQlydsGDRpEYmJilsWl23Mit2n/fuuJuOT/6Hh4wODBVkkBX1/nxiYikpWSkxibzQZAVFQUBw8e5MKFC1y4cIHY2Fj78oULF3jqqacoX748AAsWLGDChAkp2t0qGTLG8Oeff7J27VoaN26cqdeXTEmTSDpFRcGYMfC//1lVvV1coE8fa1vx4s6OTkQk7WJiYjh16lSKhCV5uVu3bhQpUgSAhQsXMnPmTIfkJ7ldbGwsq1evpl69egB89913DBo06Ibnfeihh+xJ0/nz59m0adNtX0NkZORtvze9lDSJpNGFC/D22/DWW9bTcQCtW1tPxFWt6tzYRCR3S0pK4uLFiyl6bJLXW7dujbe3NwA//fQTixYtSpHUJL9nxYoVVK5cGYApU6YwatSoG563Tp069qQpIiKCH3744YZtL1y4YF8uUqQId999N97e3nh7e+Pl5eWwXKpUKXvbJk2a8MMPPzi08fb2Ztu2bbRp0+aWn03RokVv2SajKGkSweoxWrsWIiOhaFFrjFLy06zx8fDppzB6tFV3CeD++2HyZGjY0Gkhi0g2lpSURGxsbIokp169eri5uQGwfPly1q9fn+rtq9jYWBYvXkxgYCAAQ4cO5d13373h+fbs2UOVKlUA2LJlC9OnT79h2+joaPuyj4/PDRMbb29v/K6pvhscHMwnn3ySok3yn4UKFbK37dKlC126dEnTZ1WqVCmHJCpZYGAgJUqU4MSJE6mOa7LZbJQoUYIGDRqk6TwZQUmT3PHmz4eBA+HahzNKlLAGc4M1bunAAWu5fHkYNw46drQKVYpI7pCQkODQK1OpUiX7+Jw1a9awZ8+eG/byzJkzB09PTwAGDx7M//73Py4md0df58SJExQrVgyApUuXMnXq1BvGdP78eXvS5OXlBYCLi0uKZMXb25s8ef79On/ooYdwcXFJNRny9vamQoUK9raDBg266W20awUFBREUFJSmthnB1dWVqVOn0rFjR2w2m0PilPyzmTJlSpbWa1LSJHe0+fOtBOj6/8QcP25tT1a4MLz2Gjz1FPzzn0QRcaLkJOfanpCtW7dy7NixG465+d///mf/sh0yZAgLFy6077t8+bLD8WNjY+2J0IwZM5g5c+YNY4mJibG3Tb6NlszV1dUhYYmPj7fva9CgAVevXk01sfHy8qL4NYMkX3rpJV566SU8PDzs13AjjRo1olGjRjf/AHOI9u3bM2/evFTrNE2ZMiXL6zTZTGp9XpJuMTEx+Pr6Eh0djY+Pj7PDkTRITIQyZRx7mK5ns1k9TS++CPqximSMw4cPc/r06VSfrEpISGDkyJH2tiNGjGDNmjUpenni4uJwdXUlPj7enkQ88sgjLFy48IbnvXjxIvnz5wegd+/efPHFFyna5MmTB29vb/bv30/hwoUB+PDDD1m5cmWqiY23tzedO3e29wRFRUVx6dIlext3d/dbJjlya5lZETw9399KmjKIkqacJywMHnro1u1WrYIseppVJFs5d+4c58+fT/W2lM1mo1evXva2Y8aMYdeuXan28ri7u3PixAl724ceeoiwsLBUz5k3b16uXr1qX2/Xrt1NBx9funQJDw8PAF555RVWrVp1w9tSgwYNsrfdu3cv586dS9HO3d39v3xkkgOl5/tbt+fkjmMM7NxpTaKbFln4NKtkkuwyb1VmMcZw5cqVVB8Zd3V1pWnTpva2b731FhEREan28hQsWJA1a9bY2zZp0oRt27ales5ChQo5JE2rVq1i9erVqba9PhEpWbIkZcuWveEA5KSkJFz+qQo7ZMgQevbsecNeHrdr7pe/+eabaf7Mkp8eE0kPJU1yRzh3DkJDYdky65WeRCgLn2aVTJCd5q1KZozh0qVLDgmLq6sr1a+ZzXn69Omp1s+5cOECJUqUcLi1VLFiRQ4ePJjqucqXL++w7+uvv2bHjh2ptg0ICHBY9/b2xsPDI9XE5tonpQCef/55OnfunGpik/wofLIvv/wybR8UZOmTUSK3oqRJcqWkJNi61UqQli6FDRusbcny57duua1fD9HRKQeCgzWeqUQJq/yA5EzJ81ZdPwohed6qefPmpSlxSp7SIbkOzbV1YebOnZviFlbyctmyZRk7dqy9bVBQEMeOHSM2Npaka38hgXvvvZfffvvNvj5+/HiOHDmSajzXPv0E2G85AXh6ejokLGXKlHFo+/jjj/PXX3+lmtj4XlfKftWqVfYen1vp0KFDmtqJ5GQa05RBNKbJ+f7+G37+2UqSli+Hv/5y3F+lCjRvDi1aQP36kC/fv0/PgWPilDxuc948cFJnhPxHiYmJlClTJsVEn9fy8fGhb9++VKxYkX79+tm3P/DAA5w7d86eAMXGxtoTr+DgYEJDQ+1tCxQowPnz51M9/n333edQ6bh06dIcO3bMoU1y0lKjRg2WLl1q3z58+PBUx9x4eXlRuHBhmjVrZm/7999/4+bmhqenZ6667SiSFTQQ3AmUNGW9xETYtOnf3qTNmx0THy8vCA62kqSQEChdOvXjpFanqWRJq06TEibnM8YQGxvL2bNncXV1pUSJEgDEx8fz1ltvce7cOc6ePevwOnfuHFWqVOHnn39O0zmaNm3q0NbPz8+hAGAym81G48aN+eWXX+zbunTpwuXLl1MtDFiqVCk6XlO74vfff7c/neXt7U3+/PnT3JMjIplDSZMTKGnKGlFRVi/S0qVWr9K5c477a9SwepOaN4cHH0x7TaWbVQSXjJGYmEh0dHSKBKdo0aI89M9jjJcvX6Zz584p2iQkJADQuXNnvvvuO8Cqh5MnT55UKwUDVKtWjd27d98yrtatW9O+fXv69Olj37Zy5Ury5s2bopcnf/78enxcJJfR03OSa8THQ3j4vwO4r3+Qx88Pmjb9tzfpn0K76ebqqrIC6ZGQkMDBgwdTJDfJr1q1avHEE08A1j9IZcqU4fz586kmOJ06dbInTe7u7ixevDjVdm5ubg7bXVxcePbZZ8mXLx8FChTA39/f4fXHH3/QuXPnW17LkCFDUsyQ3qRJk/R8HCJyh1DSJNnO8eP/3nJbsQJiYhz3165tJUnNm0OdOpBHv8Xplvz0VmJiov1/VpcuXWLWrFkOt7iuTYRatmzJuHHjAGtizuR5rlLTqVMne9Lk5eXlkDB5eXk5JDfVqlWzv8/FxYUZM2bg7e2dIglKrRLyBx98cMMYatasme3mrRKRnE1fN+J0cXGwbp2VJC1bBtffUSlY0OpFat7c+vO6p6IzRE6t45OUlER0dLRDglOkSBFq1KgBWMUJBw8enGoidPXqVZ566ik++adgVfL6jVz7xJavry+FChXCz8/PIbFJ7vGpWbOmva2Liwt79+7Fz8+PAgUKONTVSc21tX/+i+w4b5WI5GxKmsQpIiL+7U365Re4dm5Lm83qQUruTapdO3PHF2WHOj5JSUmcOXPmhre77rnnHtq2bQvAyZMnadSokT0Jur4X5dpEyMXFJdWpIpJd+9SXj48PDz/8cKq3uvz9/Sl9zUh6FxcX/rr+8cSbqFixYprbZqTsNm+ViORsGgieQTQQ/OYuX4Y1a/7tTdq/33F/kSL/DuBu2tTqXcoKN6rjk9wTkdY6PmDd8kpKSrL3XFy4cIEVK1akeKoreblt27Y8//zzAERERFCuXLkbHvvJJ59k+vTpAERHRztMUgpWbZ7kZKddu3aMGTPGHtOkSZNS7Q3y9/fH09PzjhjYnFN7EkUk82kguDidMXDw4L+9SWFhcOXKv/tdXa2n25LrJtWoAVn95HViYiIDBw5MdbyLMQabzcazzz5LjRo1uOuuuwA4deoUkydPvmGP0KBBg5gwYQJg1c65WcJ1bZLk7+8PkOJ2V3KSc+24Gx8fH9auXeuw/0bzZdlsNoYPH57+DyeXcXV1TTHYW0QkvZQ0ZXPOehT+ds578aI1uW1yb9IffzjuL1783ySpSRPrybfMFh8fz5kzZ+yvv//+mzNnzhAUFMSVK1duWvjQGMOpU6cYOXIk33zzDWA9Ev/222/f8D1nz561LxcsWJC6deumeqvL39/fYe4rHx8fEhIS0tT7YbPZqF+/flouX0REMpCSpmxs/nwYMCCREyfWApFAUYoXb8B777lmatHFtJ7XGPj993/LAaxZA9dMTk7evFaylZwoVa36b6Xt25GQkEBUVJRD8pP855kzZwgODqZ169YA7N69m3r16hFz/aN3/3jxxRcdBivfTFxcnH25cOHCDB069IaJ0LXzcfn4+LB+/fo0ncNms+l2kYhINqekKZuaPx86dJgPDAT+7Q05caIEHTpM5fvv22dK4nSr8371VXs8Pf/tTfrzT8f3lynz7wDuhx6C6+bpTCEmJobw8HCH5OfahKhHjx72p6l27txJ7dq1b3gsNzc3e9Lk7e1tT5hsNhsFChSgUKFCFCxYkIIFC1KxYkWH+cNuJnncEVhjhyZPnpym94mISO6ipCkbSkyEp56aD3QErh9vcwLoyFNPzaNt2/YZeqsuLeft0WMe8G+25uaWRL1652nWLA+PPOJDhQoQFRXJN998Q3j436neGhs6dChDhgwB4PDhwzRv3vyGMd1zzz325YIFC5InTx6H5KdgwYL29WvHrBQvXpx9+/bZH4tPrRcnMTFRdXxERCTNlDRlQ2FhiZw5M5CUiQv/bLNx5kx/6tSpgL+/jXz5iuLubg0kjo+P4cKFA9hsSRiTBBiMSV5OwsurHPnzl/yn7XnOnNlg33fuXAJnzjx1k/MCdCdv3lp4ep4lKelvYmPPsWpVEs2ajadixZcAiIqKYujQoTe8vqioKPtyQEAANWrUuGEilFxvCKBUqVJcvXo1TU975cmT55aPuauOj4iIpIeSpmwoLGwt194aS8kAUWzZEvTP+jTg6X+WNwFNb/Let4EX/lneC7RIZ3RXiI8P5/pJ3a8dO1S8eHG6d++eahJUsGBBSpYs6dB2+/btaTpzZjwarzo+IiKSVkqasqXINLXKm9cLd3cP2rVzp25da9uhQx7MnFnqn5nTbdhsLvaXi4sLTZr4U6eO1fbECS9mzbrnn/02zp8/S0zM4Vuet2PHQTz3XDt7IuTv7+9Q5TkgIICvv/46vRftNO3bt6dt27aq4yMiIjel4pYZJCOLW65cGUZw8EO3bLdixSqaNGn8n86VHc4rIiLiLOn5/lbSlEEyMmlKTEykSJEynDlzgtTHF9koWLAEp05FZGhviLPOKyIi4izp+f7O4hrMkhaurq5Mnz71n7Xrx/FY69OnZ/wAZWedV0REJCdQ0nSdDz/8kDJlypAvXz7q1KnDpk2bnBJH+/bt+f77eZQoUdxhe4kSJfj++7TPh5ZTzisiIpLd6fbcNb777jt69uzJtGnTqFOnDlOmTGHu3Lns37+fgICAm743sybsddZEo5rgVERE7gQa03Sb6tSpw3333ccHH3wAQFJSEiVLluT555/npZdeuul7MytpEhERkcyjMU234erVq2zZsoXg4GD7NhcXF4KDgwkPD0/RPi4ujpiYGIeXiIiI5F5Kmv7x999///P0WBGH7UWKFHGoYJ1s/Pjx+Pr62l/XFmwUERGR3EdJ020aMWIE0dHR9tef189cKyIiIrmKKoL/o1ChQri6unLq1CmH7adOnSIwMDBFe3d3d9zd3bMqPBEREXEy9TT9w83Njdq1a7Ny5Ur7tqSkJFauXEnd5DlKRERE5I6lnqZrvPDCC/Tq1Yt7772X+++/nylTpnDx4kX69Onj7NBERETEyZQ0XePRRx/lr7/+4rXXXiMqKoqaNWuybNmyFIPDRURE5M6jOk0ZRHWaREREch7VaRIRERHJYLo9l0GSO+xU5FJERCTnSP7eTsuNNyVNGeTChQsAKnIpIiKSA124cAFfX9+bttGYpgySlJTEyZMn8fb2xmazOTucDBETE0PJkiX5888/74hxWrre3E3Xm7vpenO/zLpmYwwXLlygWLFiuLjcfNSSepoyiIuLCyVKlHB2GJnCx8fnjvlLCbre3E7Xm7vpenO/zLjmW/UwJdNAcBEREZE0UNIkIiIikgZKmuSG3N3dGTVq1B0zx56uN3fT9eZuut7cLztcswaCi4iIiKSBeppERERE0kBJk4iIiEgaKGkSERERSQMlTSIiIiJpoKRJHIwfP5777rsPb29vAgICaNeuHfv373d2WFlmwoQJ2Gw2Bg0a5OxQMtWJEyd47LHHKFiwIB4eHgQFBbF582Znh5UpEhMTGTlyJGXLlsXDw4O77rqLsWPHpmmeqZxgzZo1tGnThmLFimGz2Vi4cKHDfmMMr732GkWLFsXDw4Pg4GAOHjzonGAzwM2uNz4+nuHDhxMUFISnpyfFihWjZ8+enDx50nkB/0e3+vleq1+/fthsNqZMmZJl8WW0tFzv3r17efjhh/H19cXT05P77ruPY8eOZUl8SprEwerVq+nfvz8bNmwgNDSU+Ph4mjVrxsWLF50dWqb77bff+OSTT6hevbqzQ8lU586do169euTNm5elS5fy+++/8/bbb1OgQAFnh5YpJk6cyMcff8wHH3zA3r17mThxIpMmTeL99993dmgZ4uLFi9SoUYMPP/ww1f2TJk3ivffeY9q0aWzcuBFPT09CQkK4cuVKFkeaMW52vZcuXWLr1q2MHDmSrVu3Mn/+fPbv38/DDz/shEgzxq1+vskWLFjAhg0bKFasWBZFljludb2HDx+mfv36VKpUibCwMHbu3MnIkSPJly9f1gRoRG7i9OnTBjCrV692diiZ6sKFC+buu+82oaGhplGjRmbgwIHODinTDB8+3NSvX9/ZYWSZVq1amb59+zpsa9++venevbuTIso8gFmwYIF9PSkpyQQGBprJkyfbt50/f964u7ub2bNnOyHCjHX99aZm06ZNBjBHjx7NmqAy0Y2u9/jx46Z48eJm9+7dpnTp0ubdd9/N8tgyQ2rX++ijj5rHHnvMOQEZY9TTJDcVHR0NgL+/v5MjyVz9+/enVatWBAcHOzuUTPfjjz9y77330qlTJwICAqhVqxb/+9//nB1WpnnwwQdZuXIlBw4cAGDHjh38+uuvtGjRwsmRZb6IiAiioqIcfq99fX2pU6cO4eHhTows60RHR2Oz2fDz83N2KJkiKSmJHj16MGzYMKpWrerscDJVUlISixcvpkKFCoSEhBAQEECdOnVuessyoylpkhtKSkpi0KBB1KtXj2rVqjk7nEzz7bffsnXrVsaPH+/sULLEH3/8wccff8zdd9/N8uXLeeaZZxgwYABffPGFs0PLFC+99BJdunShUqVK5M2bl1q1ajFo0CC6d+/u7NAyXVRUFABFihRx2F6kSBH7vtzsypUrDB8+nK5du+baSW0nTpxInjx5GDBggLNDyXSnT58mNjaWCRMm0Lx5c37++WceeeQR2rdvz+rVq7MkhjxZchbJkfr378/u3bv59ddfnR1Kpvnzzz8ZOHAgoaGhWXdP3MmSkpK49957GTduHAC1atVi9+7dTJs2jV69ejk5uow3Z84cZs2axTfffEPVqlXZvn07gwYNolixYrnyesUSHx9P586dMcbw8ccfOzucTLFlyxamTp3K1q1bsdlszg4n0yUlJQHQtm1bBg8eDEDNmjVZv34906ZNo1GjRpkeg3qaJFXPPfccixYtYtWqVZQoUcLZ4WSaLVu2cPr0ae655x7y5MlDnjx5WL16Ne+99x558uQhMTHR2SFmuKJFi1KlShWHbZUrV86yp0+y2rBhw+y9TUFBQfTo0YPBgwffET2LgYGBAJw6dcph+6lTp+z7cqPkhOno0aOEhobm2l6mtWvXcvr0aUqVKmX/9+vo0aMMGTKEMmXKODu8DFeoUCHy5Mnj1H+/1NMkDowxPP/88yxYsICwsDDKli3r7JAyVZMmTdi1a5fDtj59+lCpUiWGDx+Oq6urkyLLPPXq1UtRRuLAgQOULl3aSRFlrkuXLuHi4vj/Q1dXV/v/WnOzsmXLEhgYyMqVK6lZsyYAMTExbNy4kWeeeca5wWWS5ITp4MGDrFq1ioIFCzo7pEzTo0ePFOMwQ0JC6NGjB3369HFSVJnHzc2N++67z6n/filpEgf9+/fnm2++4YcffsDb29s+7sHX1xcPDw8nR5fxvL29U4zX8vT0pGDBgrl2HNfgwYN58MEHGTduHJ07d2bTpk1Mnz6d6dOnOzu0TNGmTRvefPNNSpUqRdWqVdm2bRvvvPMOffv2dXZoGSI2NpZDhw7Z1yMiIti+fTv+/v6UKlWKQYMG8cYbb3D33XdTtmxZRo4cSbFixWjXrp3zgv4Pbna9RYsWpWPHjmzdupVFixaRmJho/zfM398fNzc3Z4V92271870+KcybNy+BgYFUrFgxq0PNELe63mHDhvHoo4/SsGFDHnroIZYtW8ZPP/1EWFhY1gTotOf2JFsCUn3NmDHD2aFlmdxecsAYY3766SdTrVo14+7ubipVqmSmT5/u7JAyTUxMjBk4cKApVaqUyZcvnylXrpx55ZVXTFxcnLNDyxCrVq1K9e9sr169jDFW2YGRI0eaIkWKGHd3d9OkSROzf/9+5wb9H9zseiMiIm74b9iqVaucHfptudXP93o5veRAWq73s88+M+XLlzf58uUzNWrUMAsXLsyy+GzG5JKyuCIiIiKZSAPBRURERNJASZOIiIhIGihpEhEREUkDJU0iIiIiaaCkSURERCQNlDSJiIiIpIGSJhEREZE0UNIkIpLJZs6ciZ+fn7PDEJH/SEmTiOQIvXv3dsrUHxmR8Dz66KMcOHAgYwISEafR3HMiIpnMw8MjV87dKHKnUU+TiORIjRs3ZsCAAbz44ov4+/sTGBjI6NGjHdrYbDY+/vhjWrRogYeHB+XKlWPevHn2/WFhYdhsNs6fP2/ftn37dmw2G0eOHCEsLIw+ffoQHR2NzWbDZrOlOEeyHTt28NBDD+Ht7Y2Pjw+1a9dm8+bNQMreqjJlytiPd+0r2Z9//knnzp3x8/PD39+ftm3bcuTIkf/6kYnIf6SkSURyrC+++AJPT082btzIpEmTeP311wkNDXVoM3LkSDp06MCOHTvo3r07Xbp0Ye/evWk6/oMPPsiUKVPw8fEhMjKSyMhIhg4dmmrb7t27U6JECX777Te2bNnCSy+9RN68eVNt+9tvv9mPd/z4cR544AEaNGgAQHx8PCEhIXh7e7N27VrWrVuHl5cXzZs35+rVq+n4dEQko+n2nIjkWNWrV2fUqFEA3H333XzwwQesXLmSpk2b2tt06tSJJ554AoCxY8cSGhrK+++/z0cffXTL47u5ueHr64vNZiMwMPCmbY8dO8awYcOoVKmSPZ4bKVy4sH154MCBREZG8ttvvwHw3XffkZSUxKeffmrvfZoxYwZ+fn6EhYXRrFmzW8YtIplDPU0ikmNVr17dYb1o0aKcPn3aYVvdunVTrKe1pyk9XnjhBZ544gmCg4OZMGEChw8fvuV7pk+fzmeffcaPP/5oT6R27NjBoUOH8Pb2xsvLCy8vL/z9/bly5UqajikimUdJk4jkWNff/rLZbCQlJaX5/S4u1j+Bxhj7tvj4+NuKZfTo0ezZs4dWrVrxyy+/UKVKFRYsWHDD9qtWreL555/nyy+/dEj+YmNjqV27Ntu3b3d4HThwgG7dut1WbCKSMZQ0iUiutmHDhhTrlStXBv69TRYZGWnfv337dof2bm5uJCYmpulcFSpUYPDgwfz888+0b9+eGTNmpNru0KFDdOzYkZdffpn27ds77Lvnnns4ePAgAQEBlC9f3uHl6+ubpjhEJHMoaRKRXG3u3Ll8/vnnHDhwgFGjRrFp0yaee+45AMqXL0/JkiUZPXo0Bw8eZPHixbz99tsO7y9TpgyxsbGsXLmSv//+m0uXLqU4x+XLl3nuuecICwvj6NGjrFu3jt9++82enF3ftk2bNtSqVYunnnqKqKgo+wusAeWFChWibdu2rF27loiICMLCwhgwYADHjx/PhE9IRNJKSZOI5Gpjxozh22+/pXr16nz55ZfMnj2bKlWqANbtvdmzZ7Nv3z6qV6/OxIkTeeONNxze/+CDD9KvXz8effRRChcuzKRJk1Kcw9XVlTNnztCzZ08qVKhA586dadGiBWPGjEnR9tSpU+zbt4+VK1dSrFgxihYtan8B5M+fnzVr1lCqVCnat29P5cqVefzxx7ly5Qo+Pj6Z8AmJSFrZzLU380VEchGbzcaCBQucUklcRHIf9TSJiIiIpIGSJhEREZE0UHFLEcm1NPpARDKSeppERERE0kBJk4iIiEgaKGkSERERSQMlTSIiIiJpoKRJREREJA2UNImIiIikgZImERERkTRQ0iQiIiKSBkqaRERERNLg/wEZF2y0XrXHMQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "solutions = [two_sum_bf, two_sum_map]\n", - "time_functions(solutions, worst, start=1, double=4, text=False, chart=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The point at which the run-time growth rates two solutions start to diverge is\n", - "much clearer now. The brute force approach's run-times still accelerate off\n", - "into the stratosphere, but we can see the separation and trend of mapping\n", - "algorithm a lot better.\n", - "\n", - "The run-times for the brute force algorithm approximately quadruple every time\n", - "the input size is doubled, confirming our prediction of a quadratic worst-case\n", - "time complexity. For the mapping algorithm, the pattern matches that of linear\n", - "time complexity; as we double the input size, our run-times also double." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5 Conclusion\n", - "\n", - "We started this essay with the definition of the Two sum problem. Next, we\n", - "outlined two algorithms: brute force, and mapping, then analysed the time\n", - "complexity of each one. After that we implemented and tested our solutions\n", - "using Python, and in the penultimate section we used empirical testing to see\n", - "if our analysis matched the data. Now we must decide which of our algorithms is\n", - "best.\n", - "\n", - "The brute force approach, unsurprisingly, is not very efficient when it comes\n", - "to run-times. We suspected this would be the case, then the empirical testing\n", - "confirmed it. Its only positive attributes were its simplicity and efficient\n", - "memory usage. \n", - "\n", - "In contrast, the time complexity of the mapping algorithm is reasonably\n", - "efficient, but this is achieved by using extra memory. space-time In the end,\n", - "the quadratic time complexity of the brute force algorithm cannot be ignored.\n", - "The small trade of space for time is worth it in this instance and therefore I\n", - "conclude the mapping algorithm is best." - ] - } - ], - "metadata": { - "deepnote": {}, - "deepnote_execution_queue": [], - "deepnote_notebook_id": "4a6de191ec8443f9b9cd2c322d8dd60d", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - }, - "orig_nbformat": 2 - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/DeepNote/example-two-sum-3.ipynb b/DeepNote/example-two-sum-3.ipynb deleted file mode 100644 index 4be5329..0000000 --- a/DeepNote/example-two-sum-3.ipynb +++ /dev/null @@ -1,990 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Two sum\n", - "\n", - "*Michael Snowden*, 23 December 2023 " - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "3dab5b7cbe1443acb7ae1b3c9a849b96", - "deepnote_cell_type": "markdown" - }, - "source": [ - "This essay aims to solve the [Two Sum](https://leetcode.com/problems/two-sum/) problem from\n", - "[LeetCode](https://leetcode.com/). This classic computational problem is reasonably simple to\n", - "understand, yet can yield some interesting algorithms when searching for an efficient solution. In\n", - "this essay we will explore, analyse, and compare a small selection of these solutions using\n", - "theoretical and empirical methods. The end goal is to find a solution that is clear, efficient, and\n", - "easy to implement.\n", - "\n", - "It is assumed the reader has an intermediate understanding of Python, including aspects like\n", - "importing modules, using loops, and applying conditionals and assignments. We will be using Python\n", - "data structures such as lists and dictionaries to implement our solutions.\n", - "\n", - "Furthermore, the essay uses Big-Oh notation and refers to concepts such as binary search and\n", - "brute-force." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "669a241a038a4ea9acd6d114edf21192", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 1 Problem definition\n", - "\n", - "To effectively solve Two Sum, it is crucial that we thoroughly understand and define the problem. We\n", - "need to identify the inputs, outputs and any relationship between them. For the Two Sum problem,\n", - "LeetCode has provided the following clear and concise problem description.\n", - "\n", - "\"*Given an array of integers `nums` and an integer `target`, return indices of the two numbers such\n", - "that they add up to target.*\"\n", - "\n", - "And the following clarifications.\n", - "\n", - "\"*You may assume that each input would have **exactly one solution**, and you may not use the same\n", - "element twice. You can return the answer in any order.*\"\n", - "\n", - "Finally some conditions on the inputs and outputs stated.\n", - "\n", - " - *$-109 \\leq$ `nums[i]` $\\leq 109$*\n", - " - *$-109 \\leq$ `target` $\\leq 109$*\n", - " - *Only one valid answer exists.*\n", - "\n", - "We now translate the problem into the following template.\n", - "\n", - "**Function**: two_sum\n", - "**Inputs**: `nums`, a list of integers; `target`, an integer\n", - "**Preconditions**:\n", - "- $-109 \\leq$ `nums[i]` $\\leq 109$\n", - "- $-109 \\leq$ `target` $\\leq 109$\n", - "- Exactly one pair `a` and `b` in `nums` has `a` + `b` = `target`\n", - "\n", - "**Output**: `indices`, a list of integers\n", - "**Postconditions**:\n", - "- `len(indices)` = 2;\n", - "- `nums[indices[0]]` + `nums[indices[1]]` = `target`\n", - "\n", - "This template expands and formalises the notions of input and output. It tells us the conditions\n", - "that must be satisfied before and after any algorithm is run and what it means for our algorithm to\n", - "be correct. We can refer back to this template throughout the process of solving the problem." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "7770c0f5f8874b8cb75275c9de3a8424", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 2 Algorithms\n", - "\n", - "With our problem clearly defined, the next step is to think of ways to solve it. This section\n", - "presents three distinct approaches to solving Two Sum: brute force, sorting and mapping." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "873b3fad44264c8f9d89f71953220701", - "deepnote_cell_type": "markdown" - }, - "source": [ - "\n", - "### 2.1 Brute force\n", - "\n", - "A brute force approach can often feel intuitive. For example, we can sum every number in `nums` with\n", - "every other number and see if our sum matches the `target`. If it does, then we have found our\n", - "solution. That sounds simple enough right? We are checking all possible sums, so we are sure to find\n", - "our indices if they exist. Looking back at the preconditions in our template, we can see that each\n", - "problem instance must have exactly one pair that sums to `target`. Hence, this approach is\n", - "guaranteed to find a solution as long as our preconditions are met.\n", - "\n", - "You might already suspect that this solution won't be very efficient, and you might just be right.\n", - "However, this approach is almost certain to produce the correct output and that is the most\n", - "important aspect of any algorithm. Getting _any_ working solution regardless of efficiency is an\n", - "important first step. Sometimes we just need to solve a problem quickly, and more importantly it\n", - "gets us thinking through the problem, which can lead to the discovery of other solutions.\n", - "\n", - "Now that We have an initial idea for our algorithm, let us start the process of formalising it. Here\n", - "is the same idea, but described in a more precise and programming oriented language.\n", - "\n", - ">An outer loop iterates through each number in `nums`, then for each number, an inner loop iterates\n", - ">`nums` again. For each pair of numbers, if their indices are different and their sum matches\n", - ">`target`, return their indices.\n", - "\n", - "After this initial description, we formalise the algorithm further by writing it as a series of\n", - "stepped instructions in a pseudocode like way. It is often easier to reason about efficiency and\n", - "correctness with the algorithm in this form.\n", - "\n", - "```text\n", - "1. for each index_1 from 0 to len(nums)-1:\n", - " 1. for each index_2 from 0 to len(nums)-1:\n", - " 1. if index_1 != index_2 and nums[index_1] + nums[index_2] == target:\n", - " 1. let indices be (index_1, index_2)\n", - " 2. stop\n", - "```\n", - "\n", - "We finish up by analysing the time complexity. Let _n_ = `len(nums)`, then this algorithm has two\n", - "nested for loops that do _n_ iterations each. The operations performed within the inner loop are\n", - "constant time, meaning this solution will do at most _n_ $\\times$ _n_ $\\times$ O(1) steps. The\n", - "worst-case time complexity is therefore O(_n_ $^2$). In the best case, the first and second numbers\n", - "in `nums` would sum to target, so no matter the size of `nums` the run-time would not increase.\n", - "Therefore, the best-case time complexity would be O(1).\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "ff3c2daf13fb4b6793c2fe94f9bf891e", - "deepnote_cell_type": "markdown" - }, - "source": [ - "### 2.2 Sorting\n", - "\n", - "For many computational problems a good question to ask is: will sorting the inputs simplify the\n", - "problem and lead to a more efficient solution? In this case, the answer is yes, we can exploit the\n", - "properties of a sorted input in a similar way to binary search. Rather than focusing on the middle\n", - "of the sequence, we keep track of the two ends with position variables. This kind of approach is\n", - "commonly referred to as a \"double pointer algorithm\" named after the two position variables.\n", - "\n", - "Before we move on to a formal description of the algorithm, we need to consider a crucial aspect of\n", - "the Two Sum problem: it requires _indices_ to be returned. This has implications for our solution:\n", - "direct sorting of `nums` is not possible because the original index positions would be altered.\n", - "Thus, any additional data structures we use must keep track of the corresponding indices from\n", - "elements of `nums`. Keeping this in mind, here is the description of our algorithm.\n", - "\n", - ">Create a pair `(number, index)` for each number in `nums`. Add each pair to a list `pairs`, then\n", - ">sort the list into ascending order based on the numbers. Initialise two variables `start` and `end`\n", - ">to be 0 and `len(nums) - 1` respectively. While `start` $\\neq$ `end` sum the numbers in `pairs`\n", - ">corresponding to the indices `start` and `end`. If the sum is less than `target`, move `start` to\n", - ">the right by incrementing its value by one. If the sum is greater than `target`, move `end` to the\n", - ">left by decrementing its value by one. If the sum matches `target` then return the indices of both\n", - ">numbers.\n", - "\n", - "The logic of this strategy is as follows. The sum of the numbers at positions `start` and `end` in\n", - "our `pairs` list will be one of the following three cases: the sum can be equal to, greater than or\n", - "less than `target`. If the sum is equal to target, then we have found our match and can return the\n", - "indices. If the sum is less than target, we need to increase the value of our sum; the only way to\n", - "do this is by moving `start` to the right. Remember we have sorted the list, so all values to the\n", - "right are greater. If our sum is greater than `target` we need to decrease the value of our sum,\n", - "and the only way to do that by moving `end` to the left.\n", - "\n", - "We can now express our algorithm as a series of numbered steps and analyse the complexity.\n", - "\n", - "```text\n", - "1. let pairs be an empty list\n", - "2. for each index from 0 to len(nums):\n", - " 1. let `pair be (nums[index], index)\n", - " 2. append pair to `pairs`\n", - "3. let pairs be sorted by value at first index\n", - "4. let start = 0\n", - "5. let end = len(nums) -1\n", - "6. while start $\\neq$ end:\n", - " 1. pair_sum = pairs[start][0] + pairs[end][0]\n", - " 2. if pairs_sum = target:\n", - " 1. let indices be (pairs[start][1], pairs[end][1])\n", - " 2. stop\n", - " 3. otherwise if pairs_sum > target:\n", - " 1. let end = end - 1\n", - " 4. otherwise:\n", - " 1. let start = start + 1\n", - "```\n", - "\n", - "The important parts of this algorithm with respect analysing time complexity are: the for loop at\n", - "step number two, the sorting operation at step number three and the while loop at step number six.\n", - "\n", - "Let _n_ = `len(nums)`, then the for loop always does _n_ iterations, and we will assume the sorting\n", - "operation has worst-case complexity of O(nlog(n)) and best-case of O(n), that just leaves us with\n", - "the while loop. The while loop will do at most _n_ iterations in a scenario where one of the\n", - "variables `start` or `end` stays in place and the other is incremented until they are next to each\n", - "other.\n", - "\n", - "It is clear now that the growth rate of the sorting operation will dominate this approach in terms\n", - "of complexity. Therefore, this algorithm has an overall worst-case time complexity of O(nlog(n)) and\n", - "a best-case of O(n)." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "602d836888cf43e1abc9e17837086972", - "deepnote_cell_type": "markdown" - }, - "source": [ - "### 2.3 Mapping\n", - "\n", - "In the previous algorithm we paired each number in `nums` with its index out of necessity. We wanted\n", - "to sort `nums` without loosing the original paring of number to index. This action of pairing\n", - "numbers to indices is a useful idea; what if instead of pairing a number directly to its index, we\n", - "paired the difference between our number and the target number (i.e. `target` - number) to its\n", - "index? If we did that, then finding our pair would be a case of seeing if the current number already\n", - "exists as a value in our pairs list.\n", - "\n", - "This is a good start, but we still have a problem: checking for the existence of an item in a a list\n", - "has linear time complexity in the size of the list. We need an alternative data structure, one with\n", - "much efficient lookup times.\n", - "\n", - "If fast lookup times are required, then we should always consider a hashtable. This data structure\n", - "is known informally by many different names such as dictionary, hashmap, map and associative array.\n", - "A key property of this data structure is the lookup operation has constant time complexity in the\n", - "average case.\n", - "\n", - "If we map our difference ( i.e., `target` - number) to the index of the number in a hashtable, then\n", - "we can check for the existence of further numbers in constant time. If the number exists, then we\n", - "have found our matching number and can easily retrieve its index. Next we write our description.\n", - "\n", - ">For each number in `nums`, check if it exists in the map. if it does, return the current index\n", - ">alongside the index mapped to that number. If it is not in the map, calculate the difference target\n", - ">- current number and add the difference as key and current index as value to the map\n", - "\n", - "Then moving on to a more formal algorithm:\n", - "\n", - "```text\n", - "1. let differences be an empty dictionary\n", - "2. for index from 0 to len(nums) - 1:\n", - " 1. if nums[index] in differences:\n", - " 1.let indices be (differences[nums[index]], index)\n", - " 2. stop\n", - " 2. otherwise:\n", - " 1. let difference = target - nums[index]\n", - " 2. let differences[difference] = index\n", - "```\n", - "\n", - "Let _n_ = `len(nums)`, then this algorithm has a single loop that does _n_ iterations. Because we\n", - "are using a hashtable, all the operations within the loop are constant time. Therefore our mapping\n", - "differences algorithm has O(_n_) time complexity in in the worst-case. Similar to the brute force\n", - "approach if the correctly summing numbers are in the first two positions in `nums` then the\n", - "run-times will be unaffected by increasing input sizes giving a best-case complexity of O(1)." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "924f098f9fc84db7b15258ea48bc32c7", - "deepnote_cell_type": "markdown" - }, - "source": [ - "### 2.4 Summary\n", - "\n", - "Many times a brute force approach can be the simplest solution; it is a simple strategy that is easy\n", - "to implement. Furthermore, this strategy is more efficient in terms of memory usage than the other\n", - "two because it does not use extra data structures. However, this approach has O(_n_ $^2$) time\n", - "complexity. Every time we double the input size, the run-times increase fourfold, which is not very\n", - "desirable especially if there are better options.\n", - "\n", - "Our next approach used sorting to endow our list with properties useful for searching. This\n", - "algorithm is perhaps the most convoluted and maybe harder to think through relative to the others.\n", - "Furthermore, it requires extra memory compared to the brute force approach. The benefits of the\n", - "strategy are the O(_n_ log(_n_)) time complexity which improves considerably on the brute force\n", - "algorithm.\n", - "\n", - "The third solution made a single pass through `nums` and used a hashtable to map differences to\n", - "indexes. While not as simple as the brute force algorithm, this approach is not hard to follow or\n", - "understand; everything is carried out in a single loop. On the other hand, this approach has the\n", - "additional memory overhead of the hashtable itself, which needs to be taken into account. The main\n", - "advantage with this approach is the O(n) time complexity for the worst-case, making it the most\n", - "efficient when it comes to scaling run-times with input size.\n", - "\n", - "When considering all three approaches, and taking into account aspects of efficiency as well as\n", - "readability, the mapping algorithm seems to come out on top. It makes that that classic space-time\n", - "trade off i.e sacrifices some memory efficiency for time efficiency, but the simplicity of the\n", - "approach combined with the efficient time complexity makes it a worth while exchange." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "b874355374024f0aac10bf85290e3830", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 3 Code\n", - "\n", - "In this section we shall implement the algorithms written in previous parts of the essay. We shall\n", - "do so using a basic subset of Python in the hope of making our code as language agnostic as\n", - "possible.\n", - "\n", - "Throughout this section we will make use of code quality tools such as linters and type checkers to\n", - "help us meet the standards expected for clean readable and error free code." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "b2c9b95fbb2848faae2e546a04510a83", - "deepnote_cell_type": "markdown" - }, - "source": [ - " ### 3.1 Preparation and imports\n", - "\n", - "The next two cells set up the automatic type checking linting and Construct checking for our code\n", - "cells. We also import some of the functions we will use to test, time and generate instances for our\n", - "solutions.\n", - "\n", - "If one or more of the styling or type checking ideals are violated, the warnings will be printed\n", - "with the corresponding line number underneath the offending cell." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "cell_id": "aaadf1a848f74353838a9173da3520ab", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 572, - "execution_start": 1700998213233, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "pytype was activated\n", - "ruff was activated\n", - "allowed was activated\n" - ] - } - ], - "source": [ - "import random\n", - "from algoesup import test, time_functions, time_cases\n", - "\n", - "\n", - "%pytype on\n", - "%ruff on\n", - "%allowed on" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "3d5d24a861574074ae34951e9a0ecef1", - "deepnote_cell_type": "markdown" - }, - "source": [ - "### 3.2 Testing\n", - "\n", - "Before We start implementing the algorithms, we think about writing some unit tests. The `test()`\n", - "function from the `algoesup` library is a simple way to test for correctness. It takes a function\n", - "and a test table then reports any failed tests.\n", - "\n", - "To thoroughly test the algorithms, we need to consider edge cases alongside other important\n", - "functional tests. Edge cases often occur at the extreme ends of the spectrum of allowed inputs or\n", - "outputs, they should ideally test unexpected conditions that might reveal bugs in the code. For the\n", - "two sum problem, we should test the minimum size for `nums` and also the extremes of the values that\n", - "can be present. We should include negative numbers and zero in our tests because integers are\n", - "present in the inputs.\n", - "\n", - "The cell below contains our test table, note the descriptions of each case in the first column, and\n", - "how the boundary cases, negative numbers and zero are all present in the table. To help clarify the\n", - "contents of the table it has been displayed underneath the cell." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "cell_id": "ac8b19eaedc64b4580b0a0ee55a38d06", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 561, - "execution_start": 1700998214777, - "source_hash": null - }, - "outputs": [], - "source": [ - "two_sum_tests = [\n", - " [\"minimum size for nums\", [1, 2], 3, (0, 1)],\n", - " [\"non-adjacent indices\", [1, 4, 9, 7], 8, (0, 3)],\n", - " [\"first two elements\", [5, 7, 1, 2, 8], 12, (0, 1)],\n", - " [\"last two elements\", [1, 3, 5, 7, 8], 15, (3, 4)],\n", - " [\"repeated elements\", [6, 2, 3, 2], 4, (1, 3)],\n", - " [\"max and min range\", [-109, 109, 0], 0, (0, 1)],\n", - " [\"lowest target value\", [-50, 1, -59], -109, (0, 2)],\n", - " [\"highest target value\", [50, 1, 59], 109, (0, 2)],\n", - "]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.3 Implementations\n", - "\n", - "The next cell implements the brute force algorithm using nested `for` loops with a conditional to\n", - "check for the correct pair. Note how this conditional check looks similar to one of the\n", - "preconditions to the template. This is a good sign. The tests are performed below the function" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "cell_id": "44329d9330bd4375a0ac59857f7ab3a8", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 490, - "execution_start": 1700998215236, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing two_sum_bf:\n", - "Tests finished.\n" - ] - } - ], - "source": [ - "def two_sum_bf(nums: list, target: int) -> tuple[int, int]:\n", - " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", - "\n", - " Preconditions:\n", - " len(nums) >= 2\n", - " -109 <= nums[i] <= 109\n", - " -109 <= target <= 109\n", - " Exactly one pair a and b in nums has a + b = target\n", - " \"\"\"\n", - " for index_1 in range(len(nums)):\n", - " for index_2 in range(len(nums)):\n", - " if index_1 != index_2 and nums[index_1] + nums[index_2] == target:\n", - " return index_1, index_2\n", - " return (-1, -1)\n", - "\n", - "\n", - "test(two_sum_bf, two_sum_tests)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next up is the sorting approach. Again, the tests are performed underneath the function definition." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "cell_id": "6e0f5e094dfc442696d7eb845caab267", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 546, - "execution_start": 1700998215697, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing two_sum_sort:\n", - "Tests finished.\n" - ] - } - ], - "source": [ - "def two_sum_sort(nums: list, target: int) -> tuple[int, int]:\n", - " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", - "\n", - " Preconditions:\n", - " len(nums) >= 2\n", - " -109 <= nums[i] <= 109\n", - " -109 <= target <= 109\n", - " Exactly one pair a and b in nums has a + b = target\n", - " \"\"\"\n", - " pairs = []\n", - " for index in range(len(nums)):\n", - " pairs.append((nums[index], index))\n", - " pairs.sort()\n", - " start = 0\n", - " end = len(nums) - 1\n", - " while start < end:\n", - " current_sum = pairs[start][0] + pairs[end][0]\n", - " if current_sum == target:\n", - " # return the indices in ascending order for reliable testing\n", - " lower_index = min(pairs[start][1], pairs[end][1])\n", - " upper_index = max(pairs[start][1], pairs[end][1])\n", - " indices = (lower_index, upper_index)\n", - " return indices\n", - " if current_sum < target:\n", - " start = start + 1\n", - " else:\n", - " end = end - 1\n", - " return (-1, -1)\n", - "\n", - "\n", - "test(two_sum_sort, two_sum_tests)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, the mapping algorithm is implemented using Python's `dict`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "cell_id": "f1acd50e3be54a0e948c7795637ee2a0", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 443, - "execution_start": 1700998216141, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing two_sum_map:\n", - "Tests finished.\n" - ] - }, - { - "data": { - "text/markdown": [ - "**allowed** found issues:\n", - "- 10: differences: dict[int, int] = {}" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def two_sum_map(nums: list, target: int) -> tuple[int, int]:\n", - " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", - "\n", - " Preconditions:\n", - " len(nums) >= 2\n", - " -109 <= nums[i] <= 109\n", - " -109 <= target <= 109\n", - " Exactly one pair a and b in nums has a + b = target\n", - " \"\"\"\n", - " differences: dict[int, int] = {}\n", - " for index in range(len(nums)):\n", - " difference = target - nums[index]\n", - " if nums[index] in differences:\n", - " return differences[nums[index]], index\n", - " differences[difference] = index\n", - " return (-1, -1)\n", - "\n", - "\n", - "test(two_sum_map, two_sum_tests)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The brute force algorithm comes out on top in terms of simplicity, it is just a case of checking\n", - "every pair of numbers. The double pointer approach seems like the most convoluted with the mapping\n", - "differences algorithm somewhere in the middle of the two." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "cell_id": "11e07df56c7543d8951171e634bbfa14", - "deepnote_cell_type": "markdown" - }, - "source": [ - "## 4 Performance\n", - "\n", - "In this section we will measure the run-times of our solutions under various conditions to see if\n", - "our theoretical analysis matches empirical data." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.1 generating inputs\n", - "\n", - "`time_functions` and `time_cases` from the `algoesup` library require a function that generates\n", - "problem instances of a given size. We want to be able to generate instances that correspond to best,\n", - "normal and worst cases for the solutions were appropriate.\n", - "\n", - "The best normal and worst case scenarios might not always be the same for each algorithm, for\n", - "example, the best-case for `two_sum_bf` and `two_sum_map` would be when the first two numbers\n", - "encountered sum to `target` but this is not the case for `two_sum_sort` where the best-case would be\n", - "dependent on the sorting.\n", - "\n", - "Since `two_sum_bf` and `two_sum_map` share the same best- and worst-case scenarios, we shall focus\n", - "on those for our input generators. For the normal-case the matching numbers will be in the middle\n", - "two positions of `nums`" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "cell_id": "01f9421892f340f8b3ade6e25e315a09", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 471, - "execution_start": 1700998216591, - "source_hash": null - }, - "outputs": [ - { - "data": { - "text/markdown": [ - "**allowed** found issues:\n", - "- 6: random.randint\n", - "- 7: random.randint\n", - "- 11: random.randint" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def two_sum_instance(size: int, scenario: str) -> tuple[list[int], int]:\n", - " \"\"\"Given a size, generate a problem instance for two sum.\n", - "\n", - " Preconditions: size >= 2; scenario in {\"best\", \"normal\", \"worst\"}\n", - " \"\"\"\n", - " num1 = random.randint(-109, 109)\n", - " num2 = random.randint(-109, 109)\n", - " target = num1 + num2\n", - " nums = [num1, num2]\n", - " while len(nums) < size:\n", - " new_num = random.randint(-109, 109)\n", - " valid = True\n", - " for num in nums:\n", - " if target - new_num == num:\n", - " valid = False\n", - " if valid:\n", - " nums.append(new_num)\n", - " if scenario == \"worst\":\n", - " nums = nums[2:] + nums[:2]\n", - " elif scenario == \"normal\":\n", - " middle = len(nums) // 2\n", - " nums = nums[2:middle] + nums[:2] + nums[middle:]\n", - " # else nums is already best case\n", - " return nums, target\n", - "\n", - "\n", - "def best(size: int) -> tuple[list[int], int]:\n", - " \"\"\"Given a size, generate a best case instance for two sum.\n", - "\n", - " Preconditions: size >= 2\n", - " \"\"\"\n", - " return two_sum_instance(size, \"best\")\n", - "\n", - "\n", - "def normal(size: int) -> tuple[list[int], int]:\n", - " \"\"\"Given a size, generate a normal case instance for two sum.\n", - "\n", - " Preconditions: size >= 2\n", - " \"\"\"\n", - " return two_sum_instance(size, \"normal\")\n", - "\n", - "\n", - "def worst(size: int) -> tuple[list[int], int]:\n", - " \"\"\"Given a size, generate a worst case instance for two sum.\n", - "\n", - " Preconditions: size >= 2\n", - " \"\"\"\n", - " return two_sum_instance(size, \"worst\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.2 Best, normal and worst case run-times" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First let us see the run-times of `two_sum_bf` for best, normal and worst-case instances. Note the\n", - "input size starts at 100 and is doubled 4 times reaching 1600 for the last data point." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Run-times for two_sum_bf\n", - "\n", - "Input size worst normal best \n", - " 100 691.5 332.8 0.5 µs\n", - " 200 2636.6 1322.9 0.5 µs\n", - " 400 11522.6 5523.5 0.5 µs\n", - " 800 47048.4 23079.0 0.5 µs\n", - " 1600 187819.3 91964.2 0.5 µs" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "input_generators = [worst, normal, best]\n", - "time_cases(two_sum_bf, input_generators, start_size=100, double=4, chart=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see from the chart and run-times above that our analysis seems to line up with the data. As\n", - "we double the input size for the brute force algorithm, the run-times quadruple, as you would expect\n", - "for quadratic time complexity. For the best case the run-times more or less stay the same for\n", - "increasing inputs suggesting constant time complexity. The normal case is somewhere in the\n", - "middle of the two.\n", - "\n", - "Now let us do the same for `two_sum_map`." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Run-times for two_sum_map\n", - "\n", - "Input size worst normal best \n", - " 100 9.8 4.9 0.4 µs\n", - " 200 17.6 8.9 0.5 µs\n", - " 400 35.9 17.8 0.5 µs\n", - " 800 82.9 37.0 0.5 µs\n", - " 1600 163.1 75.7 0.5 µs" - ] - }, - { - "data": { - "image/png": "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38706dN59913Wb9+Penp6XTv3p0rV66wZcsW1q9fz5kzZ+hz29SYp06dYvny5URGRrJv3z5T+eTJkxkwYAD79u2jevXqPPXUUzz//POMHz+eXbt2oZRi+PDhpvpJSUl06tSJDRs2sHfvXjp06EDXrl05f/78A52XEEKI7Dl1St+ieuMNvcZVz5464enWzdKR5TMlVEJCggJUQkLCHftu3rypjhw5om7evGlWDtzz0alTJ6WUUps2bbpvvYzHpk2bTMctVarUXevkVKtWrVSLFi3Myho3bqzGjRunfvnlF2Vra6vOnz9v2nf48GEFqB07diillHrnnXeUvb29iouLu+O833rrLdP2tm3bFKC+/vprU9mSJUuUk5PTfeOrVauW+vTTT03b5cqVUzNmzLhn/XtdByGEEHdKT1dq7lylihVTCpRyc1Nq4UJdbk3u9/2dlbTs5KGYmJhcrZdTdevWNdv28fEhLi6Oo0eP4u/vj7+/v2lfzZo18fDw4OjRo6aycuXKUbp06fse18vLC4A6deqYld26dYvExERAt+y8+uqr1KhRAw8PD1xdXTl69Ki07AghRB746y/o1AlefBFu3IA2beDAARgwQI+8Koqkg/IDSkpKuue+jFFWPj4+2TpW1npnz559qLiysre3N9s2GAykp6dn++ddXFz+87iG//3m3K0s47leffVV1q9fz0cffUTlypVxdnYmJCSElJSUbMcihBDivy1bppOcK1fA0RE++ABGjACbIt60IcnOA7pXIpBVYGAgfn5+XLp06a79dgwGA35+fgQGBubouA+rRo0aXLhwgQsXLphad44cOUJ8fDw1a9bM9ef7/fffGTRoED179gR0opibSZ0QQhR1V6/CsGGwZInebthQL/eQBx/phVIRz/Xylq2tLTNnzgQyWzsyZGyHhYXl+3w7QUFB1KlTh379+rFnzx527NjBgAEDaNWqFY0aNcr156tSpYqpk/P+/ft56qmnctTCJIQQ4t5++UUv97BkCdja6nl0tm2TRCcrSXbyWHBwMBEREZQtW9as3M/Pj4iICIvMs2MwGFi1ahUlSpSgZcuWBAUFUbFiRZYuXZonz/fJJ59QokQJmjdvTteuXWnfvj2PPPJInjyXEEIUFdevw/Dh0L49XLoEVavCH3/ApEl6jSuRyaDudn+liElMTMTd3Z2EhATcbpt04Nat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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "input_generators = [worst, normal, best]\n", - "time_cases(two_sum_map, input_generators, start_size=100, double=4, chart=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The first thing to notice is the dramatic reduction in magnitude of the run-times. The scale on the\n", - "y-axis for this graph only goes up to 200 µs whereas the previous graph went up to 20000 µs, which\n", - "is 10 times larger. Also the plot for our worst-case here has a much straighter line with run-times\n", - "doubling in proportion with input size. This aligns with our prediction of linear time complexity." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.3 Run-times for each solution\n", - "\n", - "Let us now compare the runtimes for all three solutions side by side using the input generator for\n", - "the worst case." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "cell_id": "aba31a656d9f45c385f81e314f656e34", - "deepnote_cell_type": "code", - "deepnote_to_be_reexecuted": false, - "execution_millis": 17260, - "execution_start": 1700998217027, - "source_hash": null - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Inputs generated by worst\n", - "\n", - "Input size two_sum_bf two_sum_sort two_sum_map \n", - " 100 704.5 23.6 9.2 µs\n", - " 200 2648.3 42.8 18.9 µs\n", - " 400 11676.1 102.9 35.7 µs\n", - " 800 47242.8 222.1 73.9 µs\n", - " 1600 189691.0 487.6 173.9 µs" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "solutions = [two_sum_bf, two_sum_sort, two_sum_map]\n", - "time_functions(solutions, worst, start=100, double=4, chart=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The run-times for `two_sum_bf` almost instantly eclipse that of `two_sum_sort` and `two_sum_map`. It\n", - "almost looks as if the run-times for `two_sum_sort` and `two_sum_map` are not growing at all, but we\n", - "know by looking at numbers above that this is not the case. Let us see if we can adjust the inputs\n", - "of `time_functions` so the growth rates of the fastest two functions have a better visual\n", - "representation in the chart." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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RowYwfLly/n4449ZtmwZtWrVylCCVr9+fT777DPi4uIICgrik08+wcHBgcqVKxMUFGSYS5c6acqs9L4XDRs25OLFi6xfv54//viDRYsWMXv2bObPn8+AAQOee19CZJYkTULkUemdqvjnn3+MJmcXKVIk3VN7j/93/6wrjcqUKcMHH3zABx98wPnz56lWrRpffvkly5YtS7d/yZIlAW205XGPt5UpU4YdO3ZQr169TE18fla89+/fN4wsPY/Vq1dTunRp1qxZY/T+JI8SJXvSe5c86lOwYMFnxlGyZMl0v5/nzp3LcLxJSUlcunTJKCH8559/AIx+JhwdHfH392f58uV0796dffv2pZkY/yQNGjTg0aNHrFy5kvDwcENy1LBhQ0PSVK5cOaMLEUqWLJnucZw9e9bwfEY4OjrSt29f+vbty/3792nYsCETJ040JE1ytZzICXJ6Tog8at26dYY5MQB//fUXBw8epEWLFoa2MmXKcPbsWW7dumVoO3bsGPv27TPalo2NDaBdpp/agwcPiIuLM2orU6YMhQoVIj4+/omxubm5UblyZX788Ufu379vaN+9ezcnTpww6tu5c2f0ej1TpkxJs53ExMQ0MWVE586dCQ4OZtu2bWmeu3fvHomJic/cRvKIVuoRrIMHDxIcHGzU70nvnbOzM76+vnz//fdERESk2X7q70nLli05cOAAf/31l9HzTxp9e5Jvv/3WcF8pxbfffkvBggVp3LixUb+ePXty+vRpRo8ejbm5OV27ds3Q9mvXrk3BggWZMWMGjo6OhqsVGzRowIEDB9i9e3eaUaaWLVvy119/Gb1vsbGxLFiwAC8vL7y9vZ+533///dfosZ2dHWXLljX6GbS1tQXSfh+EyEoy0iREHlW2bFnq16/PO++8Q3x8PAEBARQtWtTolFS/fv346quv8PPzo3///ty8eZP58+dTqVIloqOjDf2sra3x9vbml19+oVy5cjg6OlK5cmUSExNp3LgxnTt3xtvbmwIFCrB27Vpu3LjxzA/aadOm0bZtW+rVq0ffvn25e/cu3377LZUrVzZKpBo1asSgQYOYPn06ISEhNGvWjIIFC3L+/HlWrVrFnDlz6NixY6bem9GjR7NhwwZatWplKEcQGxvLiRMnWL16NWFhYRQrVuyp22jVqhVr1qyhffv2+Pv7Exoayvz58/H29jaK/0nv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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "solutions = [two_sum_bf, two_sum_sort, two_sum_map]\n", - "time_functions(solutions, worst, start=1, double=4, text=False, chart=True)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This chart illustrates better the point at which the three solutions start to diverge in terms of\n", - "growth rates.\n", - "\n", - "The growth rate of the brute force approach still accelerates off into the stratosphere, but we can\n", - "see the separation and trend of the sorting and mapping algorithms." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5 Conclusion\n", - "\n", - "We started this essay by precisely defining the Two Sum problem that we wanted to solve. We came up\n", - "with three algorithms that used different approaches: brute force, sorting and mapping and analysed\n", - "the time complexity of each. Next, we implemented and tested our solutions using Python, then in the\n", - "penultimate section used empirical testing to see if our analysis matched up with the data. Now we\n", - "must decide which of our algorithms is best and explain what criteria we are basing \"best\" upon.\n", - "\n", - "The brute force approach is not very efficient in terms of run-times. We suspected this would be the\n", - "case, then the empirical data confirmed it. Its only saving grace was the simplicity and efficient\n", - "memory usage, but we cannot ignore the quadratic time complexity for the worst-case. For this reason\n", - "it cannot be the best solution.\n", - "\n", - "We are now left with a choice between the sorting and mapping approaches and I think there is a\n", - "clear winner between the two. The mapping approach is more efficient in its worst-case complexity\n", - "with O(_n_) compared to O(_n_log(_n_) of the sorting, and on the surface seems simpler and easier to\n", - "implement. Moreover, the mapping approach has the potential to be more memory efficient. For\n", - "example, the sorting approach always has an auxiliary data structure the same size as `nums`,\n", - "whereas the size of the dictionary will grow dynamically, only becoming the same size as `nums` in\n", - "the worst case. Therefore, we conclude that the mapping algorithm is the best of the three.\n" - ] - } - ], - "metadata": { - "deepnote": {}, - "deepnote_execution_queue": [], - "deepnote_notebook_id": "4a6de191ec8443f9b9cd2c322d8dd60d", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - }, - "orig_nbformat": 2 - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/DeepNote/Dockerfile b/Deepnote/Dockerfile similarity index 100% rename from DeepNote/Dockerfile rename to Deepnote/Dockerfile diff --git a/DeepNote/algoesup.py b/Deepnote/algoesup.py similarity index 100% rename from DeepNote/algoesup.py rename to Deepnote/algoesup.py diff --git a/DeepNote/allowed.py b/Deepnote/allowed.py similarity index 100% rename from DeepNote/allowed.py rename to Deepnote/allowed.py diff --git a/DeepNote/example-1-to-n.ipynb b/Deepnote/example-1-to-n.ipynb similarity index 100% rename from DeepNote/example-1-to-n.ipynb rename to Deepnote/example-1-to-n.ipynb diff --git a/DeepNote/example-jewels.ipynb b/Deepnote/example-jewels.ipynb similarity index 100% rename from DeepNote/example-jewels.ipynb rename to Deepnote/example-jewels.ipynb diff --git a/Deepnote/example-two-sum-2.ipynb b/Deepnote/example-two-sum-2.ipynb new file mode 100644 index 0000000..ae436d4 --- /dev/null +++ b/Deepnote/example-two-sum-2.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Two Sum (two solutions)\n", + "\n", + "*Michael Snowden*, 22 January 2024" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "3dab5b7cbe1443acb7ae1b3c9a849b96", + "deepnote_cell_type": "markdown" + }, + "source": [ + "This essay aims to solve the classic [Two Sum](https://leetcode.com/problems/two-sum/) problem from [LeetCode](https://leetcode.com/). \n", + "\n", + "Readers should have an intermediate understanding of Python and familiarity\n", + "with Big-Oh notation to understand this essay." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "669a241a038a4ea9acd6d114edf21192", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 1 Problem\n", + "\n", + "Given an array of integers `nums` and an integer `target`, return indices of\n", + "the two numbers such that they add up to `target`.\n", + "\n", + " - $-109 \\leq$ `nums[i]` $\\leq 109$\n", + " - $-109 \\leq$ `target` $\\leq 109$\n", + " - Only one valid answer exists." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "7770c0f5f8874b8cb75275c9de3a8424", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 2 Algorithms\n", + "\n", + "With our problem defined, the next step is to think of ways to solve it. This\n", + "section presents two approaches to solving Two Sum: brute force, and mapping." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "873b3fad44264c8f9d89f71953220701", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 2.1 Brute force\n", + "\n", + "Generally speaking, a brute force algorithm tries all possibilities, and\n", + "selects a correct one. For this problem, the possibilities are all sums that\n", + "can be obtained by pairing each number in `nums` with every other number, and\n", + "the correct pair is identified when the sum matches `target`.\n", + "\n", + ">**Brute force algorithm**: An outer loop iterates through each number in\n", + ">`nums`, then for each number, an inner loop iterates `nums` again. For each\n", + ">pair of numbers, if their indices are different and their sum matches `target`,\n", + ">return their indices.\n", + "\n", + "Let _n_ = `len(nums)`, then this algorithm has two nested for loops that do _n_\n", + "iterations each. The operations performed within the inner loop are constant\n", + "time, meaning this solution will do at most _n_ $\\times$ _n_ $\\times$ O(1)\n", + "steps. Thus, the worst-case time complexity is O(_n_ $^2$). In the best case,\n", + "the first and second numbers in `nums` sum to `target`. No matter the size of\n", + "`nums`, the run-times would not increase. Therefore, the best-case time\n", + "complexity would be O(1).\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "602d836888cf43e1abc9e17837086972", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 2.2 Mapping\n", + "\n", + "In the brute force algorithm, we checked each pair of numbers in `nums` to see\n", + "if the resulting sum was equal to `target`. Since we are already checking every\n", + "number in the list, why not store some piece information from each number that\n", + "will help us find our matching pair?\n", + "\n", + "For every number in `nums`, we can map the difference between it and the target\n", + "(`target` - number) to its corresponding index using a hashtable. This allows\n", + "us to check the hashmap for matching numbers in constant time.\n", + "\n", + ">**Mapping algorithm**: For each number in `nums`, if its in the hashmap, return\n", + ">its index and the index mapped to it. Otherwise, calculate the difference\n", + ">(`target` - number) and map it to the corresponding index of number.\n", + "\n", + "Let _n_ = `len(nums)`, then this algorithm has a single loop that does _n_\n", + "iterations. Because we are using a hashmap, all the operations performed in the\n", + "loop are done in constant time. Thus, our mapping algorithm has O(_n_) time\n", + "complexity in in the worst-case. Similar to the brute force approach, if the\n", + "correctly summing numbers are in the first two positions of `nums`, then the\n", + "run-times will be unaffected by increasing input sizes, giving a best-case\n", + "complexity of O(1)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "b874355374024f0aac10bf85290e3830", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 3 Code\n", + "\n", + "In this section we will implement and test the algorithms" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "cell_id": "aaadf1a848f74353838a9173da3520ab", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 572, + "execution_start": 1700998213233, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pytype was activated\n", + "ruff was activated\n", + "allowed was activated\n" + ] + } + ], + "source": [ + "from algoesup import test, time_functions, time_cases\n", + "\n", + "%pytype on\n", + "%ruff on\n", + "%allowed on" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "3d5d24a861574074ae34951e9a0ecef1", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 3.1 Testing\n", + "\n", + "We start off by writing some tests.\n", + "\n", + "To test the above solutions, we need to consider edge cases and other important\n", + "functional tests. We should include tests for the minimum input size, and any\n", + "extremes values that can be present. When integers are part of the input, and\n", + "preconditions allow, negative numbers and zero should be incorporated into the\n", + "tests." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "cell_id": "ac8b19eaedc64b4580b0a0ee55a38d06", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 561, + "execution_start": 1700998214777, + "source_hash": null + }, + "outputs": [], + "source": [ + "two_sum_tests = [\n", + " [\"minimum size for nums\", [1, 2], 3, (0, 1)],\n", + " [\"non-adjacent indices\", [1, 4, 9, 7], 8, (0, 3)],\n", + " [\"first two elements\", [5, 7, 1, 2, 8], 12, (0, 1)],\n", + " [\"last two elements\", [1, 3, 5, 7, 8], 15, (3, 4)],\n", + " [\"repeated elements\", [6, 2, 3, 2], 4, (1, 3)],\n", + " [\"max and min range\", [-109, 109, 0], 0, (0, 1)],\n", + " [\"lowest target value\", [-50, 1, -59], -109, (0, 2)],\n", + " [\"highest target value\", [50, 1, 59], 109, (0, 2)],\n", + "]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 Implementations\n", + "\n", + "The next cell implements the brute force algorithm using nested `for` loops" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "cell_id": "44329d9330bd4375a0ac59857f7ab3a8", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 490, + "execution_start": 1700998215236, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing two_sum_bf:\n", + "Tests finished.\n" + ] + } + ], + "source": [ + "def two_sum_bf(nums: list, target: int) -> tuple[int, int]:\n", + " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", + "\n", + " Preconditions:\n", + " len(nums) >= 2\n", + " -109 <= nums[i] <= 109\n", + " -109 <= target <= 109\n", + " Exactly one pair a and b in nums has a + b = target\n", + " \"\"\"\n", + " for index_1 in range(len(nums)):\n", + " for index_2 in range(len(nums)):\n", + " if index_1 != index_2 and nums[index_1] + nums[index_2] == target:\n", + " return index_1, index_2\n", + " return (-1, -1)\n", + "\n", + "\n", + "test(two_sum_bf, two_sum_tests)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next up is the mapping algorithm implemented using Python's `dict`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "cell_id": "f1acd50e3be54a0e948c7795637ee2a0", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 443, + "execution_start": 1700998216141, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing two_sum_map:\n", + "Tests finished.\n" + ] + } + ], + "source": [ + "def two_sum_map(nums: list, target: int) -> tuple[int, int]:\n", + " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", + "\n", + " Preconditions:\n", + " len(nums) >= 2\n", + " -109 <= nums[i] <= 109\n", + " -109 <= target <= 109\n", + " Exactly one pair a and b in nums has a + b = target\n", + " \"\"\"\n", + " differences: dict[int, int] = {} # allowed\n", + " for index in range(len(nums)):\n", + " difference = target - nums[index]\n", + " if nums[index] in differences:\n", + " return differences[nums[index]], index\n", + " differences[difference] = index\n", + " return (-1, -1)\n", + "\n", + "\n", + "test(two_sum_map, two_sum_tests)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "11e07df56c7543d8951171e634bbfa14", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 4 Performance\n", + "\n", + "In this section we measure the run-times of our solutions under various\n", + "conditions to see if our analysis matches the results." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 generating inputs\n", + "\n", + "Since `time_functions` from the `algoesup` library requires code to generate\n", + "input instances, we shall write that first. The worst-case complexity is often\n", + "the most useful, so we write a function that generates a worst case instance\n", + "for Two sum." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "cell_id": "01f9421892f340f8b3ade6e25e315a09", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 471, + "execution_start": 1700998216591, + "source_hash": null + }, + "outputs": [], + "source": [ + "import random\n", + "\n", + "def worst(size: int) -> tuple[list[int], int]:\n", + " \"\"\"Given a size, generate a worst-case problem instance for two sum.\n", + "\n", + " Preconditions: size >= 2;\n", + " \"\"\"\n", + " num1 = random.randint(-109, 109) # allowed\n", + " num2 = random.randint(-109, 109) # allowed\n", + " target = num1 + num2\n", + " nums = [num1, num2]\n", + " while len(nums) < size:\n", + " new_num = random.randint(-109, 109) # allowed\n", + " valid = True\n", + " for num in nums:\n", + " if target - new_num == num:\n", + " valid = False\n", + " if valid:\n", + " nums.append(new_num)\n", + " nums = nums[2:] + nums[:2]\n", + " return nums, target" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 Run-times for each solution\n", + "\n", + "We now compare runtimes for both solutions using the worst-case input generator." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "cell_id": "aba31a656d9f45c385f81e314f656e34", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 17260, + "execution_start": 1700998217027, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Inputs generated by worst\n", + "\n", + "Input size two_sum_bf two_sum_map \n", + " 100 672.2 9.4 µs\n", + " 200 2603.2 19.4 µs\n", + " 400 11051.7 36.5 µs\n", + " 800 46788.6 76.9 µs\n", + " 1600 183276.2 172.8 µs" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "solutions = [two_sum_bf, two_sum_map]\n", + "time_functions(solutions, worst, start=100, double=4, chart=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The run-times for `two_sum_bf` almost instantly eclipse that of `two_sum_map`.\n", + "On the chart, it looks as if the run-times for `two_sum_map` are not growing at\n", + "all,but we know by looking at numbers above that this is not the case. \n", + "\n", + "Let us see if we can modify the inputs of `time_functions` for a better visual\n", + "representation." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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/P39MXLkSHz++eewt7eHk5MTpk2bptFGoVBgxYoVaNmyJczNzVG+fHls27ZNvT8sLAwKhQJxcXHqbZGRkVAoFLh9+zbCwsLQv39/xMfHQ6FQQKFQ5DhHlqioKDRp0gQlSpSAtbU1ateujVOnTgHI2Vvl4eGhPl72Jcu9e/fQpUsX2Nrawt7eHu3atcPt27ff9yMjovfEpImICq2ff/4ZlpaWOH78OObPn48ZM2YgJCREo83kyZPRsWNHREVFoWfPnujWrRsuX76s1fHr16+PxYsXw9raGjExMYiJicH48eNzbduzZ0+4urri5MmTOH36NL744gsYGxvn2vbkyZPq492/fx9169aFn58fACA9PR0BAQEoUaIEwsPDceTIEVhZWaFFixZIS0vLw6dDRLrG23NEVGhVr14dU6dOBQBUrFgRP/zwAw4cOIBmzZqp23Tu3BmDBg0CAMycORMhISH4/vvvsXz58rce38TEBDY2NlAoFHBycnpj27t372LChAmoXLmyOp7XKV26tPr1qFGjEBMTg5MnTwIANm/ejMzMTKxevVrd+7Ru3TrY2toiLCwMzZs3f2vcRKQf7GkiokKrevXqGuvOzs54/PixxrZ69erlWNe2pykvxo4di0GDBqFp06aYO3cubt68+db3rFq1CmvWrMHOnTvViVRUVBRu3LiBEiVKwMrKClZWVrC3t0dKSopWxyQi/WHSRESF1qu3vxQKBTIzM7V+v4GB9E+gEEK9LT09/Z1imTZtGi5evIjAwED8888/8Pb2xvbt21/bPjQ0FJ999hl++eUXjeQvMTERtWvXRmRkpMZy7do19OjR451iIyLdYNJEREXasWPHcqxXqVIFwMvbZDExMer9kZGRGu1NTEygUqm0OpeXlxfGjBmDv/76Cx06dMC6detybXfjxg106tQJX375JTp06KCx74MPPsD169fh4OAAT09PjcXGxkarOIhIP5g0EVGRtnXrVqxduxbXrl3D1KlTceLECYwYMQIA4OnpCTc3N0ybNg3Xr1/H7t278d1332m838PDA4mJiThw4AD+/fdfJCcn5zjHixcvMGLECISFheHOnTs4cuQITp48qU7OXm3bpk0b1KpVC59++iliY2PVCyANKC9VqhTatWuH8PBwREdHIywsDCNHjsT9+/f18AkRkbaYNBFRkTZ9+nT89ttvqF69On755Rds2rQJ3t7eAKTbe5s2bcKVK1dQvXp1zJs3D7NmzdJ4f/369TF06FB07doVpUuXxvz583Ocw9DQEE+fPkWfPn3g5eWFLl26oGXLlpg+fXqOto8ePcKVK1dw4MABuLi4wNnZWb0AgIWFBQ4dOoSyZcuiQ4cOqFKlCgYOHIiUlBRYW1vr4RMiIm0pRPab+URERYhCocD27dtlqSROREUPe5qIiIiItMCkiYiIiEgLLG5JREUWRx8QkS6xp4mIiIhIC0yaiIiIiLTApImIiIhIC0yaiIiIiLTApImIiIhIC0yaiIiIiLTApImIiIhIC0yaiIiIiLTApImIiIhIC/8P/tmiVQonJbsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "solutions = [two_sum_bf, two_sum_map]\n", + "time_functions(solutions, worst, start=1, double=4, text=False, chart=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The point at which the growth rates start to diverge is much clearer now. The\n", + "brute force approach's run-times still accelerate off into the stratosphere,\n", + "but we can see the separation and trend of the mapping algorithm a lot better.\n", + "\n", + "The run-times for the brute force algorithm approximately quadruple every time\n", + "the input size is doubled, confirming our prediction of a quadratic worst-case\n", + "time complexity. For the mapping algorithm, the pattern matches that of linear\n", + "time complexity; as we double the input size, our run-times also double." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 Conclusion\n", + "\n", + "We started this essay with the definition of the Two sum problem. Next, we\n", + "outlined two algorithms: brute force, and mapping, then analysed the time\n", + "complexity of each one. After that, we implemented and tested our solutions\n", + "using Python, and in the penultimate section we used empirical testing to see\n", + "if our analysis matched the results. Now we must decide which of our algorithms is\n", + "best.\n", + "\n", + "The brute force approach, unsurprisingly, is not very efficient when it comes\n", + "to run-times. We suspected this would be the case, then the empirical testing\n", + "confirmed it. Its only positive attributes were its simplicity and efficient\n", + "memory usage. \n", + "\n", + "In contrast, the time complexity of the mapping algorithm is reasonably\n", + "efficient, but this is achieved by using extra memory. In the final analysis,\n", + "the quadratic time complexity of the brute force algorithm cannot be ignored.\n", + "The small trade of space for time is worth it in this instance. We therefore\n", + "conclude the mapping algorithm is best." + ] + } + ], + "metadata": { + "deepnote": {}, + "deepnote_execution_queue": [], + "deepnote_notebook_id": "4a6de191ec8443f9b9cd2c322d8dd60d", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "orig_nbformat": 2 + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Deepnote/example-two-sum-3.ipynb b/Deepnote/example-two-sum-3.ipynb new file mode 100644 index 0000000..90e8479 --- /dev/null +++ b/Deepnote/example-two-sum-3.ipynb @@ -0,0 +1,963 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Two sum (three solutions)\n", + "\n", + "*Michael Snowden*, 22 January 2024" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "3dab5b7cbe1443acb7ae1b3c9a849b96", + "deepnote_cell_type": "markdown" + }, + "source": [ + "In this extended essay we aim to solve the classic [Two Sum](https://leetcode.com/problems/two-sum/)\n", + "problem from [LeetCode](https://leetcode.com/). We are going to explore,\n", + "analyse, and compare a selection of approaches with the end goal of finding a\n", + "clear and efficient solution.\n", + "\n", + "We assume the reader has an intermediate understanding of Python, including\n", + "aspects like importing modules, using loops, and applying conditionals.\n", + "Furthermore, Big-Oh notation is used to analyse the complexity of our\n", + "solutions and we refer to terms such as binary search and brute force." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "669a241a038a4ea9acd6d114edf21192", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 1 Problem\n", + "\n", + "To effectively solve Two Sum, it is crucial we thoroughly understand the\n", + "problem. We need to identify the inputs, outputs and the relationship between\n", + "them.\n", + "\n", + "Leetcode provides the following problem description.\n", + "\n", + "\"*Given an array of integers `nums` and an integer `target`, return indices of the two numbers such\n", + "that they add up to target.*\"\n", + "\n", + " - *$-109 \\leq$ `nums[i]` $\\leq 109$*\n", + " - *$-109 \\leq$ `target` $\\leq 109$*\n", + " - *Only one valid answer exists.*\n", + "\n", + "We can extract some important information from their description, namely the pre- and post-conditions.\n", + "\n", + "**Preconditions**:\n", + "- $-109 \\leq$ `nums[i]` $\\leq 109$\n", + "- $-109 \\leq$ `target` $\\leq 109$\n", + "- Exactly one pair `a` and `b` in `nums` has `a` + `b` = `target`\n", + "\n", + "**Postconditions**:\n", + "- `len(indices)` = 2;\n", + "- `nums[indices[0]]` + `nums[indices[1]]` = `target`\n", + "\n", + "These conditions _must_ be satisfied for our algorithm to be defined and correct. We will\n", + "refer back to these conditions in parts of the essay." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "7770c0f5f8874b8cb75275c9de3a8424", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 2 Algorithms\n", + "\n", + "With our problem defined, the next step is to think of ways to solve it. This\n", + "section presents three distinct approaches to solving Two sum: brute force,\n", + "sorting and mapping." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "873b3fad44264c8f9d89f71953220701", + "deepnote_cell_type": "markdown" + }, + "source": [ + "\n", + "### 2.1 Brute force\n", + "\n", + "Generally speaking, a brute force algorithm tries all possibilities, and\n", + "selects a correct one. For this problem, the possibilities are all sums that\n", + "can be obtained by pairing each number in `nums` with every other number, and\n", + "the correct pair is identified if the sum matches `target`. We are checking all\n", + "possible sums, so we are sure to find our indices if they exist. Looking back\n", + "at the preconditions, we can see that each problem instance must have exactly\n", + "one pair that sums to `target`. Hence this approach is guaranteed to find a\n", + "solution, as long as our preconditions are met.\n", + "\n", + "Getting _any_ working solution regardless of efficiency can be an important\n", + "first step. Sometimes we need to solve a problem quickly, and more importantly\n", + "it gets us thinking through it, which can often lead to additional solutions.\n", + "\n", + ">**Brute force algorithm**: An outer loop iterates through each number in\n", + ">`nums`, then for each number, an inner loop iterates `nums` again. For each\n", + ">pair of numbers, if their indices are different and their sum matches `target`,\n", + ">return their indices.\n", + "\n", + "```text\n", + "1. for each index_1 from 0 to len(nums)-1:\n", + " 1. for each index_2 from 0 to len(nums)-1:\n", + " 1. if index_1 != index_2 and nums[index_1] + nums[index_2] == target:\n", + " 1. let indices be (index_1, index_2)\n", + " 2. stop\n", + "```\n", + "\n", + "Let _n_ = `len(nums)`, then this algorithm has a single loop that does _n_\n", + "iterations. Because we are using a hashmap, all the operations performed in the\n", + "loop are done in constant time. Thus, our mapping algorithm has O(_n_) time\n", + "complexity in in the worst-case. Similar to the brute force approach, if the\n", + "correctly summing numbers are in the first two positions of `nums`, then the\n", + "run-times will be unaffected by increasing input sizes, giving a best-case\n", + "complexity of O(1)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "ff3c2daf13fb4b6793c2fe94f9bf891e", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 2.2 Sorting\n", + "\n", + "For many computational problems a good question to ask is: will sorting the\n", + "inputs simplify the problem and lead to a more efficient solution? In this\n", + "case, the answer is yes, we can exploit the properties of a sorted input in a\n", + "similar way to binary search. Rather than focusing on the middle of the\n", + "sequence, we keep track of the two ends with position variables. This kind of\n", + "approach is commonly referred to as a \"double pointer algorithm\" named after\n", + "the two position variables.\n", + "\n", + "Before we move on to a formal description of the algorithm, we need to\n", + "consider a crucial aspect of the Two Sum problem: it requires _indices_ to be\n", + "returned. This has implications for our solution: direct sorting of `nums` is\n", + "not possible because the original index positions would be altered. Thus, any\n", + "additional data structures we use must keep track of the corresponding indices\n", + "from elements of `nums`. Keeping this in mind, here is the description of our\n", + "algorithm.\n", + "\n", + ">**With sorting algorithm**: Create a pair `(number, index)` for each number in\n", + ">`nums`. Add each pair to a list `pairs`, then sort the list into ascending\n", + ">order based on the numbers. Initialise two variables `start` and `end` to be 0\n", + ">and `len(nums) - 1` respectively. While `start` $\\neq$ `end` sum the numbers in\n", + ">`pairs` corresponding to the indices `start` and `end`. If the sum is less than\n", + ">`target`, move `start` to the right by incrementing its value by one. If the\n", + ">sum is greater than `target`, move `end` to the left by decrementing its value\n", + ">by one. If the sum matches `target` then return the indices of both numbers.\n", + "\n", + "The logic of this strategy is as follows. The sum of the numbers at positions\n", + "`start` and `end` in our `pairs` list will have one of the following three cases:\n", + "the sum can be equal to, greater than or less than `target`. If the sum is\n", + "equal to target, then we have found our solution and can return the indices.\n", + "If the sum is less than target, we need to increase the value of our sum;\n", + "the only way to do this is by moving `start` to the right. Remember we have\n", + "sorted the list, so all values to the right are greater. If our sum is\n", + "greater than `target` we need to decrease the value of our sum, and the\n", + "only way to do that by moving `end` to the left.\n", + "\n", + "```text\n", + "1. let pairs be an empty list\n", + "2. for each index from 0 to len(nums):\n", + " 1. let `pair be (nums[index], index)\n", + " 2. append pair to `pairs`\n", + "3. let pairs be sorted by value at first index\n", + "4. let start = 0\n", + "5. let end = len(nums) -1\n", + "6. while start $\\neq$ end:\n", + " 1. pair_sum = pairs[start][0] + pairs[end][0]\n", + " 2. if pairs_sum = target:\n", + " 1. let indices be (pairs[start][1], pairs[end][1])\n", + " 2. stop\n", + " 3. otherwise if pairs_sum > target:\n", + " 1. let end = end - 1\n", + " 4. otherwise:\n", + " 1. let start = start + 1\n", + "```\n", + "\n", + "The important parts of this algorithm with respect analysing time complexity are: the for loop at\n", + "step number two, the sorting operation at step number three and the while loop at step number six.\n", + "\n", + "Let _n_ = `len(nums)`, then the for loop always does _n_ iterations, and we will assume the sorting\n", + "operation has worst-case complexity of O(nlog(n)) and best-case of O(n), that just leaves us with\n", + "the while loop. The while loop will do at most _n_ iterations in a scenario where one of the\n", + "variables `start` or `end` stays in place and the other is incremented until they are next to each\n", + "other.\n", + "\n", + "It is clear now that the growth rate of the sorting operation will dominate this approach in terms\n", + "of complexity. Therefore, this algorithm has an overall worst-case time complexity of O(nlog(n)) and\n", + "a best-case of O(n)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "602d836888cf43e1abc9e17837086972", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 2.3 Mapping\n", + "\n", + "In the previous algorithm we paired each number in `nums` with its index out of\n", + "necessity. We wanted to sort `nums` without loosing the original paring of\n", + "number to index. This action of pairing numbers to indices is a useful idea;\n", + "what if instead of pairing a number directly to its index, we paired the\n", + "difference between our number and the target number (i.e. `target` - number) to\n", + "its index? If we did that, then finding our pair would be a case of checking if\n", + "current number is in thek pairs list.\n", + "\n", + "This is a good start, but we still have a problem, the lookup operation takes\n", + "linear time for a list. We need an alternative data structure, one with much\n", + "efficient lookup times.\n", + "\n", + "If fast lookup times are required, then we should always consider a hashtable.\n", + "This data structure is known informally by many different names such as\n", + "dictionary, hashmap, map and associative array. A key property of this data\n", + "structure is the lookup operation has constant time complexity in the average\n", + "case.\n", + "\n", + "For every number in `nums`, we can map the difference between it and the target\n", + "(`target` - number) to its corresponding index using a hashtable. This allows\n", + "us to check the hashmap for matching numbers in constant time.\n", + "\n", + ">**Mapping algorithm**: For each number in `nums`, if its in the hashmap, return\n", + ">its index and the index mapped to it. Otherwise, calculate the difference\n", + ">(`target` - number) and map it to the corresponding index of number.\n", + "\n", + "```text\n", + "1. let differences be an empty dictionary\n", + "2. for index from 0 to len(nums) - 1:\n", + " 1. if nums[index] in differences:\n", + " 1.let indices be (differences[nums[index]], index)\n", + " 2. stop\n", + " 2. otherwise:\n", + " 1. let difference = target - nums[index]\n", + " 2. let differences[difference] = index\n", + "```\n", + "Let _n_ = `len(nums)`, then this algorithm has a single loop that does _n_\n", + "iterations. Because we are using a hashmap, all the operations performed in the\n", + "loop are done in constant time. Thus, our mapping algorithm has O(_n_) time\n", + "complexity in in the worst-case. Similar to the brute force approach, if the\n", + "correctly summing numbers are in the first two positions of `nums`, then the\n", + "run-times will be unaffected by increasing input sizes, giving a best-case\n", + "complexity of O(1)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "924f098f9fc84db7b15258ea48bc32c7", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 2.4 Summary\n", + "\n", + "Many times a brute force approach can be the simplest solution; it is a simple strategy that is easy\n", + "to implement. Furthermore, this strategy is more efficient in terms of memory usage than the other\n", + "two because it does not use extra data structures. However, this approach has O(_n_ $^2$) time\n", + "complexity. Every time we double the input size, the run-times increase fourfold, which is not very\n", + "desirable especially if there are better options.\n", + "\n", + "Our next approach used sorting to endow our list with properties useful for searching. This\n", + "algorithm is perhaps the most convoluted and maybe harder to think through relative to the others.\n", + "Furthermore, it requires extra memory compared to the brute force approach. The benefits of the\n", + "strategy are the O(_n_ log(_n_)) time complexity which improves considerably on the brute force\n", + "algorithm.\n", + "\n", + "The third solution made a single pass through `nums` and used a hashtable to map differences to\n", + "indexes. While not as simple as the brute force algorithm, this approach is not hard to follow or\n", + "understand; everything is carried out in a single loop. On the other hand, this approach has the\n", + "additional memory overhead of the hashtable itself, which needs to be taken into account. The main\n", + "advantage with this approach is the O(n) time complexity for the worst-case, making it the most\n", + "efficient when it comes to scaling run-times with input size.\n", + "\n", + "When considering all three approaches, and taking into account aspects of efficiency as well as\n", + "readability, the mapping algorithm seems to come out on top. It makes that that classic space-time\n", + "trade off i.e sacrifices some memory efficiency for time efficiency, but the simplicity of the\n", + "approach combined with the efficient time complexity makes it a worth while exchange." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "b874355374024f0aac10bf85290e3830", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 3 Code\n", + "\n", + "In this section we shall implement the algorithms written in previous parts of the essay. We shall\n", + "do so using a basic subset of Python in the hope of making our code as language agnostic as\n", + "possible.\n", + "\n", + "Throughout this section we will make use of code quality tools such as linters and type checkers to\n", + "help us meet the standards expected for clean readable and error free code." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "b2c9b95fbb2848faae2e546a04510a83", + "deepnote_cell_type": "markdown" + }, + "source": [ + " ### 3.1 Preparation and imports\n", + "\n", + "The next two cells set up the automatic type checking linting and Construct checking for our code\n", + "cells. We also import some of the functions we will use to test, time and generate instances for our\n", + "solutions.\n", + "\n", + "If one or more of the styling or type checking ideals are violated, the warnings will be printed\n", + "with the corresponding line number underneath the offending cell." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "cell_id": "aaadf1a848f74353838a9173da3520ab", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 572, + "execution_start": 1700998213233, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pytype was activated\n", + "ruff was activated\n", + "allowed was activated\n" + ] + } + ], + "source": [ + "import random\n", + "from algoesup import test, time_functions, time_cases\n", + "\n", + "\n", + "%pytype on\n", + "%ruff on\n", + "%allowed on" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "3d5d24a861574074ae34951e9a0ecef1", + "deepnote_cell_type": "markdown" + }, + "source": [ + "### 3.2 Testing\n", + "\n", + "Before We start implementing our algorithms, we write some tests. The `test()`\n", + "function from the `algoesup` library is a simple way to test for correctness.\n", + "It takes a function and a test table then reports any failed tests.\n", + "\n", + "To test the algorithms, we need to consider edge cases alongside\n", + "other important functional tests. Edge cases often occur at the extreme ends of\n", + "the spectrum of allowed inputs or outputs, they should ideally test unexpected\n", + "conditions that might reveal bugs in the code. For the two sum problem, we\n", + "should test the minimum size for `nums` and also the extremes of the values\n", + "that can be present. We should include negative numbers and zero in our tests\n", + "because integers are present in the inputs.\n", + "\n", + "The cell below contains our test table, note the descriptions of each case in\n", + "the first column, and how the boundary cases, negative numbers and zero are all\n", + "present in the table." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "cell_id": "ac8b19eaedc64b4580b0a0ee55a38d06", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 561, + "execution_start": 1700998214777, + "source_hash": null + }, + "outputs": [], + "source": [ + "two_sum_tests = [\n", + " [\"minimum size for nums\", [1, 2], 3, (0, 1)],\n", + " [\"non-adjacent indices\", [1, 4, 9, 7], 8, (0, 3)],\n", + " [\"first two elements\", [5, 7, 1, 2, 8], 12, (0, 1)],\n", + " [\"last two elements\", [1, 3, 5, 7, 8], 15, (3, 4)],\n", + " [\"repeated elements\", [6, 2, 3, 2], 4, (1, 3)],\n", + " [\"max and min range\", [-109, 109, 0], 0, (0, 1)],\n", + " [\"lowest target value\", [-50, 1, -59], -109, (0, 2)],\n", + " [\"highest target value\", [50, 1, 59], 109, (0, 2)],\n", + "]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 Implementations\n", + "\n", + "The next cell implements the brute force algorithm using nested `for` loops\n", + "with a conditional statement to check for the correct pair. Note how this\n", + "conditional statement looks similar to one of the postconditions; this is a\n", + "good sign." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "cell_id": "44329d9330bd4375a0ac59857f7ab3a8", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 490, + "execution_start": 1700998215236, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing two_sum_bf:\n", + "Tests finished.\n" + ] + } + ], + "source": [ + "def two_sum_bf(nums: list, target: int) -> tuple[int, int]:\n", + " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", + "\n", + " Preconditions:\n", + " len(nums) >= 2\n", + " -109 <= nums[i] <= 109\n", + " -109 <= target <= 109\n", + " Exactly one pair a and b in nums has a + b = target\n", + " \"\"\"\n", + " for index_1 in range(len(nums)):\n", + " for index_2 in range(len(nums)):\n", + " if index_1 != index_2 and nums[index_1] + nums[index_2] == target:\n", + " return index_1, index_2\n", + " return (-1, -1)\n", + "\n", + "\n", + "test(two_sum_bf, two_sum_tests)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next up is the approach that uses sorting." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "cell_id": "6e0f5e094dfc442696d7eb845caab267", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 546, + "execution_start": 1700998215697, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing two_sum_sort:\n", + "Tests finished.\n" + ] + } + ], + "source": [ + "def two_sum_sort(nums: list, target: int) -> tuple[int, int]:\n", + " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", + "\n", + " Preconditions:\n", + " len(nums) >= 2\n", + " -109 <= nums[i] <= 109\n", + " -109 <= target <= 109\n", + " Exactly one pair a and b in nums has a + b = target\n", + " \"\"\"\n", + " pairs = []\n", + " for index in range(len(nums)):\n", + " pairs.append((nums[index], index))\n", + " pairs.sort()\n", + " start = 0\n", + " end = len(nums) - 1\n", + " while start < end:\n", + " current_sum = pairs[start][0] + pairs[end][0]\n", + " if current_sum == target:\n", + " # return the indices in ascending order for reliable testing\n", + " lower_index = min(pairs[start][1], pairs[end][1])\n", + " upper_index = max(pairs[start][1], pairs[end][1])\n", + " indices = (lower_index, upper_index)\n", + " return indices\n", + " if current_sum < target:\n", + " start = start + 1\n", + " else:\n", + " end = end - 1\n", + " return (-1, -1)\n", + "\n", + "\n", + "test(two_sum_sort, two_sum_tests)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, the mapping algorithm is implemented using Python's `dict`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "cell_id": "f1acd50e3be54a0e948c7795637ee2a0", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 443, + "execution_start": 1700998216141, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing two_sum_map:\n", + "Tests finished.\n" + ] + } + ], + "source": [ + "def two_sum_map(nums: list, target: int) -> tuple[int, int]:\n", + " \"\"\"Given a list of integers return the indices of the pair that sums to target.\n", + "\n", + " Preconditions:\n", + " len(nums) >= 2\n", + " -109 <= nums[i] <= 109\n", + " -109 <= target <= 109\n", + " Exactly one pair a and b in nums has a + b = target\n", + " \"\"\"\n", + " differences: dict[int, int] = {} # allowed\n", + " for index in range(len(nums)):\n", + " difference = target - nums[index]\n", + " if nums[index] in differences:\n", + " return differences[nums[index]], index\n", + " differences[difference] = index\n", + " return (-1, -1)\n", + "\n", + "\n", + "test(two_sum_map, two_sum_tests)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The brute force algorithm comes out on top in terms of simplicity, it is just a case of checking\n", + "every pair of numbers. The double pointer approach seems like the most convoluted with the mapping\n", + "differences algorithm somewhere in the middle of the two." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "cell_id": "11e07df56c7543d8951171e634bbfa14", + "deepnote_cell_type": "markdown" + }, + "source": [ + "## 4 Performance\n", + "\n", + "In this section we will measure the run-times of our solutions under various conditions to see if\n", + "our analysis matches the results." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 generating inputs\n", + "\n", + "`time_functions` and `time_cases` from the `algoesup` library require a function that generates\n", + "problem instances of a given size. We want to be able to generate instances that correspond to best,\n", + "normal and worst cases for the solutions were appropriate.\n", + "\n", + "The best normal and worst case scenarios might not always be the same for each algorithm, for\n", + "example, the best-case for `two_sum_bf` and `two_sum_map` would be when the first two numbers\n", + "encountered sum to `target` but this is not the case for `two_sum_sort` where the best-case would be\n", + "dependent on the sorting.\n", + "\n", + "Since `two_sum_bf` and `two_sum_map` share the same best- and worst-case scenarios, we shall focus\n", + "on those for our input generators. For the normal-case the matching numbers will be in the middle\n", + "two positions of `nums`" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "cell_id": "01f9421892f340f8b3ade6e25e315a09", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 471, + "execution_start": 1700998216591, + "source_hash": null + }, + "outputs": [], + "source": [ + "def two_sum_instance(size: int, scenario: str) -> tuple[list[int], int]:\n", + " \"\"\"Given a size, generate a problem instance for two sum.\n", + "\n", + " Preconditions: size >= 2; scenario in {\"best\", \"normal\", \"worst\"}\n", + " \"\"\"\n", + " num1 = random.randint(-109, 109) # allowed\n", + " num2 = random.randint(-109, 109) # allowed\n", + " target = num1 + num2\n", + " nums = [num1, num2]\n", + " while len(nums) < size:\n", + " new_num = random.randint(-109, 109) # allowed\n", + " valid = True\n", + " for num in nums:\n", + " if target - new_num == num:\n", + " valid = False\n", + " if valid:\n", + " nums.append(new_num)\n", + " if scenario == \"worst\":\n", + " nums = nums[2:] + nums[:2]\n", + " elif scenario == \"normal\":\n", + " middle = len(nums) // 2\n", + " nums = nums[2:middle] + nums[:2] + nums[middle:]\n", + " # else nums is already best case\n", + " return nums, target\n", + "\n", + "\n", + "def best(size: int) -> tuple[list[int], int]:\n", + " \"\"\"Given a size, generate a best case instance for two sum.\n", + "\n", + " Preconditions: size >= 2\n", + " \"\"\"\n", + " return two_sum_instance(size, \"best\")\n", + "\n", + "\n", + "def normal(size: int) -> tuple[list[int], int]:\n", + " \"\"\"Given a size, generate a normal case instance for two sum.\n", + "\n", + " Preconditions: size >= 2\n", + " \"\"\"\n", + " return two_sum_instance(size, \"normal\")\n", + "\n", + "\n", + "def worst(size: int) -> tuple[list[int], int]:\n", + " \"\"\"Given a size, generate a worst case instance for two sum.\n", + "\n", + " Preconditions: size >= 2\n", + " \"\"\"\n", + " return two_sum_instance(size, \"worst\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 Best, normal and worst case run-times" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First let us see the run-times of `two_sum_bf` for best, normal and worst-case instances. Note the\n", + "input size starts at 100 and is doubled 4 times reaching 1600 for the last data point." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run-times for two_sum_bf\n", + "\n", + "Input size worst normal best \n", + " 100 692.7 336.9 0.5 µs\n", + " 200 2629.0 1291.7 0.5 µs\n", + " 400 10965.0 5257.5 0.5 µs\n", + " 800 46806.7 22473.7 0.6 µs\n", + " 1600 184668.2 91293.8 0.5 µs" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlUAAAHHCAYAAACWQK1nAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACQrUlEQVR4nOzdeXhM1xvA8e8ksgnZkE0isStiX35pxZoKVaWqFC1aLVqKUlRrL6VoLbV1RVdKo9qiFbET1L7HloqSSIskQvY5vz9uc2UIEpJMlvfzPPOYe+6Ze9+bmWRe557FoJRSCCGEEEKIR2Jh7gCEEEIIIYoCSaqEEEIIIXKBJFVCCCGEELlAkiohhBBCiFwgSZUQQgghRC6QpEoIIYQQIhdIUiWEEEIIkQskqRJCCCGEyAWSVAkhhBBC5AJJqoQQueqvv/7CYDCwdOlSc4eSIwkJCbz66qu4u7tjMBgYNmyYuUMS2TBx4kQMBgP//vvvA+umpaUxatQovL29sbCwoHPnznkfoChWJKkSooBbunQpBoNBf5QoUYLy5cvTt29fLl26ZLa4vv/+e+bMmWO28+e2Dz74gKVLl/L666/zzTff8NJLL+X5+X7++ec8PYcw9dVXXzFz5ky6du3KsmXLeOutt8wdkihiSpg7ACFE9kyePJmKFSuSlJTE7t27Wbp0KTt27ODYsWPY2trmezzff/89x44du6tFx8fHh8TERKysrPI9pkexadMm/ve//zFhwoR8Od8HH3xA165dpbUkH23atIny5csze/Zsc4ciiihJqoQoJNq3b0+jRo0AePXVVylbtiwffvghv/zyC926dTNzdLcZDAazJHmPKiYmhpo1a+ba8dLS0jAajVhbW+faMcWjiYmJwcnJydxhiCJMbv8JUUgFBAQAcO7cOb2sZcuWtGzZ8q66ffv2xdfXV9/O6Pc0a9YsPvvsMypXroyNjQ2NGzfmzz//fOC5W7Zsydq1a7lw4YJ+WzLj+Fn1qerbty+lSpUiMjKSp59+mlKlSlG+fHkWLFgAwNGjR2ndujX29vb4+Pjw/fff33XO2NhYhg0bhre3NzY2NlSpUoUPP/wQo9FoUm/58uU0bNiQ0qVL4+DggJ+fH3Pnzr3ntWzZsgWDwUBERARr167Vr+evv/4CtC/ifv364ebmhq2tLXXr1mXZsmUmx8j885wzZ47+8zxx4kSW5zQYDNy8eZNly5bp5+vbty9HjhzBYDDwyy+/6HX379+PwWCgQYMGJsdo3749TZs2NSlbuHAhtWrVwsbGBk9PTwYNGkRsbOw9rz0rqampTJo0iapVq2Jra0uZMmVo1qwZISEhep2H+ZwtWLCASpUqUbJkSdq2bcvFixdRSvH+++/j5eWFnZ0dnTp14tq1azmKN8O///5Lt27dcHBwoEyZMgwdOpSkpCSTODZv3szx48f1n/mWLVse6lxC3Iu0VAlRSGV86Ts7Oz/0Mb7//ntu3LjBgAEDMBgMzJgxgy5dunD+/Pn73r577733iIuL4++//9ZvpZQqVeq+50pPT6d9+/Y0b96cGTNm8N133zF48GDs7e1577336NWrF126dGHx4sX07t0bf39/KlasCMCtW7do0aIFly5dYsCAAVSoUIFdu3YxZswYoqKi9L5dISEh9OjRgzZt2vDhhx8CcPLkSXbu3MnQoUOzjOuxxx7jm2++4a233sLLy4sRI0YAUK5cORITE2nZsiVnz55l8ODBVKxYkZUrV9K3b19iY2PvOuaSJUtISkqif//+2NjY4OLikuU5v/nmG1599VWaNGlC//79AahcuTK1a9fGycmJbdu28cwzzwCwfft2LCwsOHz4MPHx8Tg4OGA0Gtm1a5f+WtA6bE+aNInAwEBef/11wsPDWbRoEX/++Sc7d+7M9u3YiRMnMm3aND2++Ph49u3bx4EDB3jyySezdYw7fffdd6SkpPDmm29y7do1ZsyYQbdu3WjdujVbtmxh9OjRnD17lk8++YS3336br776Ksfn6NatG76+vkybNo3du3czb948rl+/ztdff025cuX45ptvmDp1KgkJCUybNg3Q3nshcpUSQhRoS5YsUYDauHGj+ueff9TFixfVqlWrVLly5ZSNjY26ePGiXrdFixaqRYsWdx2jT58+ysfHR9+OiIhQgCpTpoy6du2aXr5mzRoFqF9//fWBcXXo0MHkmHcee8mSJSbnB9QHH3ygl12/fl3Z2dkpg8Ggli9frpefOnVKAWrChAl62fvvv6/s7e3V6dOnTc71zjvvKEtLSxUZGamUUmro0KHKwcFBpaWlPTD+O/n4+KgOHTqYlM2ZM0cB6ttvv9XLUlJSlL+/vypVqpSKj483uWYHBwcVExOTrfPZ29urPn363FXeoUMH1aRJE327S5cu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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "input_generators = [worst, normal, best]\n", + "time_cases(two_sum_bf, input_generators, start_size=100, double=4, chart=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see from the chart and run-times above that our analysis seems to line\n", + "up with the data. As we double the input size for the brute force algorithm,\n", + "the run-times quadruple, as you would expect for quadratic time complexity. For\n", + "the best case the run-times more or less stay the same for increasing inputs\n", + "suggesting constant time complexity. The normal case is somewhere in the middle\n", + "of the two.\n", + "\n", + "Now let us do the same for `two_sum_map`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run-times for two_sum_map\n", + "\n", + "Input size worst normal best \n", + " 100 10.2 5.2 0.4 µs\n", + " 200 17.6 9.3 0.5 µs\n", + " 400 43.1 20.5 0.5 µs\n", + " 800 83.9 38.3 0.5 µs\n", + " 1600 151.5 78.5 0.5 µs" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "input_generators = [worst, normal, best]\n", + "time_cases(two_sum_map, input_generators, start_size=100, double=4, chart=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first thing to note is the dramatic reduction in magnitude of the\n", + "run-times. The scale on the y-axis for this graph only goes up to 200 µs\n", + "whereas the previous graph went up to 20000 µs, which is 10 times larger. Also\n", + "the plot for our worst-case here has a much straighter line with run-times\n", + "doubling in proportion with input size. This aligns with our prediction of\n", + "linear time complexity." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.3 Run-times for each solution\n", + "\n", + "Let us now compare the runtimes for all three solutions side by side using the input generator for\n", + "the worst case." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "cell_id": "aba31a656d9f45c385f81e314f656e34", + "deepnote_cell_type": "code", + "deepnote_to_be_reexecuted": false, + "execution_millis": 17260, + "execution_start": 1700998217027, + "source_hash": null + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Inputs generated by worst\n", + "\n", + "Input size two_sum_bf two_sum_sort two_sum_map \n", + " 100 679.2 22.8 9.1 µs\n", + " 200 2607.1 45.2 18.1 µs\n", + " 400 10590.9 112.9 43.3 µs\n", + " 800 46378.7 179.6 79.6 µs\n", + " 1600 180920.1 531.4 173.7 µs" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "solutions = [two_sum_bf, two_sum_sort, two_sum_map]\n", + "time_functions(solutions, worst, start=100, double=4, chart=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The run-times for `two_sum_bf` almost instantly eclipse that of `two_sum_sort`\n", + "and `two_sum_map`.On the chart it looks as if the run-times for `two_sum_sort`\n", + "and `two_sum_map` are not growing at all, but we know by looking at numbers\n", + "above that this is not the case. Let us see if we can adjust the inputs of\n", + "`time_functions` so the growth rates of the fastest two functions have a better\n", + "visual representation in the chart." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "solutions = [two_sum_bf, two_sum_sort, two_sum_map]\n", + "time_functions(solutions, worst, start=1, double=4, text=False, chart=True)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The point at which the growth rates start to diverge is much clearer now. The\n", + "brute force approach's run-times still accelerate off into the stratosphere,\n", + "but we can see the separation and trend of the sorting and mapping algorithms." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 Conclusion\n", + "\n", + "We started this essay by defining the problem. We came up with three algorithms\n", + "that used different approaches: brute force, sorting and mapping, then analysed\n", + "the time complexity of each one. Next, we implemented and tested our solutions\n", + "using Python, then in the penultimate section used empirical testing to see if\n", + "our analysis matched the results. Now we must decide which of our algorithms is\n", + "best. \n", + "\n", + "The brute force approach, unsurprisingly, is not very efficient when it comes\n", + "to run-times. We suspected this would be the case, then the empirical testing\n", + "confirmed it. Its only positive attributes were its simplicity and efficient\n", + "memory usage. \n", + "\n", + "We are now left with a choice between the sorting and mapping approaches and I think \n", + "there is a clear winner between the two. The mapping approach is more efficient\n", + "in its worst-case complexity with O(_n_) compared to O(_n_ log(_n_) of the\n", + "sorting, and on the surface seems simpler and easier to implement.Moreover, the \n", + "mapping approach has the potential to be more memory efficient. For example, the \n", + "sorting approach always has an auxiliary data structure the same size as `nums`,\n", + "whereas the size of the dictionary will grow dynamically, only becoming the same \n", + "size as `nums` in the worst case. Therefore, we must conclude the mapping algorithm \n", + "is best. " + ] + } + ], + "metadata": { + "deepnote": {}, + "deepnote_execution_queue": [], + "deepnote_notebook_id": "4a6de191ec8443f9b9cd2c322d8dd60d", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "orig_nbformat": 2 + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/DeepNote/m269.json b/Deepnote/m269.json similarity index 100% rename from DeepNote/m269.json rename to Deepnote/m269.json diff --git a/DeepNote/pyproject.toml b/Deepnote/pyproject.toml similarity index 100% rename from DeepNote/pyproject.toml rename to Deepnote/pyproject.toml diff --git a/DeepNote/template-data-structures.ipynb b/Deepnote/template-data-structures.ipynb similarity index 100% rename from DeepNote/template-data-structures.ipynb rename to Deepnote/template-data-structures.ipynb diff --git a/DeepNote/template-intro-programming.ipynb b/Deepnote/template-intro-programming.ipynb similarity index 100% rename from DeepNote/template-intro-programming.ipynb rename to Deepnote/template-intro-programming.ipynb diff --git a/DeepNote/tm112.json b/Deepnote/tm112.json similarity index 100% rename from DeepNote/tm112.json rename to Deepnote/tm112.json diff --git a/README.md b/README.md index c213b18..5cfb31a 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,15 @@ We created these resources: - A **library** of helper functions to easily test functions and measure their run-times. The guides are on our [documentation site](https://dsa-ou.github.io/algoesup) and -the rest is in our [DeepNote project](https://deepnote.com/workspace/lpsae-cc66-cd5cf5e4-ca6e-49d8-b6ee-dbbf202143d3/project/Algorithmic-Essays-acd23b74-5d63-4ef4-a991-3b8a049ddf6b/notebook/example-jewels-21dfeb1e2a8c4abd8ffb5d9ab40bef40), -which you can copy to your DeepNote account. +the rest is in our [Deepnote project](https://deepnote.com/workspace/lpsae-cc66-cd5cf5e4-ca6e-49d8-b6ee-dbbf202143d3/project/Algorithmic-Essays-acd23b74-5d63-4ef4-a991-3b8a049ddf6b/notebook/example-jewels-21dfeb1e2a8c4abd8ffb5d9ab40bef40), +which you can copy to your Deepnote account. If you want to adapt this material to your course, this repository has -the guides in the `docs/` folder and the rest in the `DeepNote/` folder. +the guides in the `docs/` folder and the rest in the `Deepnote/` folder. ## Development If you want to contribute to this repository, create a local virtual environment, -preferably with Python 3.10 for compatibility with DeepNote, and install the software: +preferably with Python 3.10 for compatibility with Deepnote, and install the software: ```bash python3.10 -m venv venv . venv/bin/activate @@ -41,8 +41,8 @@ Bundler is usually automatically installed during the Ruby installation. GitHub recommends to regularly do `bundle update github-pages` to ensure that the local site preview looks like on GitHub Pages. -After accepting a commit to folder `DeepNote/`, the owners will upload the -updated files to the DeepNote project linked above. +After accepting a commit to folder `Deepnote/`, the owners will upload the +updated files to the Deepnote project linked above. ## Licences diff --git a/docs/_config.yml b/docs/_config.yml index 898dced..2619ca2 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -7,7 +7,7 @@ nav_external_links: - title: GitHub repository url: https://github.com/dsa-ou/algoesup opens_in_new_tab: true - - title: DeepNote project + - title: Deepnote project url: https://deepnote.com/workspace/lpsae-cc66-cd5cf5e4-ca6e-49d8-b6ee-dbbf202143d3/project/Algorithmic-Essays-acd23b74-5d63-4ef4-a991-3b8a049ddf6b opens_in_new_tab: true diff --git a/docs/deepnote-how-to.md b/docs/deepnote-how-to.md index 5e9504c..cfde956 100644 --- a/docs/deepnote-how-to.md +++ b/docs/deepnote-how-to.md @@ -25,7 +25,7 @@ If you have logged out, to log back in you need to verify your email again: 1. Go to the [sign-in page](https://deepnote.com/sign-in). 2. Enter your email. Click the CAPTCHA button. Click **Continue with email**. -3. You will receive an email from DeepNote with a link. Click on it. +3. You will receive an email from Deepnote with a link. Click on it. ## Workspace operations Before any of the following operations, you must change from project view to workspace view: @@ -34,7 +34,7 @@ Before any of the following operations, you must change from project view to wor You will now see a list of the projects in your workspace: ![Workspace view](workspace-view.png) -Some projects were automatically added by DeepNote when creating your workspace. +Some projects were automatically added by Deepnote when creating your workspace. After you completed the desired workspace operations, click in the side panel on the project you want to work next. @@ -107,7 +107,7 @@ To run all cells, click **Run notebook** in the top right corner of the notebook {: .note} The first time you run code, it will take some time, because -DeepNote must first start a server with the necessary software. +Deepnote must first start a server with the necessary software. ### Add a cell To insert a cell between two existing cells: diff --git a/docs/deepnote-reference.md b/docs/deepnote-reference.md index 18029be..62447d9 100644 --- a/docs/deepnote-reference.md +++ b/docs/deepnote-reference.md @@ -29,7 +29,7 @@ top, the sections are: - **Recents** - Projects listed in order of most recently opened. - **Private projects** - A list of private projects, which only you have access to. Other workspace members can't see private projects. -- **Published apps** - This section shows any apps you have published. In DeepNote, +- **Published apps** - This section shows any apps you have published. In Deepnote, an app is a notebooks in which some blocks have been hidden to abstract away technical details. This may be useful to present your findings to stakeholders with non-technical backgrounds. @@ -98,7 +98,7 @@ manage workspace members. ## Cells -Cells (called 'blocks' in DeepNote) are the divisions within each notebook. +Cells (called 'blocks' in Deepnote) are the divisions within each notebook. They are a distinct area where code or text can be added depending on the type of the cell. See our [how-to guide]({{site.baseurl}}/deepnote-how-to#notebook-operations) for working with cells. @@ -110,7 +110,7 @@ A terminal will give you a command line interface for your project and runs a ba Launching a Terminal in Deepnote allows you to run scripts or complete tasks where the GUI is not suitable. -See the DeepNote [documentation on terminals](https://deepnote.com/docs/terminal) for more information. +See the Deepnote [documentation on terminals](https://deepnote.com/docs/terminal) for more information. ## Environment @@ -124,7 +124,7 @@ your needs. When you copied our project, you also copied the environment. -See DeepNote's [documentation on custom environments](https://deepnote.com/docs/custom-environments) +See Deepnote's [documentation on custom environments](https://deepnote.com/docs/custom-environments) for more information. ## Real-time collaboration @@ -133,7 +133,7 @@ Real time collaboration refers to the capability of multiple users to work on th documents in the same project at the same time. Any changes to documents can be seen by all users working on the project as and when they happen. -See DeepNote's [documentation on real-time +See Deepnote's [documentation on real-time collaboration](https://deepnote.com/docs/real-time-collaboration) for more details. ## Asynchronous collaboration @@ -155,7 +155,7 @@ You can open and close the command pallet by pressing Cmd + P on Mac or Ctrl + P ## Members -A member is a DeepNote user associated with a particular workspace. +A member is a Deepnote user associated with a particular workspace. When a user is a member of a workspace, they typically have access to all the projects within that workspace, but the access permissions can be adjusted. diff --git a/docs/example-essays.md b/docs/example-essays.md index 6becf45..80968d2 100644 --- a/docs/example-essays.md +++ b/docs/example-essays.md @@ -13,7 +13,7 @@ the purpose of each section. Clicking on the buttons below will open a *read-only* version of the essay or template. They are rendered on-demand in your web browser, which may take a few seconds. -Once you have created a DeepNote account and copied our essay project, +Once you have created a Deepnote account and copied our essay project, as explained in [Getting started]({{site.baseurl}}/getting-started), you will have access to *editable* versions of the templates, so that you can use them as starting points for your essays. @@ -25,8 +25,8 @@ The essay shows two ways of calculating 1 + 2 + ... + *n* and compares their run The essay follows a simple structure, in which each approach is outlined, implemented and tested before moving on to the next one. -[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/DeepNote/example-1-to-n.ipynb){: .btn .btn-blue .mr-2 } -[View template](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/DeepNote/template-intro-programming.ipynb){: .btn .btn-blue} +[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/Deepnote/example-1-to-n.ipynb){: .btn .btn-blue .mr-2 } +[View template](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/Deepnote/template-intro-programming.ipynb){: .btn .btn-blue} ## Jewels and Stones @@ -38,8 +38,8 @@ The complexity of the three algorithms is analysed and compared to their run-tim This essay follows a slightly different structure, in which each approach is outlined and its complexity analysed, before deciding which approaches are worth implementing. -[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/DeepNote/example-jewels.ipynb){: .btn .btn-blue .mr-2 } -[View template](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/DeepNote/template-data-structures.ipynb){: .btn .btn-blue} +[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/Deepnote/example-jewels.ipynb){: .btn .btn-blue .mr-2 } +[View template](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/Deepnote/template-data-structures.ipynb){: .btn .btn-blue} ## Two Sum (two approaches) @@ -47,11 +47,11 @@ This classic problem asks to find two numbers in a list that add up exactly to a This essay solves the problem in two ways, with brute-force search (nested loops) and a map (Python dictionary). -[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/DeepNote/example-two-sum-2.ipynb){: .btn .btn-blue } +[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/Deepnote/example-two-sum-2.ipynb){: .btn .btn-blue } ## Two Sum (three approaches) This is an extended version of the previous essay. It adds a third approach, that sorts the list of numbers, and it analyses the complexity of the three approaches. -[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/DeepNote/example-two-sum-3.ipynb){: .btn .btn-blue } +[View essay](https://nbviewer.org/github/dsa-ou/algoesup/blob/main/Deepnote/example-two-sum-3.ipynb){: .btn .btn-blue } diff --git a/docs/feedback.md b/docs/feedback.md index 354d6d4..61a7e33 100644 --- a/docs/feedback.md +++ b/docs/feedback.md @@ -36,7 +36,7 @@ Many companies use **pair programming**, in which two developers work together on the same piece of code. While one writes the code, the other reviews it as it's written, pointing out mistakes and suggesting improvements. The two developers switch roles often during a pair programming session. -With DeepNote, you and someone else can work simultaneously on the same notebook, +With Deepnote, you and someone else can work simultaneously on the same notebook, while using Zoom, Microsoft Teams or some other app to chat. In summary, by engaging in a feedback process for your and others' essays, @@ -90,7 +90,7 @@ encouraging feedback to keep polishing it. For example, if you commented on a previous version, praise the parts that improved. ## Acting on feedback -DeepNote emails every time you get a comment on your essay. +Deepnote emails every time you get a comment on your essay. You may wish to improve your essay as you get each piece of feedback, or you may wait some time, e.g. a week, to collect a variety of comments and then address them in one pass. diff --git a/docs/getting-started.md b/docs/getting-started.md index 0547715..0b6df8b 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -16,7 +16,7 @@ without any software installation or configuration. ## Create a Deepnote account -1. Open the DeepNote [sign-up page](https://deepnote.com/sign-up). +1. Open the Deepnote [sign-up page](https://deepnote.com/sign-up). 2. Enter your email address. Use your academic (rather than personal) email to get the free [education plan](https://deepnote.com/docs/edu-verification). 3. Check the CAPTCHA box and click **Continue with email**. @@ -24,11 +24,11 @@ without any software installation or configuration. {: .important} There are no passwords for Deepnote when signing up by email. -If you explicitly log out of your DeepNote account, +If you explicitly log out of your Deepnote account, see our guide for [how to log in]({{site.baseurl}}/deepnote-how-to#log-in). {:style="counter-reset:none"} -1. In DeepNote, answer the introductory questions, which may depend on +1. In Deepnote, answer the introductory questions, which may depend on the type of email you used to sign up. - If you're asked **what you are working on**, type **Writing essays** and click **Continue**. - If you're asked to name your **workspace**, which is where you will store your projects, @@ -37,15 +37,15 @@ see our guide for [how to log in]({{site.baseurl}}/deepnote-how-to#log-in). - If you're asked for your **data sources**, click **Take me to Deepnote**. You should now be looking at an empty notebook that is part of -the **Welcome to DeepNote** project within your workspace. +the **Welcome to Deepnote** project within your workspace. You won't need that project for writing algorithmic essays, but -you may wish to keep it, to later explore DeepNote's data science features. +you may wish to keep it, to later explore Deepnote's data science features. For the moment, just proceed with the next steps. ## Duplicate our project -We created an essay project in *our* DeepNote workspace, to be copied to *your* workspace. +We created an essay project in *our* Deepnote workspace, to be copied to *your* workspace. The project has all necessary software pre-installed. 1. Open [our project](https://deepnote.com/workspace/lpsae-cc66-cd5cf5e4-ca6e-49d8-b6ee-dbbf202143d3/project/Algorithmic-Essays-acd23b74-5d63-4ef4-a991-3b8a049ddf6b). @@ -84,6 +84,6 @@ You can now start editing your copy of the template. [rename the notebook]({{site.baseurl}}/deepnote-how-to#rename-duplicate-download-or-delete-a-notebook-or-file).) If you're familiar with the classic Jupyter interface, we recommend you first -read about the [differences]({{site.baseurl}}/deepnote-background#deepnote-vs-classic-notebook) with DeepNote. +read about the [differences]({{site.baseurl}}/deepnote-background#deepnote-vs-classic-notebook) with Deepnote. -For a video introduction to notebooks and DeepNote, see our [DeepNote guide]({{site.baseurl}}/deepnote). +For a video introduction to notebooks and Deepnote, see our [Deepnote guide]({{site.baseurl}}/deepnote). diff --git a/docs/index.md b/docs/index.md index 7da8c40..0fd6a72 100644 --- a/docs/index.md +++ b/docs/index.md @@ -30,8 +30,8 @@ We provide some [example essays]({{site.baseurl}}/example-essays) to illustrate While many approaches to writing algorithmic essays are possible, we recommend using **Jupyter notebooks**, the most widely used medium for mixing text and executable code, -and **DeepNote**, a cloud-based environment for Jupyter notebooks. -We have no commercial affiliation with DeepNote. We chose it for these reasons: +and **Deepnote**, a cloud-based environment for Jupyter notebooks. +We have no commercial affiliation with Deepnote. We chose it for these reasons: - free academic account - no software installation necessary - you can share your essays publicly (or just with a few people) to easily diff --git a/docs/writing.md b/docs/writing.md index 6fb74ed..388dac2 100644 --- a/docs/writing.md +++ b/docs/writing.md @@ -24,7 +24,7 @@ the guide currently has data structures and algorithms students in mind. An essay can have more than one author, although more than two is harder to manage. -DeepNote makes it easy to work collaboratively on a single notebook, +Deepnote makes it easy to work collaboratively on a single notebook, at the same time or asynchronously, and leave comments to co-authors. You may wish to first pitch your essay idea to your peers, to recruit co-authors. @@ -33,7 +33,7 @@ to refer simultaneously to a single author or multiple authors. {: .note} You may wish to keep this guide open while going through one of the -example essays in your copy of our DeepNote project. +example essays in your copy of our Deepnote project. ## Problem It's worth spending time on choosing an appropriate problem before putting effort into an essay about it. @@ -76,10 +76,10 @@ The essay should thus have a **clear narrative**, going from the problem to the An algorithmic essay contains more text than code, and while code can and should have comments, the text carries most of the explanation. It's thus important for the text to be clear and error-free. -DeepNote notebooks can have rich-text cells (headings, paragraph, bullet item, etc.) that, +Deepnote notebooks can have rich-text cells (headings, paragraph, bullet item, etc.) that, contrary to the Markdown cells, are spell-checked as you write the text and support keyboard shortcuts, like Ctrl + B to put the selected text in bold. -Unless you want to keep your essays in DeepNote, we do not recommend using rich-text cells, +Unless you want to keep your essays in Deepnote, we do not recommend using rich-text cells, as their formatting is lost when downloading the notebook to your computer. Essays can be written in any style: it's a personal choice. @@ -231,7 +231,7 @@ After importing the `algoesup` library, you can turn on type checking as follows Words that start with `%` are special commands for IPython, the Python interpreter used by Jupyter notebooks. The `%pytype` command, provided by our library, activates Google's `pytype` type checker, -which comes pre-installed in the DeepNote essay project you copied. +which comes pre-installed in the Deepnote essay project you copied. Once the type checker is activated, it checks each cell immediately after it's executed. In this way you can detect and fix errors as you write and run each code cell. @@ -278,7 +278,7 @@ The formatter has already automatically enforced simple formatting conventions, 4 spaces for indentation and 2 empty lines between functions, so you will see fewer warnings from the linter. -The DeepNote essay project you copied already has a linter installed: +The Deepnote essay project you copied already has a linter installed: `ruff`, the fastest Python linter. To turn it on, write the following after importing `algoesup`. ```python @@ -326,7 +326,7 @@ If you get errors that you think are pointless, please let us know so that we can change `ruff`'s configuration. ### Basic constructs -The DeepNote project you copied also includes the `allowed` linter, created by ourselves. +The Deepnote project you copied also includes the `allowed` linter, created by ourselves. It checks whether your code only uses certain Python constructs. This gives you some reassurance that your code will be understood by a wide audience. @@ -551,7 +551,7 @@ you expect from your complexity analysis, then there might be other explanations - your input-generating functions are not generating best or worst cases. For an example of the latter, see the *Jewels and Stones* essay in your copy of -our DeepNote project. +our Deepnote project. ## Final check Whether it's your essay's first draft or final version, before you share it with others, @@ -559,7 +559,7 @@ you should restart the kernel and run all cells, so that you have a 'clean' vers Then, after a break, read your essay with 'fresh eyes' from start to end and fix any typos or missing explanations you find. -Look at DeepNote's table of contents on the sidebar and check that your section headings +Look at Deepnote's table of contents on the sidebar and check that your section headings are at the right level. Finally, let others comment on your essay and help you produce a better version. @@ -573,4 +573,4 @@ If you're interested and have the time, here are further details on some of the * A summary of Python's [type hints](https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html) provided by the `mypy` project (another type checker). * The Python [code style](https://peps.python.org/pep-0008) and [docstring conventions](https://peps.python.org/pep-0257). * The [formatting style](https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html) enforced by `black`, which we suspect is - the formatter used by Deepnote. DeepNote ignores the `# fmt: skip` directive to not format a single line. + the formatter used by Deepnote. Deepnote ignores the `# fmt: skip` directive to not format a single line.