{ "metadata": { "name": "02-coinflips" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "See http://ivory.idyll.org/blog/2013-pycon-awesome-big-data-algorithms-talk.html" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Flip a lot of coins;\n", "# Use the distribution of longest run of zeros to infer how many\n", "# coinflips were done, ex post facto.\n", "import random\n", "def generate_coinflips(num):\n", " return [ random.choice([0,1]) for i in range(num) ]\n", "\n", "def longest_run_zero(x):\n", " i = 0\n", " count = 0\n", " max_count = 0\n", " while i < len(x):\n", " if x[i] == 0:\n", " count += 1\n", " else:\n", " if count > max_count:\n", " max_count = count\n", " count = 0\n", " i += 1\n", " \n", " return max_count" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "def longest_run_mc(runsize, num):\n", " z = []\n", " for i in range(num):\n", " x = generate_coinflips(runsize)\n", " count = longest_run_zero(x)\n", " z.append(count)\n", " \n", " return z" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "# do 100 runs of 1000 coinflips, and plot the distribution\n", "d = longest_run_mc(100, 1000)\n", "hist(d, bins=max(d), range=(0, max(d)))\n", "\n", "# we expect a peak right around...\n", "print math.log(100, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "6.64385618977\n" ] }, { "output_type": "display_data", "png": "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\nR4/edVtTU5N8Pp/Onz+v/Px8HThwwKXqRjdS/atXr1ZnZ6dOnTqlTz75ZFIfpI1Uv3T7QPP48eN6\n8sknxzTOhAX8VJ8jn5eXp9LSUknS7NmzVVJSolOnTrlc1dhdvHhRf/jDH/Sd73xnSr7J3draqh/+\n8Id6+OGHNW3atMT7PVPB9OnT5TiOPv74Yw0NDenatWuaNWuW22UltWLFimE1xuNx1dfXKycnR3V1\ndZP69TtS/V/96leVlZWlrKwsfe1rX9M777zjUnWjG6l+Sdq6dat+/OMfj3mcCQt4k+bIX7hwQZ2d\nnQoGg26XMmZbtmzRyy+/rKysqXeF6IsXL+r69euKRCIKhULas2ePrl+/7nZZYzZ9+nQ1NTVp3rx5\nysvL0/Lly6fUvvO5O1/Dfr9f8Xjc5YrG79VXX51yrcrf/e53ys/P1+LFi8e8ztR7tbvMtm2tW7dO\ne/fu1aOPPup2OWPy+9//Xk888YQCgcCUPHq/fv26zp07p7Vr18qyLHV2duq3v/2t22WN2YcffqhI\nJKIPPvhAPT09+stf/qK3337b7bJSNhX3nZH86Ec/ktfr1dNPP+12KWN27do17d69+67zb8by+5iw\ngC8rK9PZs2cTP3d2dqq8vHyiNp8WN27c0Nq1a/XMM8+opqbG7XLG7M9//rMOHz6s+fPna/369frT\nn/6kZ5991u2yxmzBggUqLCzUmjVrNH36dK1fv15Hjhxxu6wxi8fjKi8v14IFC/T444/r6aef1rvv\nvut2WSkrKytTV1eXJKmrq0tlZWUuV5S6119/XS0tLTp48KDbpaTkn//8p3p6erRkyRLNnz9fFy9e\n1LJly9Tf3590vQkL+Kk+R95xHNXX12vhwoVTYhbEnXbv3q2+vj51d3frN7/5jSorK/WrX/3K7bJS\nUlBQoFgsps8++0xvv/22vvKVr7hd0pitWLFCp06d0tWrV/Xpp5/qyJEjWr16tdtlpSwUCikajWpo\naEjRaHTKHaAdPXpUL7/8sg4fPqyHH37Y7XJSsmjRIv373/9Wd3e3uru7lZ+fr9OnT+uJJ55IvqIz\ngSzLcvx+v/PFL37RaWxsnMhN37cTJ044Ho/HWbJkiVNaWuqUlpY6R44ccbuslFmW5axZs8btMlL2\nj3/8wwmFQs6SJUucbdu2OYODg26XlJLXXnvNqaiocL785S87O3fudG7duuV2SUl961vfcubMmeNk\nZ2c7+fn5TjQadQYGBpxvfOMbzty5c52amhrHtm23y7ynz+t/6KGHnPz8fOeXv/yls2DBAsfn8yVe\nv5FIxO0y72mk5/9O8+fPdz766KNRx/E4jiGNNQDAXXiTFQAMRcADgKEIeAAwFAEPAIYi4AHAUAQ8\nABjq/wDPZlPBG+ezbQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# if we do 500 coinflips, the peak shifts right, to... \n", "d = longest_run_mc(500, 1000)\n", "hist(d, bins=max(d), range=(0, max(d)))\n", "print math.log(500, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "8.96578428466\n" ] }, { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAD9CAYAAAC2l2x5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFYxJREFUeJzt3X9MVff9x/HXJRRr6tXYOqEJ3mkqA8QfXFu4rJ14NWtL\nmzFYTIN2tcvApL1t52+zZDEd7g8b5zqnprOkGy6LYT+yZJlbhzC3XBW3cem0pkWYdYGAiw5/bOUy\ncVP8fP9g3m8tiFw83HP78flISPBezjlv4Prk8LnHq8cYYwQAsE6K2wMAAMYHgQcASxF4ALAUgQcA\nSxF4ALAUgQcAS40Y+O7ubi1ZskR5eXkKBoOqq6uTJFVXVyszM1N+v19+v1/19fWxbXbt2qWsrCzN\nmTNHTU1N4zs9AOCWPCNdB3/u3DmdO3dO+fn5unDhggoLC3XixAl997vfldfr1fr162/6+J6eHhUX\nF6uxsVEdHR1at26djh07Nu6fBABgqNSR7szIyFBGRoYkadq0acrLy1NLS4skabifC83NzSopKZHP\n55PP55MxRtFoVF6vdxxGBwCMZNRr8KdPn1Zra6sCgYAkaffu3SoqKtK2bdsUjUYlSZFIRLm5ubFt\nsrOzFYlEHB4ZADAaI57B3xCNRlVRUaEdO3bovvvuUygU0quvvqre3l5t2rRJNTU12rhx47Bn9R6P\nZ1S3AQBuL55Xl7ntGfzVq1e1bNkyrVy5UmVlZZKk6dOny+PxaMqUKXr55Zf1y1/+UpIUCAR08uTJ\n2Lbt7e0qKCi45ZDJ9PbNb37T9RmYya65mImZnH6L14iBN8aoqqpKc+fO1dq1a2O3nz17VpJ07do1\n1dXV6emnn5YkFRYWqqGhQV1dXQqHw0pJSWH9HQBcMuISzdGjR7Vv3z7Nnz9ffr9fkrR161b95Cc/\n0bvvvqu0tDQVFxcrFApJktLT0xUKhbR06VKlpaWppqZm/D8DfGJNnny/otF/OrKvtLR7VV1d7ci+\nAFuMGPjPfe5zun79+pDbn3rqqVtus2bNGq1Zs+bOJ0uwYDDo9ghD2D7TYNydebXq//43+Z7Xsf37\n5xRmGj8jXgc/bgf1eMa0ngS7DD7Z7tTjgMcU7BdvO0d1FQ2Q/FIduTrL652q3t5LDswDuI8zeLjG\n6TN4Z/bFYxPJK9528mJjAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8A\nliLwAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8AliLw\nAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8AliLwAGApAg8Alhox8N3d3VqyZIny8vIU\nDAZVV1cnSYpGoyorK5PP51N5ebn6+vpi2+zatUtZWVmaM2eOmpqaxnd6AMAteYwx5lZ3njt3TufO\nnVN+fr4uXLigwsJCnThxQnv27FF3d7e+853vaMOGDZo5c6Y2btyonp4eFRcXq7GxUR0dHVq3bp2O\nHTs29KAej0Y4LO4SHo9HklOPA6f2xWMTySvedo54Bp+RkaH8/HxJ0rRp05SXl6eWlhZFIhFVVVVp\nwoQJqqysVHNzsySpublZJSUl8vl8Wrx4sYwxikajd/DpAADGatRr8KdPn1Zra6sKCwvV0tKinJwc\nSVJOTo4ikYikwcDn5ubGtsnOzo7dBwBIrNTRfFA0GlVFRYV27NihSZMmxfUrwuCv4UNVV1fH3g8G\ngwoGg6PeJwDcDcLhsMLh8Ji3v23gr169qmXLlmnlypUqKyuTJBUUFKitrU1+v19tbW0qKCiQJAUC\nAR08eDC2bXt7e+y+j/to4AEAQ3385HfLli1xbT/iEo0xRlVVVZo7d67Wrl0buz0QCKi2tlb9/f2q\nra1VUVGRJKmwsFANDQ3q6upSOBxWSkqKvF5vXAMBAJwx4lU0TU1NKi4u1vz582NLLa+99poee+wx\nPffcczp+/LgWLlyoffv2adKkSZKknTt3avfu3UpLS1NNTY0WLVo09KBcRQNxFQ0Qr3jbOWLgxwuB\nh0TggXg5epkkAOCTi8ADgKUIPABYisADgKUIPABYalT/khW4e6Te8l9fx8vrnare3kuO7AsYCy6T\nhGuS9TJJJ2ficQ4ncZkkAEASgQcAaxF4ALAUgQcASxF4ALAUgQcASxF4ALAUgQcASxF4ALAUgQcA\nSxF4ALAUgQcASxF4ALAUgQcASxF4ALAUgQcASxF4ALAUgQcASxF4ALAUgQcASxF4ALAUgQcASxF4\nALAUgQcASxF4ALAUgQcASxF4ALAUgQcASxF4ALDUiIGvrKxUenq65s2bF7uturpamZmZ8vv98vv9\nqq+vj923a9cuZWVlac6cOWpqahq/qQEAt+Uxxphb3XnkyBFNmjRJzz//vN577z1J0pYtW+T1erV+\n/fqbPranp0fFxcVqbGxUR0eH1q1bp2PHjg1/UI9HIxwWdwmPxyPJqceBU/tydiYe53BSvO1MHenO\nRYsWqbOzc8jtwx2gublZJSUl8vl88vl8MsYoGo3K6/WOehgAgHPGtAa/e/duFRUVadu2bYpGo5Kk\nSCSi3Nzc2MdkZ2crEok4MyUAIG4jnsEPJxQK6dVXX1Vvb682bdqkmpoabdy4cdiz+sFfwYdXXV0d\nez8YDCoYDMY7CgBYLRwOKxwOj3n7EdfgJamzs1OlpaWxNfiPOnHihF566SUdPXpUv/71r3Xw4EHt\n3LlTkpSfn68jR44Mu0TDGjwk1uCBeMXbzriXaM6ePStJunbtmurq6vT0009LkgoLC9XQ0KCuri6F\nw2GlpKSw/g4ALhpxiWbFihU6dOiQLly4oBkzZmjLli0Kh8N69913lZaWpuLiYoVCIUlSenq6QqGQ\nli5dqrS0NNXU1CTkEwAADO+2SzTjclCWaCCWaIB4jfsSDQDgk4HAA4ClCDwAWIrAA4ClCDwAWIrA\nA4ClCDwAWIrAA4ClCDwAWIrAA4ClCDwAWIrAA4ClCDwAWIrAA4Cl4v4v+3B3mzz5fkWj/3R7DACj\nwOvBIy7J+RruTu6L14NH8uL14AEAkgg8AFiLwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOA\npQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFhqxMBXVlYq\nPT1d8+bNi90WjUZVVlYmn8+n8vJy9fX1xe7btWuXsrKyNGfOHDU1NY3f1ACA2xox8F/96ld14MCB\nm27bs2ePfD6fPvjgA2VmZurNN9+UJPX09Oj73/++fv/732vPnj1avXr1+E0NALitEQO/aNEiTZ06\n9abbIpGIqqqqNGHCBFVWVqq5uVmS1NzcrJKSEvl8Pi1evFjGGEWj0fGbHAAworjX4FtaWpSTkyNJ\nysnJUSQSkTQY+Nzc3NjHZWdnx+4DACRearwbGGNG/bEej+eW91VXV8feDwaDCgaD8Y4CAFYLh8MK\nh8Nj3j7uwBcUFKitrU1+v19tbW0qKCiQJAUCAR08eDD2ce3t7bH7hvPRwAMAhvr4ye+WLVvi2j7u\nJZpAIKDa2lr19/ertrZWRUVFkqTCwkI1NDSoq6tL4XBYKSkp8nq98e4eAOCQEQO/YsUKPfroozp1\n6pRmzJihvXv3KhQKqaurS9nZ2fr73/+uF198UZKUnp6uUCikpUuX6qWXXtLOnTsT8gkAAIbnMfEs\nqjt1UI8nrrV8JI/B51Wc+t4l476cnYnHOZwUbzvjXoMHMFqpI15oMFpe71T19l5yYB7cbTiDR1w4\ng3djX/x9waB428lr0QCApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiK\nwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOA\npQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApQg8AFiKwAOApcYc+JkzZ2r+/Pny\n+/0qLCyUJEWjUZWVlcnn86m8vFx9fX2ODQoAiM+YA+/xeBQOh3X8+HFFIhFJ0p49e+Tz+fTBBx8o\nMzNTb775pmODAgDic0dLNMaYm/4ciURUVVWlCRMmqLKyUs3NzXc0HABg7O7oDH7p0qUqLy/X/v37\nJUktLS3KycmRJOXk5MTO7AEAiZc61g2PHj2qBx98UG1tbSotLVVhYeGQM/qRVFdXx94PBoMKBoNj\nHQUArBQOhxUOh8e8vcfEU+VbWL9+vXJzc3XgwAFt3rxZfr9ff/nLX/Taa6/pF7/4xdCDejxx/TBA\n8vB4PJKc+t4l476Scyb+vkCKv51jWqK5fPmyotGoJOn8+fNqaGhQSUmJAoGAamtr1d/fr9raWhUV\nFY1l9wAAB4zpDL6jo0Nf+tKXJEkPPPCAvvzlL6uyslLRaFTPPfecjh8/roULF2rfvn2aNGnS0INy\nBv+JxRm8G/vi7wsGxdtOR5Zo4kXgP7kIvBv74u8LBiVkiQYAkPwIPABYasyXSQJIlNT/LY3dOa93\nqnp7LzmyLyQ/Ag8kvWty6nmBaNSZHxT4ZGCJBgAsReABwFIEHgAsReABwFIEHgAsReABwFIEHgAs\nReABwFIEHgAsReABwFIEHgAsReABwFIEHgAsReABwFIEHgAsReABwFIEHgAsReABwFIEHgAsReAB\nwFIEHgAsReABwFKpbg+AxJg8+X5Fo/90ewwACeQxxpiEH9TjkQuHvat5PB5JTnzNndpPsu7L9pnu\nkXTNkT15vVPV23vJkX1hdOJtJ2fwwF3lmpz6YRGN3vO/E4c7ww+K8UPgAYyRMz8sotE7/yGB4fEk\nKwBYisADgKUIPABYisADgKUIPABrTJ58vzwezx2/TZ58v9ufiiO4igaAy1Idudzy/3Flzw2On8Ef\nPnxYubm5ysrK0u7du53e/bgJh8NujzBEMs4EOO/G5ZZOvOGjHA/8mjVrVFNTo4MHD+qNN97QhQsX\nnD7EuEjGmCbjTMDdIcWRpR63l3scDfyHH34oSSouLtanP/1pPfHEE2pubnbyEACQANfl1G8Vbr4G\nlKOBb2lpUU5OTuzPc+bM0Z///GcnDwEAGCXXnmR19kkVZ2zZssXtEYZwdianvuZOfu+ScV/MlPh9\n2T2TW71zNPAFBQXatGlT7M+tra0qKSkZ8nG8kiQAjD9Hl2imTJkiafBKms7OTv3ud79TIBBw8hAA\ngFFyfInme9/7nl544QVdvXpVq1ev1rRp05w+BABgFBy/THLx4sVqa2vT6dOntXr16pvuS7Zr5Lu7\nu7VkyRLl5eUpGAyqrq7O7ZFiBgYG5Pf7VVpa6vYokqR///vf+spXvqLPfOYzSfXk+VtvvaVHH31U\nDz/8sNauXevKDJWVlUpPT9e8efNit0WjUZWVlcnn86m8vFx9fX2uz7Rp0ybl5uZq4cKFWrt2rfr7\n+12f6YbXX39dKSkpunQpsa8Lf6uZ9u7dq9zcXOXl5enrX/96Qme61VwnT57UF77wBeXn56u0tFRt\nbW2335FJoPz8fHPo0CHT2dlpsrOzzfnz5xN5+CHOnj1rjh8/bowx5vz582bWrFmmt7fX1ZlueP31\n182zzz5rSktL3R7FGGPMhg0bzObNm01/f7+5evWq+de//uX2SObixYtm5syZpq+vzwwMDJinnnrK\nHDhwIOFzHD582Bw7dszMnTs3dtu2bdvMK6+8Yq5cuWJefvlls337dtdnamxsNAMDA2ZgYMCsWrXK\n/OAHP3B9JmOM6erqMk8++aSZOXOmuXjxouszvffee6aoqMicOnXKGGNMT09PQme61VwVFRXmZz/7\nmTHGmLq6OrN8+fLb7idhr0WTjNfIZ2RkKD8/X5I0bdo05eXl6Z133nF1Jkk6c+aMfvvb32rVqlVJ\n84T0wYMH9Y1vfEP33nuvUlNTY8+3uGnixIkyxujDDz9Uf3+/Ll++rKlTpyZ8jkWLFg05biQSUVVV\nlSZMmKDKysqEP9aHm+nxxx9XSkqKUlJS9OSTT+rQoUOuzyRJ69ev17e//e2EznLDcDPV19erqqpK\nWVlZkqRPfepTSTHXlClTdPHiRV2/fl0XL14c1WM9YYFP9mvkT58+rdbWVhUWFro9itatW6ft27cr\nJSU5XgvuzJkzunLlikKhkAKBgLZt26YrV664PZYmTpyoPXv2aObMmcrIyNBjjz2WFN8/6ebHe05O\njiKRiMsT3eytt95KiuW/X/3qV8rMzNT8+fPdHiWmsbFR77//vh555BGtWrVKJ0+edHskSdL27du1\nc+dOTZ06VW+88Ya2bdt2222SoyAui0ajqqio0I4dO3Tfffe5OstvfvMbTZ8+XX6/P2nO3q9cuaJT\np05p2bJlCofDam1t1c9//nO3x9L58+cVCoV08uRJdXZ26k9/+pPefvttt8eSlNyXAn/rW9+S1+vV\nM8884+ocly9f1tatW2/6tx7J8HW7cuWKLl26pCNHjqisrEyvvPKK2yNJGlyX/9rXvqaLFy/qxRdf\nVFVV1W23SVjgCwoK1N7eHvtza2urioqKEnX4W7p69aqWLVumlStXqqyszO1x9Mc//lH79+/XrFmz\ntGLFCv3hD3/Q888/7+pMs2fPVnZ2tkpLSzVx4kStWLFC9fX1rs4kDS6DFBUVafbs2XrggQf0zDPP\n6PDhw26PJWnw8X7jSbC2tjYVFBS4PNGgH/3oR2poaNC+ffvcHkV/+9vf1NnZqQULFmjWrFk6c+aM\nHn74YfX09Lg6V1FRkSoqKjRx4kSVlpaqvb09KX5jbWpqUmVlpVJTU1VVVTWqx3rCAp+M18gbY1RV\nVaW5c+e6dgXGx23dulXd3d3q6OjQT3/6Uy1dulQ//vGP3R5LWVlZam5u1vXr1/X222/r85//vNsj\nadGiRXrnnXd06dIl/ec//1F9fb2eeOIJt8eSJAUCAdXW1qq/v1+1tbVJcTJz4MABbd++Xfv379e9\n997r9jiaN2+e/vGPf6ijo0MdHR3KzMzUsWPHNH36dFfn+uxnP6v6+noZY9Tc3KyHHnooKb5eS5Ys\n0f79+yUNLm09/vjjt9/I+ed/by0cDpucnBzz0EMPmZ07dyby0MM6cuSI8Xg8ZsGCBSY/P9/k5+eb\n+vp6t8eKCYfDSXMVzV//+lcTCATMggULzIYNG0xfX5/bIxljjNm7d68pLi42jzzyiNm8ebMZGBhI\n+AzLly83Dz74oElLSzOZmZmmtrbW9Pb2mi9+8YtmxowZpqyszESjUVdmuueee0xmZqb54Q9/aGbP\nnm18Pl/ssR4KhVyZ6aNfp4+aNWtWwq+iGW6ma9eumRdeeMHk5OSY8vJyE4lEEjrTR+e68f2rra01\n77//vlm+fLmZP3++efbZZ01bW9tt9+MxJgkWvQAAjuNJVgCwFIEHAEsReACwFIEHAEsReACwFIEH\nAEv9H7N67AcpkRvoAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 10 } ], "metadata": {} } ] }