Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Ben Glocker
algo202
Commits
ca9835cd
Commit
ca9835cd
authored
Feb 20, 2018
by
Ben Glocker
Browse files
cleared notebooks 00 and 02
parent
8c6adbca
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
00-Introduction.ipynb
View file @
ca9835cd
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
02-Dynamic-Programming.ipynb
View file @
ca9835cd
...
...
@@ -23,18 +23,9 @@
},
{
"cell_type": "code",
"execution_count":
4
,
"execution_count":
null
,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"55\n",
"54.9 µs ± 10.4 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
]
}
],
"outputs": [],
"source": [
"def naive_fib(n):\n",
" if n == 0:\n",
...
...
@@ -57,18 +48,9 @@
},
{
"cell_type": "code",
"execution_count":
5
,
"execution_count":
null
,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"55\n",
"4.13 µs ± 285 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
]
}
],
"outputs": [],
"source": [
"def dp_fib(n):\n",
" if n == 0:\n",
...
...
@@ -100,7 +82,7 @@
},
{
"cell_type": "code",
"execution_count":
6
,
"execution_count":
null
,
"metadata": {
"collapsed": true
},
...
...
@@ -124,7 +106,7 @@
},
{
"cell_type": "code",
"execution_count":
11
,
"execution_count":
null
,
"metadata": {
"collapsed": true
},
...
...
@@ -146,7 +128,7 @@
},
{
"cell_type": "code",
"execution_count":
12
,
"execution_count":
null
,
"metadata": {
"collapsed": true
},
...
...
@@ -167,7 +149,7 @@
},
{
"cell_type": "code",
"execution_count":
13
,
"execution_count":
null
,
"metadata": {
"collapsed": true
},
...
...
@@ -188,30 +170,9 @@
},
{
"cell_type": "code",
"execution_count":
14
,
"execution_count":
null
,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0, 0.6281491025812429)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFQNJREFUeJzt3X2QXXd93/H3R7Jdsi4txFYIta1du1GGcaih8dakjUvp\nNG4EZUal8RDJGx466WztYELadIqpMpQ24zZNUibTicFZiCcw2tTjKU8qYyICQ4vTQNDK49jYrkHY\nehzABgJYEcUIffvHvTq+Wla7d1d79u69+37N7Nx7fue3536PjnQ/Oud3HlJVSJIEsGnQBUiS1g9D\nQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSQ1DQZLUMBQkSY0LBl3Acl166aU1MTEx6DIkaagcOHDg\na1W1Zal+QxcKExMTzM3NDboMSRoqSQ7308/DR5KkhqEgSWoYCpKkhqEgSWq0GgpJtid5LMnBJLed\no88rkjyQ5OEk/7vNeiRJi2vt7KMkm4E7gBuAY8D+JHur6pGePs8D3gVsr6ojSX6krXokSUtrc0/h\nOuBgVT1eVc8AdwM75vW5CfhgVR0BqKonW6xHkrSENkPhMuBoz/SxbluvHween+R/JTmQ5PUt1iNJ\nWsKgL167ALgW+EfADwGfSfLZqvpCb6ck08A0wNatW9e8SEnaKNrcUzgOXNEzfXm3rdcxYF9V/WVV\nfQ34NPCS+QuqqpmqmqyqyS1blrxKW5K0Qm2Gwn5gW5Irk1wE7AT2zuvzEeD6JBckGQNeBjzaYk2S\npEW0FgpVdQq4FdhH54v+nqp6OMnNSW7u9nkU+CPgQeBzwHur6vNt1SRJQ2F2FiYmYNOmzuvs7Jp9\ndKpqzT5sNUxOTpY3xJM0smZnYXoaTp58tm1sDGZmYGpqxYtNcqCqJpfq5xXNkrSe7N59diBAZ3r3\n7jX5eENBktaTI0eW177KDAVJWk/Oddr9Gp2ObyhI0npy++2dMYReY2Od9jVgKEjSejI11RlUHh+H\npPN6noPMyzHoK5olSfNNTa1ZCMznnoIkqWEoSJIahoIkqWEoSJIahoIkqWEoSJIahoIkqWEoSJIa\nhoIkqWEoSJIahoIkqWEoSJIahoIkqWEoSJIahoIkqWEoSJIahoIkqWEoSJIahoIkqWEoSJIarYZC\nku1JHktyMMltC8x/RZJvJXmg+/P2NuuRJC3ugrYWnGQzcAdwA3AM2J9kb1U9Mq/rfVX16rbqkCT1\nr809heuAg1X1eFU9A9wN7Gjx8yRJ56nNULgMONozfazbNt/fS/Jgko8l+YkW65EkLaG1w0d9uh/Y\nWlUnkrwK+DCwbX6nJNPANMDWrVvXtkJJ2kDa3FM4DlzRM315t61RVd+uqhPd9/cCFya5dP6Cqmqm\nqiaranLLli0tlixJG1ubobAf2JbkyiQXATuBvb0dkvxoknTfX9et5+st1iRJWkRrh4+q6lSSW4F9\nwGbgrqp6OMnN3fl3AjcCtyQ5BXwH2FlV1VZNkqTFZdi+gycnJ2tubm7QZUjSUElyoKoml+rnFc2S\npIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIah\nIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElqGAqSpIahIElq\ntBoKSbYneSzJwSS3LdLv7yQ5leTGNuuRJC2utVBIshm4A3glcDWwK8nV5+j3X4CPt1WLJKk/be4p\nXAccrKrHq+oZ4G5gxwL93gx8AHiyxVokSX1oMxQuA472TB/rtjWSXAa8Bnj3YgtKMp1kLsncU089\nteqFSpI6Bj3Q/DvAW6vq9GKdqmqmqiaranLLli1rVJokbTwXtLjs48AVPdOXd9t6TQJ3JwG4FHhV\nklNV9eEW65IknUObobAf2JbkSjphsBO4qbdDVV155n2SPwA+aiBI0uC0FgpVdSrJrcA+YDNwV1U9\nnOTm7vw72/psSdLKtLmnQFXdC9w7r23BMKiqN7ZZiyRpaYMeaJYkrSOGgiSpYShIkhqGgiSp0fdA\nc5LnA38D+A5waKkLziRJw2fRUEjy14E3AbuAi4CngOcAL0jyWeBdVfWp1quUJK2JpfYU/gfwfuDv\nV9U3e2ckuRZ4XZKrqur32ypQkrR2Fg2FqrphkXkHgAOrXpEkaWD6GmhO8tNJLu6+/4Uk70wy3m5p\nkqS11u/ZR+8GTiZ5CfCrwJfoHFaSJI2QfkPhVFUVnYfk/G5V3QE8t72yJEmD0O8pqU8neRvwC8DL\nk2wCLmyvLEnSIPS7p/DzwHeBX6yqr9B5NsJvtVaVJGkglrpOYR/wR8DHquqdZ9qr6giOKUjSyFlq\nT+ENwF8A70hyf5J3J9lx5kwkSdJoWTQUquorVfUHVbWTzqMz3w9cC3w8ySeS/Nu1KFKSRsLsLExM\nwKZNndfZ2UFX9AP6vvdR915Hn+n+vD3JpcDPtlWYJI2U2VmYnoaTJzvThw93pgGmpgZX1zyL7ikk\n+bUkP7zQvKr6GvCVJK9upTJJGiW7dz8bCGecPNlpX0eW2lN4CPifSf4fcD/P3hBvG/BS4BPAf2q1\nQkkaBUeOLK99QJa699FHgI8k2Qb8NPBC4NvAHmC6qr7TfomSNAK2bu0cMlqofR3pa0yhqr4IfLHl\nWiRpdN1++9ljCgBjY532dcQnr0nSWpiagpkZGB+HpPM6M7OuBplhGWcfSZLO09TUuguB+dxTkCQ1\n+n2ewo8n+WSSz3enr0nya+2WJklaa/3uKbwHeBvwPYCqehDYudQvJdme5LEkB5PctsD8HUkeTPJA\nkrkk1y+neEnS6up3TGGsqj6XpLft1GK/kGQzcAdwA3AM2J9kb1U90tPtk8Deqqok1wD3AC/qu3pJ\n0qrqd0/ha0n+JlAASW4EvrzE71wHHKyqx6vqGeBuOg/paVTVie7DewAuPrN8SdJg9Lun8CZgBnhR\nkuPAE3QeuLOYy4CjPdPHgJfN75TkNcB/Bn4E+Cd91iNJakG/F689DvxM95bZm6rq6dUqoKo+BHwo\nycuBXwd+Zn6fJNPANMDWdXb1nySNkr5CIcnzgNcDE8AFZ8YWquqXF/m148AVPdOXd9sWVFWfTnJV\nkku7N9vrnTdDZ0+FyclJDzFJUkv6PXx0L/BZOjfIO93n7+wHtiW5kk4Y7ARu6u2Q5MeAL3UHmn8S\n+CvA1/tcviRplfUbCs+pqn+9nAVX1akktwL7gM3AXVX1cJKbu/PvBH4OeH2S7wHfAX6+Z+BZkrTG\n0s93cJJ/BZwAPgp890x7VX2jvdIWNjk5WXNzc2v9sZI01JIcqKrJpfr1u6fwDPBbwG6ePW20gKtW\nVp4kaT3qNxR+Ffix+QPAkqTR0u/FaweBk0v2kiQNtX73FP4SeCDJpzh7TGGxU1IlSUOm31D4cPdH\nkjTC+r2i+X1tFyJJGrxFQyHJPVX12iQPscDN6qrqmtYqkyStuaX2FN7SfX1124VIkgZv0bOPqurM\n7bF/qaoO9/4Av9R+eZKktdTvKak3LND2ytUsRJI0eEuNKdxCZ4/gqiQP9sx6LvB/2ixMkrT2lhpT\n+EPgY3QegtP7jOWnB3HfI0lSuxYNhar6FvAtYNfalCNJGqR+xxQkSRuAoSBJahgKkqSGoSBJahgK\nkqSGoSBJahgKknQ+ZmdhYgI2beq8zs4OuqLz0u/zFCRJ883OwvQ0nOw+mPLw4c40wNTU4Oo6D+4p\nSNJK7d79bCCccfJkp31IGQqStFJHjiyvfQgYCpK0Ulu3Lq99CBgKkrRSt98OY2Nnt42NddqHlKEg\nSSs1NQUzMzA+DknndWZmaAeZoeVQSLI9yWNJDia5bYH5U0keTPJQkj9N8pI265GkVTc1BYcOwenT\nndchDgRoMRSSbAbuoPOEtquBXUmuntftCeAfVNXfAn4dmGmrHknS0trcU7gOOFhVj1fVM8DdwI7e\nDlX1p1X1F93JzwKXt1iPJGkJbYbCZcDRnulj3bZz+UU6T3mTJA3IuriiOck/pBMK159j/jQwDbB1\niE/1kqT1rs09hePAFT3Tl3fbzpLkGuC9wI6q+vpCC6qqmaqarKrJLVu2tFKsJKndUNgPbEtyZZKL\ngJ3A3t4OSbYCHwReV1VfaLEWSVIfWjt8VFWnktwK7AM2A3dV1cNJbu7OvxN4O3AJ8K4kAKeqarKt\nmiRJi0tVDbqGZZmcnKy5ublBlyFJQyXJgX7+0+0VzZKkhqEgSWoYCpKkhqEgSWoYCpKkhqEgSWoY\nCpKkhqEgSWoYCpKkhqEgSWoYCpKkhqEgSWoYCpKkhqEgSWoYCpKkhqEgSWoYCpKkhqEgSWoYCpKk\nhqEgSWoYCpKkhqEgSWoYCpKkhqEgSWoYCpKkhqEgSfPNzsLEBGza1HmdnR10RWum1VBIsj3JY0kO\nJrltgfkvSvKZJN9N8m/arEWS+jI7C9PTcPgwVHVep6c3TDC0FgpJNgN3AK8ErgZ2Jbl6XrdvAL8M\n/HZbdUjSsuzeDSdPnt128mSnfQNoc0/hOuBgVT1eVc8AdwM7ejtU1ZNVtR/4Xot1SFL/jhxZXvuI\naTMULgOO9kwf67YtW5LpJHNJ5p566qlVKU6SFrR16/LaR8xQDDRX1UxVTVbV5JYtWwZdjqRRdvvt\nMDZ2dtvYWKd9A2gzFI4DV/RMX95tk6T1a2oKZmZgfBySzuvMTKd9A2gzFPYD25JcmeQiYCewt8XP\nk6RzW85pplNTcOgQnD7ded0ggQBwQVsLrqpTSW4F9gGbgbuq6uEkN3fn35nkR4E54K8Bp5P8CnB1\nVX27rbokbUBnTjM9c1bRmdNMYUN94fcjVTXoGpZlcnKy5ubmBl2GpGEyMdEJgvnGxzt7AhtAkgNV\nNblUv6EYaJak87LBTzNdDkNB0ujb4KeZLoehIGn0bfDTTJfDUJA0+jb4aabL0drZR5K0rkxNGQJ9\ncE9BktQwFCRJDUNBktQwFCQNrw38hLS2ONAsaTh564pWuKcgaTht8CektcVQkDScvHVFKwwFScPJ\nW1e0wlCQNJy8dUUrDAVJw8lbV7TCs48kDS9vXbHq3FOQtL547cFAuacgaf3w2oOBc09B0vrhtQcD\nZyhIWj+89mDgDAVJ7et3nMBrDwbOUJDUrjPjBIcPQ9Wz4wQLBYPXHgycoSCpXcsZJ/Dag4EzFCSt\nTL+HhJY7TjA1BYcOwenTnVcDYU0ZCpKe1e8X/XIOCTlOMFRaDYUk25M8luRgktsWmJ8k/607/8Ek\nP9lmPdK6t5wv5X4v8Grji345h4QcJxguVdXKD7AZ+BJwFXAR8OfA1fP6vAr4GBDgp4A/W2q51157\nbS1lzy331fjmoxW+X+Obj9aeW+6z7yJ9B/359j3TcU/tufCNNc4Tnb48UXsufGPVnj0r67fcvuPj\ntYddZ/dlV9X4+A/2TRbum5z/n9eezkcmndeFSh31vstZZr+Auernu7ufTiv5Af4usK9n+m3A2+b1\n+T1gV8/0Y8ALF1vuUqGw55b7aowT1fmvTudnjBML/iW07+A/3749fS9588J9L3nzivotuy83LdyX\nm85vuXuqxsbq7L5j58ywDd93OctcjvUQCjcC7+2Zfh3wu/P6fBS4vmf6k8DkYstdKhTGNx896w/z\nzM/45qP2XaDvoD/fvj19eWLhvjyxon7L7rucWi95euG+lzz9g33Hf7AfLLwDYt/lLXM5+g2FdPqu\nviQ3Atur6l90p18HvKyqbu3p81HgN6rqT7rTnwTeWlVz85Y1DXRvgMKLgc+f+5Ovvfbc8w4cWN99\nnwK2rHENo7pea9XXbdZeDW31Xe/rtpxlnuVS4GuLzB+vqi2LzAfavSHeceCKnunLu23L7UNVzQAz\nAEnmqmpydUtdHzrrdnjk1m1U1wtGd91Gdb1gdNdttb4b2zz7aD+wLcmVSS4CdgJ75/XZC7y+exbS\nTwHfqqovt1iTJGkRre0pVNWpJLcC++iciXRXVT2c5Obu/DuBe+mcgXQQOAn887bqkSQtrdXnKVTV\nvXS++Hvb7ux5X8CblrnYmVUobb0a1XUb1fWC0V23UV0vGN11W5X1am2gWZI0fLzNhSSpMVShsNRt\nM4ZVkkNJHkryQJK5pX9j/UpyV5Ink3y+p+2Hk/xxki92X58/yBpX6hzr9o4kx7vb7oEkrxpkjSuR\n5Iokn0rySJKHk7yl2z7U222R9RqFbfacJJ9L8ufddfsP3fbz3mZDc/goyWbgC8ANwDE6ZzftqqpH\nBlrYKkhyiM5Fe4udYzwUkrwcOAG8v6pe3G37TeAbVfUb3TB/flW9dZB1rsQ51u0dwImq+u1B1nY+\nkryQzp0E7k/yXOAA8E+BNzLE222R9Xotw7/NAlxcVSeSXAj8CfAW4J9xnttsmPYUrgMOVtXjVfUM\ncDewY8A1aZ6q+jTwjXnNO4D3dd+/j84/zKFzjnUbelX15aq6v/v+aeBR4DKGfLstsl5Dr3uR8onu\n5IXdn2IVttkwhcJlwNGe6WOMyAamszE/keRA9+rtUfOCnutPvgK8YJDFtODN3bv83jVsh1jmSzIB\n/G3gzxih7TZvvWAEtlmSzUkeAJ4E/riqVmWbDVMojLLrq+qlwCuBN3UPU4yk7mnIw3HMsj/vpnMn\n4JcCXwb+62DLWbkkfxX4APArVfXt3nnDvN0WWK+R2GZV9f3u98blwHVJXjxv/oq22TCFQl+3xBhG\nVXW8+/ok8CE6h8pGyVe7x3fPHOd9csD1rJqq+mr3H+dp4D0M6bbrHpf+ADBbVR/sNg/9dltovUZl\nm51RVd8EPgVsZxW22TCFQj+3zRg6SS7uDoKR5GLgH7PoDf+G0l7gDd33bwA+MsBaVtWZf4Bdr2EI\nt1130PL3gUer6p09s4Z6u51rvUZkm21J8rzu+x+icwLO/2UVttnQnH0E0D117Hd49rYZQ//opiRX\n0dk7gM4V5n84zOuV5L8Dr6Bzx8avAv8e+DBwD7AVOAy8tqqGbsD2HOv2CjqHIQo4BPzLYbt/V5Lr\ngfuAh4DT3eZ/R+f4+9But0XWaxfDv82uoTOQvJnOf+7vqar/mOQSznObDVUoSJLaNUyHjyRJLTMU\nJEkNQ0GS1DAUJEkNQ0GS1DAUJEkNQ0GS1DAUpPOUZCLJo0ne0723/ce7V5lKQ8dQkFbHNuCOqvoJ\n4JvAzw24HmlFDAVpdTxRVQ903x8AJgZYi7RihoK0Or7b8/77dO5jJQ0dQ0GS1DAUJEkN75IqSWq4\npyBJahgKkqSGoSBJahgKkqSGoSBJahgKkqSGoSBJahgKkqTG/wfcadOMYLc2RwAAAABJRU5ErkJg\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1e64afc2eb8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"outputs": [],
"source": [
"%matplotlib inline\n",
"from matplotlib import pyplot as plt\n",
...
...
%% Cell type:markdown id: tags:
# CO202 - Algorithms 2
%% Cell type:markdown id: tags:
## Tutorial on Dynamic Programming: Fibonacci
%% Cell type:markdown id: tags:
### Naive Divide-and-Conquer Approach
%% Cell type:code id: tags:
```
python
def
naive_fib
(
n
):
if
n
==
0
:
return
0
elif
n
==
1
:
return
1
else
:
return
naive_fib
(
n
-
1
)
+
naive_fib
(
n
-
2
)
print
(
naive_fib
(
10
))
%
timeit
naive_fib
(
10
)
```
%%%% Output: stream
55
54.9 µs ± 10.4 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%% Cell type:markdown id: tags:
### Bottom-up Dynamic Programming Approach
%% Cell type:code id: tags:
```
python
def
dp_fib
(
n
):
if
n
==
0
:
return
0
f
=
[
0
]
*
(
n
+
1
)
f
[
0
]
=
0
f
[
1
]
=
1
for
i
in
range
(
2
,
n
+
1
):
f
[
i
]
=
f
[
i
-
1
]
+
f
[
i
-
2
]
return
f
[
n
]
print
(
dp_fib
(
10
))
%
timeit
dp_fib
(
10
)
```
%%%% Output: stream
55
4.13 µs ± 285 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%% Cell type:markdown id: tags:
### Comparison
%% Cell type:markdown id: tags:
#### Timer
%% Cell type:code id: tags:
```
python
import
time
def
time_f
(
f
):
before
=
time
.
clock
()
f
()
after
=
time
.
clock
()
return
after
-
before
```
%% Cell type:markdown id: tags:
#### Test data
%% Cell type:code id: tags:
```
python
#data = range(1,20)
data
=
range
(
1
,
30
)
#data = range(1,1000,10)
#data = range(1,10000,100)
#data = range(1,100000,1000)
```
%% Cell type:markdown id: tags:
#### Running Divide-and-Conquer
%% Cell type:code id: tags:
```
python
tdc
=
[]
for
i
in
data
:
tdc
.
append
(
time_f
(
lambda
:
naive_fib
(
i
)))
```
%% Cell type:markdown id: tags:
#### Running Dynamic Programming
%% Cell type:code id: tags:
```
python
tdp
=
[]
for
i
in
data
:
tdp
.
append
(
time_f
(
lambda
:
dp_fib
(
i
)))
```
%% Cell type:markdown id: tags:
#### Plot DC vs DP
%% Cell type:code id: tags:
```
python
%
matplotlib
inline
from
matplotlib
import
pyplot
as
plt
plt
.
scatter
(
data
,
tdc
,
c
=
'red'
)
plt
.
scatter
(
data
,
tdp
,
c
=
'blue'
)
plt
.
xlabel
(
'n'
)
plt
.
ylabel
(
'time (/s)'
)
plt
.
xlim
(
0
)
plt
.
ylim
(
0
)
```
%%%% Output: execute_result
(0, 0.6281491025812429)
%%%% Output: display_data
%% Cell type:code id: tags:
```
python
```
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment