{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Foundations of Computational Economics #9\n", "\n", "by Fedor Iskhakov, ANU\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## Algorithms and complexity\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\n", "\n", "[https://youtu.be/pBbpEBVheOQ](https://youtu.be/pBbpEBVheOQ)\n", "\n", "Description: Timing of Python code. Runtime order of growth. Complexity classes. P vs NP." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Two ways to evaluate the polynomial\n", "\n", "$$\n", "y = a_1 + a_2 x + a_3 x^2 + \\dots + a_k x^k\n", "$$\n", "\n", "Algorithm 1: compute each term, then add together\n", "\n", "Algorithm 2: try to avoid computing powers" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "def calc_polynomial(qs=[0,], x=0.0, algorithm='fast'):\n", " '''Evaluates the polynomial given by coefficients qs at given x.\n", " First coefficient qs[0] is a constant, last coefficient is for highest power.\n", " '''\n", " if algorithm is not 'fast':\n", " # slower algorithm\n", " res=0.0\n", " for k in range(len(qs)):\n", " xpw = x**k\n", " res += qs[k] * xpw\n", " else:\n", " # faster algorithm\n", " res,xpw = qs[0], x # init result and power of x\n", " for i in range(1,len(qs)): # start with second coefficient\n", " res += xpw * qs[i]\n", " xpw *= x\n", " return res" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Timing function evaluation\n", "\n", "Several ways to measure run time in python\n", "\n", "- **time** module \n", "- **timeit** module (for small snippets) \n", "- profiles (**profile** and **cProfile**, for large codes) \n", "\n", "\n", "In Jupyter Notebooks we can use a **magic function** timeit" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "@timeit " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hide-output": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "@@timeit \n", "all lines of code in the cell\n", "to be timed together" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "[Documentation on @timeit](https://ipython.readthedocs.io/en/stable/interactive/magics.html?highlight=timeit#magic-timeit)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "48.3 µs ± 6.72 µs per loop (mean ± std. dev. of 100 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit -n100 -r100 qs = [1,]*100\n", "calc_polynomial(qs,15,'slow')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "hide-output": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15.6 µs ± 2.33 µs per loop (mean ± std. dev. of 100 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit -n100 -r100 qs = [1,]*100\n", "calc_polynomial(qs,15,'fast')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Algorithms\n", "\n", "**Sequence of commands** for computer to run\n", "\n", "1. How much time does it take to run? \n", "1. How much memory does it need? \n", "1. What other resources may be limiting? (storage, communication, etc) \n", "\n", "\n", "**Smart algorithm is a lot more important that fast computer**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Computational speed and algorithm development\n", "\n", "[Professor Martin Grötschel Konrad-Zuse-Zentrum für Informationstechnik\n", "Berlin, expert in optimization](http://robertvienneau.blogspot.com/2011/01/increase-in-feasibility-of-economic.html)\n", "\n", "> “a benchmark production planning model solved using linear\n", "programming would have taken 82 years to solve in 1988, using the\n", "computers and the linear programming algorithms of the day. Fifteen\n", "years later – in 2003 – this same model could be solved in roughly 1\n", "minute, an improvement by a factor of roughly 43 million. Of this, a\n", "factor of roughly 1,000 was due to increased processor speed, whereas\n", "a factor of roughly 43,000 was due to improvements in algorithms!”" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "hide-output": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing algorithm_examples.py\n" ] } ], "source": [ "%%writefile 'algorithm_examples.py'\n", "\n", "# Example code to be discussed in the following videos\n", "\n", "import time\n", "\n", "def parity (n,verbose=False):\n", " '''Returns 1 if passed integer number is odd\n", " '''\n", " if not isinstance(n, int): raise TypeError('Only integers in parity()')\n", " if verbose: print('n = ', format(n, \"b\")) # print binary form of the number\n", " return n & 1 # bitwise and operation returns the value of last bit\n", "\n", "def maximum_from_list (vars):\n", " '''Returns the maximum from a list of values\n", " '''\n", " m=float('-inf') # init with the worst value\n", " for v in vars:\n", " if v > m: m = v\n", " return m\n", "\n", "def binary_search(grid=[0,1],val=0,delay=0):\n", " '''Returns the index of val on the sorted grid\n", " Optional delay introduces a delay (in microsecond)\n", " '''\n", " i1,i2 = 0,len(grid)-1\n", " if val==grid[i1]: return i1\n", " if val==grid[i2]: return i2\n", " j=(i1+i2)//2\n", " while grid[j]!=val:\n", " if val>grid[j]:\n", " i1=j\n", " else:\n", " i2=j\n", " j=(i1+i2)//2 # divide in half\n", " time.sleep(delay*1e-6) # micro-sec to seconds\n", " return j\n", "\n", "def compositions(N,m):\n", " '''Iterable on compositions of N with m parts\n", " Returns the generator (to be used in for loops)\n", " '''\n", " cmp=[0,]*m\n", " cmp[m-1]=N # initial composition is all to the last\n", " yield cmp\n", " while cmp[0]!=N:\n", " i=m-1\n", " while cmp[i]==0: i-=1 # find lowest non-zero digit\n", " cmp[i-1] = cmp[i-1]+1 # increment next digit\n", " cmp[m-1] = cmp[i]-1 # the rest to the lowest\n", " if i!=m-1: cmp[i] = 0 # maintain cost sum\n", " yield cmp" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Parity of a number\n", "\n", "Check whether an integer is odd or even.\n", "\n", "Algorithm: check the last bit in the binary representation of a number" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "hide-output": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "k=10 (4 bits)\n", "169 ns ± 25.1 ns per loop (mean ± std. dev. of 500 runs, 5000 loops each)\n", "k=101 (7 bits)\n", "171 ns ± 29.8 ns per loop (mean ± std. dev. of 500 runs, 5000 loops each)\n", "k=1002 (10 bits)\n", "170 ns ± 19.8 ns per loop (mean ± std. dev. of 500 runs, 5000 loops each)\n", "k=10003 (14 bits)\n", "173 ns ± 20.3 ns per loop (mean ± std. dev. of 500 runs, 5000 loops each)\n", "k=100004 (17 bits)\n", "172 ns ± 22.3 ns per loop (mean ± std. dev. of 500 runs, 5000 loops each)\n" ] } ], "source": [ "# import all example code\n", "from algorithm_examples import *\n", "\n", "for k in [10**(i+1)+i for i in range(5)]:\n", " print('k=%d (%d bits)' % (k,k.bit_length()))\n", " tt = %timeit -n5000 -r500 -o parity(k)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "172 ns ± 17 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "170 ns ± 21.8 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "171 ns ± 16.6 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "173 ns ± 16.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "176 ns ± 22.5 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "167 ns ± 12.4 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "166 ns ± 14.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "160 ns ± 10.3 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "168 ns ± 17.6 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "168 ns ± 18.5 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "164 ns ± 14.6 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "162 ns ± 12.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "161 ns ± 16.7 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "159 ns ± 22.5 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "164 ns ± 22.8 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "154 ns ± 14.1 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "189 ns ± 36.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "158 ns ± 10.7 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "173 ns ± 33.4 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "170 ns ± 27.4 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "160 ns ± 16.1 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "163 ns ± 18.1 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "159 ns ± 14.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "160 ns ± 16.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "157 ns ± 14.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "161 ns ± 14.4 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "166 ns ± 15.3 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "166 ns ± 14.5 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "177 ns ± 28 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "169 ns ± 15.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "163 ns ± 13.3 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "165 ns ± 17.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "170 ns ± 16.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "162 ns ± 12.3 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "164 ns ± 16.4 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "166 ns ± 13 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "166 ns ± 11.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "163 ns ± 21.3 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "173 ns ± 21 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "165 ns ± 12.5 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "184 ns ± 27.2 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "175 ns ± 22.7 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "163 ns ± 11.1 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "161 ns ± 13.7 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "171 ns ± 17.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "168 ns ± 15 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "161 ns ± 13 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "164 ns ± 19.8 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "164 ns ± 13.7 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n", "173 ns ± 37.9 ns per loop (mean ± std. dev. of 100 runs, 5000 loops each)\n" ] }, { "data": { "image/png": "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iIhIABpEKCIicUMDfkWkLVAALSIi0ggF9ZIo1NYjpxQOEREREZEA1APdCvQNTkRERKT9UgAtIiLSBqmzRiR2lMIhIiIiIhKAeqBFJCrUWyYisoveE9s2BdAiIglKH+AiIs2jFA4RERERkQAUQIuIiIiIBKAAWkREREQkAAXQIiIiIiIBKIAWEREREQlAAbSIiIiISAAKoEVEREREAlAALSIiIiISgBZSERFpBi1CIiKSuBRAi4iIiEggid6JoABaJEYS/c1HRESkrVIALSISR/TFSkQk/imAFpGEpWBVRESaQwG0iEgrU6AuItK+aBo7EREREZEAFECLiIiIiASgAFpEREREJADlQItIu6J8YxERaW0KoEVE2gl9eRARiQ6lcIiIiIiIBKAAWkREREQkAAXQIiIiIiIBKAdaREREWoTy8CVRqAdaRERERCQABdAiIiIiIgG0WgqHmT0CnAisd84Nb+S4A4APgTOcc8+1VnlEEoUuoYqIiLSu1uyBfhQ4rrEDzCwZ+D3wWiuWQ0RERESkxbRaAO2cmwV838RhVwDPA+tbqxwiIiIiIi0pZjnQZlYInAzcH6syiIiIiIgEFctp7O4ArnfO1ZhZowea2UXARQB9+vSJQtFEEpPyp0VERJoWywC6CHjKD54LgElmVu2ce6n+gc65B4EHAYqKilxUSykiMafAXkRE4knMAmjnXP+6bTN7FHglXPAsIiIiIhJPWnMauyeBw4ACMysGbgRSAZxzynsWERERkTap1QJo59xZAY49v7XKISIiIiLSkrQSoYiIiIhIAAqgRUREREQCUAAtIiIiIhKAAmgRERERkQAUQIuIiIiIBKAAWkREREQkAAXQIiIiIiIBKIAWEREREQlAAbSIiIiISACtthKhiLScpy8eH+siiIiIiE890CIiIiIiASiAFhEREREJQAG0iIiIiEgACqBFRERERAJQAC0iIiIiEoBm4RARERGRuBSvs1CpB1pEREREJAAF0CIiIiIiASiAFhEREREJQAG0iIiIiEgACqBFRERERAJQAC0iIiIiEoACaBERERGRABRAi4iIiIgEoABaRERERCQABdAiIiIiIgEogBYRERERCUABtIiIiIhIAAqgRUREREQCUAAtIiIiIhKAAmgRERERkQAUQIuIiIiIBKAAWkREREQkAAXQIiIiIiIBKIAWEREREQnA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = [12, 8]\n", "\n", "N = 50\n", "kk = lambda i: 10**(i+1)+i # step formula\n", "n,x,std = [0]*N,[0]*N,[0]*N # initialize data lists\n", "for i in range(N):\n", " k = kk(i) # input value for testing\n", " n[i] = k.bit_length() # size of problem = bits in number\n", " t = %timeit -n5000 -r100 -o parity(k)\n", " x[i] = t.average\n", " std[i] = t.stdev\n", "\n", "plt.errorbar(n,x,std)\n", "plt.xlabel('number of bits in the input argument')\n", "plt.ylabel('run time, sec')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Finding max/min of a list\n", "\n", "Find max or min in an unsorted list of values\n", "\n", "Algorithm: run through the list once" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "hide-output": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 9.79874372 0.2020611 1.00212784 43.00195447 13.94713462 12.22406642\n", " 6.3382257 68.06549963 56.02208578 10.6578756 ]\n", "max=68.065500\n" ] } ], "source": [ "import numpy as np\n", "\n", "N = 10\n", "# generate uniformly distributed values between given bounds\n", "x = np.random.uniform(low=0.0, high=100.0, size=N)\n", "print(x)\n", "print(\"max=%f\"%maximum_from_list(x))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "584 ns ± 71.1 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "826 ns ± 99 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "1.08 µs ± 209 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "1.2 µs ± 152 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "1.4 µs ± 143 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "1.66 µs ± 231 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "1.85 µs ± 178 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "2.3 µs ± 286 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "2.2 µs ± 160 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "2.44 µs ± 175 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "2.47 µs ± 270 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "2.83 µs ± 292 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "2.86 µs ± 182 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "3.29 µs ± 400 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "3.49 µs ± 419 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "3.69 µs ± 305 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "3.69 µs ± 355 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "3.84 µs ± 311 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "4.32 µs ± 588 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "4.35 µs ± 445 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "4.29 µs ± 411 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "4.43 µs ± 476 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "4.51 µs ± 324 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "4.7 µs ± 137 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6 µs ± 547 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "5.43 µs ± 638 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "5.35 µs ± 412 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.69 µs ± 421 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.13 µs ± 643 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "5.96 µs ± 557 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.06 µs ± 527 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.26 µs ± 271 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.14 µs ± 365 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.59 µs ± 403 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.17 µs ± 536 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.66 µs ± 348 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "6.85 µs ± 465 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.21 µs ± 422 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.26 µs ± 394 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.71 µs ± 757 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.61 µs ± 550 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.8 µs ± 484 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "7.86 µs ± 606 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "8.07 µs ± 548 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "8.2 µs ± 406 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "9.07 µs ± 1.01 µs per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "10.2 µs ± 1.19 µs per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "10.1 µs ± 933 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "10.1 µs ± 967 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n", "9.63 µs ± 544 ns per loop (mean ± std. dev. of 100 runs, 1000 loops each)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N = 50\n", "kk = lambda i: 2*i # step formula\n", "n,x,std = [0]*N,[0]*N,[0]*N # initialize data lists\n", "for i in range(N):\n", " n[i] = kk(i) # size of the array\n", " vv = np.random.uniform(low=0.0, high=100.0, size=n[i])\n", " t = %timeit -n1000 -r100 -o maximum_from_list(vv)\n", " x[i] = t.average\n", " std[i] = t.stdev\n", "\n", "plt.errorbar(n,x,std)\n", "plt.xlabel('number of elements in the list')\n", "plt.ylabel('run time, sec')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Binary search\n", "\n", "Find an element between given boundaries\n", "\n", "1. Think of number between 1 and 100 \n", "1. How many guesses are needed to locate it if the only answers are “below” and “above”? \n", "1. What is the optimal sequece of questions? " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index of x[8]=78 in array([ 8, 14, 24, 29, 34, 42, 43, 54, 78, 99]) is 8\n" ] } ], "source": [ "N = 10\n", "# random sorted sequence of integers up to 100\n", "x = np.random.choice(100,size=N,replace=False)\n", "x = np.sort(x)\n", "# random choice of one number/index\n", "k0 = np.random.choice(N,size=1)\n", "\n", "k1 = binary_search(grid=x,val=x[k0])\n", "print(\"Index of x[%d]=%d in %r is %d\"%(k0,x[k0],x,k1))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "hide-output": false, "scrolled": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "577 µs ± 60.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "637 µs ± 48.2 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "733 µs ± 77.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "775 µs ± 108 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "794 µs ± 72.3 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "865 µs ± 81.2 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "897 µs ± 77.5 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "829 µs ± 88.7 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "840 µs ± 105 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "846 µs ± 65.3 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "830 µs ± 70.3 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "852 µs ± 76.4 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "864 µs ± 91.4 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "883 µs ± 108 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "870 µs ± 85.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "859 µs ± 69.5 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "886 µs ± 96.4 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "987 µs ± 106 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "903 µs ± 86 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "868 µs ± 41.1 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "884 µs ± 44.8 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "944 µs ± 100 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "927 µs ± 111 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "898 µs ± 59.3 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "896 µs ± 43.4 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "897 µs ± 45.6 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "896 µs ± 48.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "915 µs ± 52.2 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1 ms ± 126 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "934 µs ± 65 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "940 µs ± 74.4 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "936 µs ± 82.8 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "944 µs ± 65.6 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "959 µs ± 91.1 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "974 µs ± 95.5 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "981 µs ± 111 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1.06 ms ± 89.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "960 µs ± 77.6 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "976 µs ± 94.3 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "976 µs ± 108 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "981 µs ± 94.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1.01 ms ± 90.2 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1.04 ms ± 106 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "973 µs ± 98.3 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1.09 ms ± 113 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1.07 ms ± 112 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1.05 ms ± 122 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "991 µs ± 74.9 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "1 ms ± 72.6 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n", "993 µs ± 89.6 µs per loop (mean ± std. dev. of 100 runs, 10 loops each)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuMAAAHgCAYAAAAPAWOXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXzcVb3/8deZyb6nWdume9Mt3WhraUvZsa1cpKwCihcVl4sgXFEEvOrvqheXi1dElCsqKldkkx0EStlb2tKW7km3NF2SNM3W7PvMnN8fmdQQ0naSzGRmkvfz8eDRzHe+3/M9U5rkPWc+5xxjrUVERERERAafI9gdEBEREREZrhTGRURERESCRGFcRERERCRIFMZFRERERIJEYVxEREREJEgUxkVEREREgiQi2B0IpvT0dDt+/Phgd0NEREREhrgPP/ywylqb0fP4sA7j48ePZ/PmzcHuhoiIiIgMccaYw70dV5mKiIiIiEiQKIyLiIiIiASJwriIiIiISJAojIuIiIiIBInCuIiIiIhIkCiMi4iIiIgEicK4iIiIiEiQKIyLiIiIiASJwriIiIiISJAojIuIiIiIBInCuIiIiIhIkCiMi4iIiIgEicK4iIiIiEiQKIyLiIiIiASJwriIiIiISJAENIwbY1YYY/YaYwqNMXf18ny0MeZJ7/MfGGPGd3vubu/xvcaY5d2O/8kYU2GM2dWjrXuNMXuMMTuMMc8ZY1IC+dpERERERAYqYGHcGOMEfgt8CpgBXGeMmdHjtBuBGmvtZOA+4Ofea2cA1wJ5wArgQW97AH/xHutpNTDTWjsb2Afc7dcXJCIiIiLiZ4EcGV8IFFpri6y17cATwMoe56wEHvF+/TRwoTHGeI8/Ya1ts9YeBAq97WGtfQ843vNm1trXrbUu78MNQI6/X5CIiIiIiD8FMoyPBoq7PS7xHuv1HG+QrgPSfLz2VL4EvNrH/oqIiIgMedc8tJ5rHlof7G6IVyDDuOnlmPXxHF+u7f2mxvwH4AL+dpLnv2qM2WyM2VxZWelLkyIiIiIiARHIMF4CjOn2OAc4erJzjDERQDKdJSi+XPsxxpgbgEuAz1lrew3v1trfW2sXWGsXZGRk+PhSRERERET8L5BhfBOQa4yZYIyJonNC5os9znkRuMH79VXAW94Q/SJwrXe1lQlALrDxVDczxqwA7gQutdY2+/F1iIiIiIgERMDCuLcG/BZgFbAbeMpam2+M+ZEx5lLvaQ8DacaYQuB24C7vtfnAU0AB8Bpws7XWDWCMeRxYD0w1xpQYY270tvUbIBFYbYzZZoz5XaBem4iIiIiIP0QEsnFr7SvAKz2O/aDb163A1Se59h7gnl6OX3eS8ycPqLMiIiIiIoNMO3CKiIiIiASJwriIiIiISJAojIuIiIiIBInCuIiIiIiclDYJCiyFcRERERGRIFEYFxEREREJEoVxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcRERERGRIFEYFxEREREJEoVxEREREfErbRTkO4VxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcRERERGRIFEYFxEREREJEoVxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcREREQk4bY8u0juFcRERERGRIFEYFxEREQkR+gRh+FEYFxEREREJEoVxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcRERERGRIFEYFxEREREJEoVxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcRERGZKueWg91zy0PtjdEBE5JYVxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcRERERGRIFEYFxEREREJEoVxEREREZEgURgXEREREQkShXERERERkSBRGBcRERERCRKFcRERERGRIAloGDfGrDDG7DXGFBpj7url+WhjzJPe5z8wxozv9tzd3uN7jTHLux3/kzGmwhizq0dbVxtj8o0xHmPMgkC+LhERERERfwhYGDfGOIHfAp8CZgDXGWNm9DjtRqDGWjsZuA/4uffaGcC1QB6wAnjQ2x7AX7zHetoFXAG8599XIiIiIiISGIEcGV8IFFpri6y17cATwMoe56wEHvF+/TRwoTHGeI8/Ya1ts9YeBAq97WGtfQ843vNm1trd1tq9gXkpIiIiIiL+F8gwPhoo7va4xHus13OstS6gDkjz8dp+McZ81Riz2RizubKy0h9NioiIiIj0SyDDuOnlmPXxHF+u7Rdr7e+ttQustQsyMjL80aSIiIhIr655aD3XPLQ+2N2QEBbIMF4CjOn2OAc4erJzjDERQDKd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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuMAAAHkCAYAAACUkCGBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXzcVb3/8deZLfvSpmnTfV/oQllqS1EUQaAoWkERekVQUXBF4V4Rrl7vT694wQ1FQUEREBGKIFyUXRDZSkuhpfuSdE2TNmn2STL7+f0xk5Cmk2SSzGSyvJ+PBw9mvvP9fudMW8o7Zz7nc4y1FhERERERGXiOdA9ARERERGSkUhgXEREREUkThXERERERkTRRGBcRERERSROFcRERERGRNFEYFxERERFJE1e6B5BOY8aMsdOmTUv3MERERERkmHvrrbeOWmuLOx8f0WF82rRprF+/Pt3DEBEREZFhzhizP95xlamIiIiIiKSJwriIiIiISJoojIuIiIiIpInCuIiIiIhImiiMi4iIiIikicK4iIiIiEiaKIyLiIiIiKSJwriIiIiISJoojIuIiIiIpInCuIiIiIhImiiMi4iIiIikicK4iIiIiEiaKIyLiIiIiKSJwriIiIiISJoojIuIiIiIpElKw7gxZoUxZqcxptQYc0Oc1zOMMatjr681xkzr8NqNseM7jTHndTj+B2NMlTFmS6d7/cQYs8MYs8kY85gxpjCVn01EREREpL9SFsaNMU7gduB8YD6wyhgzv9NpVwJ11tpZwK3ALbFr5wOXAguAFcAdsfsB3Bs71tnzwEJr7YnALuDGpH4gEREREZEkS+XM+FKg1Fq7x1obAB4CVnY6ZyVwX+zxI8DZxhgTO/6QtdZvrd0LlMbuh7X2ZaC285tZa5+z1oZiT98AJiX7A4mIiIiIJFMqw/hE4GCH5+WxY3HPiQXpBqAowWu783ng6V6OV0REREQGoUvuXMMld65J9zBSIpVh3MQ5ZhM8J5Fr47+pMd8BQsADXbx+lTFmvTFmfXV1dSK3FBERERFJiVSG8XJgcofnk4CKrs4xxriAAqIlKIlcexxjzBXABcCnrbVxw7u19i5r7RJr7ZLi4uIEP4qIiIiISPKlMoy/Ccw2xkw3xniILsh8otM5TwBXxB5/EngxFqKfAC6NdVuZDswG1nX3ZsaYFcC3gY9Za1uS+DlERERERFIiZWE8VgP+NeBZYDvwsLV2qzHmB8aYj8VOuxsoMsaUAtcBN8Su3Qo8DGwDngG+aq0NAxhjHgTWAHONMeXGmCtj9/o1kAc8b4zZaIz5bao+m4iIiIhIMrhSeXNr7VPAU52Ofa/DYx9wcRfX3gTcFOf4qi7On9WvwYqIiIiIDDDtwCkiIiIikiYK4yIiIiIiaaIwLiIiIiKSJgrjIiIiIiJpojAuIiIiIkPKcNqRU2FcRERERCRNFMZFRERERNJEYVxEREREJE0UxkVERERE0kRhXEREREQkTRTGRURERETSRGFcRERERCRNFMZFREREZMga6j3HFcZFRERERNJEYVxEREREJE0UxkVERERE0kRhXEREREQkTRTGRURERETSRGFcRERERCRNFMZFRERERNJEYVxEREREJE0UxkVERERE0kRhXEREREQkTRTGRURERKRbQ33L+cFMYVxEREREJE0UxkVERERE0kRhXERERETSbqSWwiiMi4iIiIikicK4iIiIiEiaKIyLiIiIiKSJwriIiIiISJoojIuIiIiIpInCuIiIiIhImiiMi4iIiIikicK4iIiIiEiaKIyLiIiIiKSJwriIiIiISJoojIuIiIgMAiN1O/iRTmFcRERERCRNFMZFRERERNJEYVxEREREJE0UxkVERERE0kRhXEREREQkTRTGRURERETSRGFcRERERCRNFMZFRERERNJEYVxEREREJE0UxkVERERE0kRhXEREREQkTVIaxo0xK4wxO40xpcaYG+K8nmGMWR17fa0xZlqH126MHd9pjDmvw/E/GGOqjDFbOt3rYmPMVmNMxBizJJWfS0REREQkGVIWxo0xTuB24HxgPrDKGDO/02lXAnXW2lnArcAtsWvnA5cCC4AVwB2x+wHcGzvW2RbgIuDl5H4SEREREZHUSOXM+FKg1Fq7x1obAB4CVnY6ZyVwX+zxI8DZxhgTO/6QtdZvrd0LlMbuh7X2ZaC285tZa7dba3em5qOIiIiIiCRfKsP4ROBgh+flsWNxz7HWhoAGoCjBa0VEREREhrRUhnET55hN8JxEru0TY8xVxpj1xpj11dXVybiliIiIiPTSJXeu4ZI716R7GGmXyjBeDkzu8HwSUNHVOcYYF1BAtAQlkWv7xFp7l7V2ibV2SXFxcTJuKSIi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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N = 50 # number of points\n", "kk = lambda i: 100+(i+1)*500 # step formula\n", "# precompute the sorted sequence of integers of max length\n", "vv = np.random.choice(10*kk(N),size=kk(N),replace=False)\n", "vv = np.sort(vv)\n", "\n", "n,x,std = [0]*N,[0]*N,[0]*N # initialize lists\n", "for i in range(N):\n", " n[i] = kk(i) # number of list elements\n", " # randomize the choice in each run to smooth out simulation error\n", " t = %timeit -n10 -r100 -o binary_search(grid=vv[:n[i]],val=vv[np.random.choice(n[i],size=1)],delay=50)\n", " x[i] = t.average\n", " std[i] = t.stdev\n", "\n", "plt.errorbar(n,x,std)\n", "plt.xlabel('number of elements in the list')\n", "plt.ylabel('run time, sec')\n", "plt.show()\n", "\n", "plt.errorbar(n,x,std)\n", "plt.xscale('log')\n", "plt.xlabel('log(number of elements in the list)')\n", "plt.ylabel('run time, sec')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Binary tree and divide-and-conquer algorithms\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Big-O notation\n", "\n", "Useful way to label the complexity of an algorithm, where $ n $ is the size of the input or other dimension of the problem\n", "\n", "$$\n", "f(n)=\\mathcal{O}\\big(g(n)\\big) \\Leftrightarrow\n", "$$\n", "\n", "$$\n", "\\exists M>0 \\text{ and } N \\text{ such than } |f(n)| < M |g(n)| \\text{ for all } n>N,\n", "$$\n", "\n", "Thus, functions $ f(n) $ and $ g(n) $ grow on the same *order*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Focus on the worst case\n", "\n", "In measuring solution time we may distinguish performance in\n", "\n", "- best (easiest to solve) case \n", "- average case \n", "- worst case ($ \\leftarrow $ the focus of the theory!) \n", "\n", "\n", "Constants and lower terms are ignored because we are only interested in *order* or growth" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Classes of algorithm complexity\n", "\n", "- $ \\mathcal{O}(1) $ constant time \n", "- $ \\mathcal{O}(\\log_{2}(n)) $ logarithmic time \n", "- $ \\mathcal{O}(n) $ linear time \n", "- $ \\mathcal{O}(n \\log_{2}(n)) $ quasi-linear time \n", "- $ \\mathcal{O}(n^{k}), k>1 $ quadratic, cubic, etc. **polinomial** time\n", " $ \\uparrow $ **Tractable** \n", "- $ \\mathcal{O}(2^{n}) $ exponential time $ \\downarrow $\n", " **Curse of dimensionality** \n", "- $ \\mathcal{O}(n!) $ factorial time " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Classes of algorithm complexity\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### How many operations as function of input size?\n", "\n", "- Parity: Just need to check the lowest bit, does not depend on input size $ \\Rightarrow \\mathcal{O}(1) $ \n", "- Maximum element: Need to loop through elements once: $ \\Rightarrow \\mathcal{O}(n) $ \n", "- Binary search: Divide the problem in 2 each step $ \\Rightarrow \\mathcal{O}(\\log(n)) $ \n", "- Examples of $ \\mathcal{O}(2^n) $ or more? " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Allocation of discrete good\n", "\n", "**Problem**\n", "\n", "Maximize welfare $ W(x_1,x_2,\\dots,x_n) $ subject to\n", "$ \\sum_{i=1}^{n}x_i = A $ where $ A $ is *discrete* good that is\n", "only divisible in steps of $ \\Lambda $.\n", "\n", "Let $ M=A/\\Lambda \\in \\mathbb{N} $. Let\n", "$ p_i \\in \\{0,1,\\dots,M\\} $ such that $ \\sum_{i=1}^{n}p_i = M $.\n", "\n", "Then the problem is equivalent to maximize\n", "$ W(\\Lambda p_1,\\Lambda p_2,\\dots,\\Lambda p_n) $ subject to above.\n", "\n", "$ (p_1,p_2,\\dots,p_n) $ is **composition** of number $ M $ into\n", "$ n $ parts." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "hide-output": false, "scrolled": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of compositions is 165\n", " 0: [0, 0, 0, 8]\n", " 1: [0, 0, 1, 7]\n", " 2: [0, 0, 2, 6]\n", " 3: [0, 0, 3, 5]\n", " 4: [0, 0, 4, 4]\n", " 5: [0, 0, 5, 3]\n", " 6: [0, 0, 6, 2]\n", " 7: [0, 0, 7, 1]\n", " 8: [0, 0, 8, 0]\n", " 9: [0, 1, 0, 7]\n", " 10: [0, 1, 1, 6]\n", " 11: [0, 1, 2, 5]\n", " 12: [0, 1, 3, 4]\n", " 13: [0, 1, 4, 3]\n", " 14: [0, 1, 5, 2]\n", " 15: [0, 1, 6, 1]\n", " 16: [0, 1, 7, 0]\n", " 17: [0, 2, 0, 6]\n", " 18: [0, 2, 1, 5]\n", " 19: [0, 2, 2, 4]\n", " 20: [0, 2, 3, 3]\n", " 21: [0, 2, 4, 2]\n", " 22: [0, 2, 5, 1]\n", " 23: [0, 2, 6, 0]\n", " 24: [0, 3, 0, 5]\n", " 25: [0, 3, 1, 4]\n", " 26: [0, 3, 2, 3]\n", " 27: [0, 3, 3, 2]\n", " 28: [0, 3, 4, 1]\n", " 29: [0, 3, 5, 0]\n", " 30: [0, 4, 0, 4]\n", " 31: [0, 4, 1, 3]\n", " 32: [0, 4, 2, 2]\n", " 33: [0, 4, 3, 1]\n", " 34: [0, 4, 4, 0]\n", " 35: [0, 5, 0, 3]\n", " 36: [0, 5, 1, 2]\n", " 37: [0, 5, 2, 1]\n", " 38: [0, 5, 3, 0]\n", " 39: [0, 6, 0, 2]\n", " 40: [0, 6, 1, 1]\n", " 41: [0, 6, 2, 0]\n", " 42: [0, 7, 0, 1]\n", " 43: [0, 7, 1, 0]\n", " 44: [0, 8, 0, 0]\n", " 45: [1, 0, 0, 7]\n", " 46: [1, 0, 1, 6]\n", " 47: [1, 0, 2, 5]\n", " 48: [1, 0, 3, 4]\n", " 49: [1, 0, 4, 3]\n", " 50: [1, 0, 5, 2]\n", " 51: [1, 0, 6, 1]\n", " 52: [1, 0, 7, 0]\n", " 53: [1, 1, 0, 6]\n", " 54: [1, 1, 1, 5]\n", " 55: [1, 1, 2, 4]\n", " 56: [1, 1, 3, 3]\n", " 57: [1, 1, 4, 2]\n", " 58: [1, 1, 5, 1]\n", " 59: [1, 1, 6, 0]\n", " 60: [1, 2, 0, 5]\n", " 61: [1, 2, 1, 4]\n", " 62: [1, 2, 2, 3]\n", " 63: [1, 2, 3, 2]\n", " 64: [1, 2, 4, 1]\n", " 65: [1, 2, 5, 0]\n", " 66: [1, 3, 0, 4]\n", " 67: [1, 3, 1, 3]\n", " 68: [1, 3, 2, 2]\n", " 69: [1, 3, 3, 1]\n", " 70: [1, 3, 4, 0]\n", " 71: [1, 4, 0, 3]\n", " 72: [1, 4, 1, 2]\n", " 73: [1, 4, 2, 1]\n", " 74: [1, 4, 3, 0]\n", " 75: [1, 5, 0, 2]\n", " 76: [1, 5, 1, 1]\n", " 77: [1, 5, 2, 0]\n", " 78: [1, 6, 0, 1]\n", " 79: [1, 6, 1, 0]\n", " 80: [1, 7, 0, 0]\n", " 81: [2, 0, 0, 6]\n", " 82: [2, 0, 1, 5]\n", " 83: [2, 0, 2, 4]\n", " 84: [2, 0, 3, 3]\n", " 85: [2, 0, 4, 2]\n", " 86: [2, 0, 5, 1]\n", " 87: [2, 0, 6, 0]\n", " 88: [2, 1, 0, 5]\n", " 89: [2, 1, 1, 4]\n", " 90: [2, 1, 2, 3]\n", " 91: [2, 1, 3, 2]\n", " 92: [2, 1, 4, 1]\n", " 93: [2, 1, 5, 0]\n", " 94: [2, 2, 0, 4]\n", " 95: [2, 2, 1, 3]\n", " 96: [2, 2, 2, 2]\n", " 97: [2, 2, 3, 1]\n", " 98: [2, 2, 4, 0]\n", " 99: [2, 3, 0, 3]\n", "100: [2, 3, 1, 2]\n", "101: [2, 3, 2, 1]\n", "102: [2, 3, 3, 0]\n", "103: [2, 4, 0, 2]\n", "104: [2, 4, 1, 1]\n", "105: [2, 4, 2, 0]\n", "106: [2, 5, 0, 1]\n", "107: [2, 5, 1, 0]\n", "108: [2, 6, 0, 0]\n", "109: [3, 0, 0, 5]\n", "110: [3, 0, 1, 4]\n", "111: [3, 0, 2, 3]\n", "112: [3, 0, 3, 2]\n", "113: [3, 0, 4, 1]\n", "114: [3, 0, 5, 0]\n", "115: [3, 1, 0, 4]\n", "116: [3, 1, 1, 3]\n", "117: [3, 1, 2, 2]\n", "118: [3, 1, 3, 1]\n", "119: [3, 1, 4, 0]\n", "120: [3, 2, 0, 3]\n", "121: [3, 2, 1, 2]\n", "122: [3, 2, 2, 1]\n", "123: [3, 2, 3, 0]\n", "124: [3, 3, 0, 2]\n", "125: [3, 3, 1, 1]\n", "126: [3, 3, 2, 0]\n", "127: [3, 4, 0, 1]\n", "128: [3, 4, 1, 0]\n", "129: [3, 5, 0, 0]\n", "130: [4, 0, 0, 4]\n", "131: [4, 0, 1, 3]\n", "132: [4, 0, 2, 2]\n", "133: [4, 0, 3, 1]\n", "134: [4, 0, 4, 0]\n", "135: [4, 1, 0, 3]\n", "136: [4, 1, 1, 2]\n", "137: [4, 1, 2, 1]\n", "138: [4, 1, 3, 0]\n", "139: [4, 2, 0, 2]\n", "140: [4, 2, 1, 1]\n", "141: [4, 2, 2, 0]\n", "142: [4, 3, 0, 1]\n", "143: [4, 3, 1, 0]\n", "144: [4, 4, 0, 0]\n", "145: [5, 0, 0, 3]\n", "146: [5, 0, 1, 2]\n", "147: [5, 0, 2, 1]\n", "148: [5, 0, 3, 0]\n", "149: [5, 1, 0, 2]\n", "150: [5, 1, 1, 1]\n", "151: [5, 1, 2, 0]\n", "152: [5, 2, 0, 1]\n", "153: [5, 2, 1, 0]\n", "154: [5, 3, 0, 0]\n", "155: [6, 0, 0, 2]\n", "156: [6, 0, 1, 1]\n", "157: [6, 0, 2, 0]\n", "158: [6, 1, 0, 1]\n", "159: [6, 1, 1, 0]\n", "160: [6, 2, 0, 0]\n", "161: [7, 0, 0, 1]\n", "162: [7, 0, 1, 0]\n", "163: [7, 1, 0, 0]\n", "164: [8, 0, 0, 0]\n" ] } ], "source": [ "import scipy.special\n", "n, M = 4, 8\n", "total = scipy.special.comb(M+n-1,n-1) # M+n-1 choose n-1\n", "print(\"Total number of compositions is %d\"%total)\n", "\n", "for i,k in enumerate(compositions(M,n)):\n", " print('%3d'%i,end=\": \")\n", " print(k)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "hide-output": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.69 µs ± 298 ns per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "60.1 µs ± 398 ns per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "515 µs ± 120 µs per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "3.02 ms ± 184 µs per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "16.7 ms ± 1.01 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "71.1 ms ± 3.83 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "250 ms ± 3.04 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "893 ms ± 18.4 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "2.96 s ± 90.7 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)\n", "8.83 s ± 122 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "N = 10 # number of points\n", "kk = lambda i: 2+i # step formula\n", "M = 20 # quantity of indivisible good in units of lambda\n", "\n", "n,x,std = [0]*N,[0]*N,[0]*N # initialize lists\n", "for i in range(N):\n", " n[i] = kk(i) # number of list elements\n", " t = %timeit -n2 -r10 -o for c in compositions(M,n[i]): pass\n", " x[i] = t.average\n", " std[i] = t.stdev\n", "\n", "plt.errorbar(n,x,std)\n", "plt.xlabel('Number of elements in compositions')\n", "plt.ylabel('run time, sec')\n", "plt.show()\n", "\n", "plt.errorbar(n,x,std)\n", "plt.yscale('log')\n", "plt.xlabel('Number of elements in compositions')\n", "plt.ylabel('log(run time)')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Other exponential algorithms\n", "\n", "- Many board games (checkers, chess, shogi, go) in n-by-n generalizations \n", "- Traveling salesman problem (TSP) \n", "- Many problems in economics are subject to “curse of dimensionality” \n", "\n", "\n", "**Curse of dimensionality** = exponential time in solution algorithms" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### What to do with heavy to compute models?\n", "\n", "1. Design of better solution algorithms \n", "1. Analyze special classes of problems + rely on problem structure \n", "1. Speed up the code (low level language, compilation to machine code) \n", "1. Parallelize the computations \n", "1. Bound the problem to maximize model usefulness while keeping it tractable \n", "1. Wait for innovations in computing technology " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Classes of computational complexity\n", "\n", "Thinking of all problems there are:\n", "\n", "- **P** can be solved in polynomial time \n", "- **NP** solution can checked in polynomial time, even if requires *exponential* solution algorithm \n", "- **NP-hard** as complex as *any* NP problem (including all exponential and combinatorial problems) \n", "- **NP-complete** both NP and NP-hard (tied via reductions) \n", "\n", "\n", "NP stands for non-deterministic polynomial time $ \\leftrightarrow $ *‘magic’ guess* algorithm" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### P vs. NP\n", "\n", "Unresolved question of whether **P = NP** or **P** $ \\ne $ **NP** (\\$1 mln. prize by Clay Mathematics Institute)\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Further learning resources\n", "\n", "- Profiling python code\n", " [https://docs.python.org/3/library/profile.html](https://docs.python.org/3/library/profile.html) \n", "- Complexity classes and P vs. NP\n", " - [https://en.wikipedia.org/wiki/P_versus_NP_problem](https://en.wikipedia.org/wiki/P_versus_NP_problem)\n", " - [https://cs.stackexchange.com/questions/9556/what-is-the-definition-of-p-np-np-complete-and-np-hard](https://cs.stackexchange.com/questions/9556/what-is-the-definition-of-p-np-np-complete-and-np-hard)\n", " - [https://www.youtube.com/watch?v=YX40hbAHx3s](https://www.youtube.com/watch?v=YX40hbAHx3s) \n", "- Lecture on algorithm complexity by Erik Demaine, MIT (50 min)\n", " [https://www.youtube.com/watch?v=moPtwq_cVH8](https://www.youtube.com/watch?v=moPtwq_cVH8) \n", "- Big-O cheet sheet\n", " [https://www.bigocheatsheet.com/](https://www.bigocheatsheet.com/) " ] } ], "metadata": { "celltoolbar": "Slideshow", "date": 1612589584.605089, "download_nb": false, "filename": "09_algorithms.rst", "filename_with_path": "09_algorithms", "kernelspec": { "display_name": "Python 3", "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.7.6" }, "title": "Foundations of Computational Economics #9" }, "nbformat": 4, "nbformat_minor": 4 }