Created
December 20, 2019 19:15
-
-
Save jonkrohn/9d8802220a065efdaa8d3000a73c403c to your computer and use it in GitHub Desktop.
big-O-notation.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "big-O-notation.ipynb", | |
"provenance": [], | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/jonkrohn/9d8802220a065efdaa8d3000a73c403c/big-o-notation.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "ubj0d3gCOzGX", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Big O Notation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "rR7kFMg3PSDT", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import time" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "DMLnnWCbO3QA", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### Constant Time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "BlnfRyUwO16k", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"def take_first(my_list):\n", | |
" return my_list[0]" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Y5PIzM-4WoG-", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"short_list = [13, 25, 42]" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "3nHVIFonMGBp", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"tic = time.clock()\n", | |
"first = take_first(short_list)\n", | |
"toc = time.clock()" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_Np65K7yXPFl", | |
"colab_type": "code", | |
"outputId": "f9461fae-66b0-4a3a-f972-981c527df48e", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"first" | |
], | |
"execution_count": 5, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"13" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 5 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "P0owpiPEPHuL", | |
"colab_type": "code", | |
"outputId": "6824bb7c-afab-4c60-8c13-55c7303d75a8", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"toc-tic" | |
], | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"6.0999999999866716e-05" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "AvyPjweCRfYB", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"long_list = [42] * 10**8 # one hundred million items" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "eEyXwNVBTOKq", | |
"colab_type": "code", | |
"outputId": "01eb3a80-8834-468b-fd44-c51d199be53e", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"len(long_list)" | |
], | |
"execution_count": 8, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"100000000" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 8 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Q-3OdxzwRHHy", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"tic = time.clock()\n", | |
"first = take_first(long_list)\n", | |
"toc = time.clock()" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "eYfVVpq0XSBJ", | |
"colab_type": "code", | |
"outputId": "6b361403-e068-4c66-d110-7d2641b17b95", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"first" | |
], | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"42" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "wKMsVOQRTbxc", | |
"colab_type": "code", | |
"outputId": "a580c33f-3041-443d-eb9a-563c1a400cef", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"toc-tic" | |
], | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"5.999999999994898e-05" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_7lYwANvX55t", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "8305c6a9-11c2-4262-dbf3-606ee61186cd" | |
}, | |
"source": [ | |
"list_lengths = [10**l for l in range(1, 8)]\n", | |
"list_lengths" | |
], | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[10, 100, 1000, 10000, 100000, 1000000, 10000000]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "j0igW42mY4cn", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"constant_times = []\n", | |
"\n", | |
"for l in list_lengths:\n", | |
" lst = [42]*l\n", | |
" \n", | |
" tic = time.clock()\n", | |
" x = take_first(lst)\n", | |
" toc = time.clock()\n", | |
" \n", | |
" constant_times.append(toc-tic)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "6i2ND8bCemLw", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import pandas as pd" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "DuX_4N5VengR", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 269 | |
}, | |
"outputId": "5783572b-044d-443f-e382-acb402274df5" | |
}, | |
"source": [ | |
"constant_df = pd.DataFrame(list(zip(list_lengths, constant_times)), columns=['N', 'time'])\n", | |
"constant_df" | |
], | |
"execution_count": 15, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>N</th>\n", | |
" <th>time</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10</td>\n", | |
" <td>0.000004</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>100</td>\n", | |
" <td>0.000001</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>1000</td>\n", | |
" <td>0.000001</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>10000</td>\n", | |
" <td>0.000002</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>100000</td>\n", | |
" <td>0.000002</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>1000000</td>\n", | |
" <td>0.000005</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>10000000</td>\n", | |
" <td>0.000010</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" N time\n", | |
"0 10 0.000004\n", | |
"1 100 0.000001\n", | |
"2 1000 0.000001\n", | |
"3 10000 0.000002\n", | |
"4 100000 0.000002\n", | |
"5 1000000 0.000005\n", | |
"6 10000000 0.000010" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 15 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "2ACF9H30UUEl", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### Linear Time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "2CnMr4wwV2Oj", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"def find_max(my_list):\n", | |
" max_value = my_list[0]\n", | |
" for i in range(len(my_list)):\n", | |
" if my_list[i] > max_value:\n", | |
" max_value = my_list[i]\n", | |
" return max_value" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "-q39XMCyTci3", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"tic = time.clock()\n", | |
"largest = find_max(short_list)\n", | |
"toc = time.clock()" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "2lWTIzxoXlPc", | |
"colab_type": "code", | |
"outputId": "07f7dc02-738a-4c8d-ed7e-267ec3f71c45", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"largest" | |
], | |
"execution_count": 18, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"42" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 18 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "LAspDSQwX2t_", | |
"colab_type": "code", | |
"outputId": "da9004c9-0671-450e-f5e3-35a0c2549229", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"toc-tic" | |
], | |
"execution_count": 19, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"9.400000000026054e-05" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 19 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "kJnXPyMbbpoF", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"tic = time.clock()\n", | |
"largest = find_max(long_list)\n", | |
"toc = time.clock()" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_PIJp3c4bx1t", | |
"colab_type": "code", | |
"outputId": "9c49928b-82b8-4806-ef25-7a5922f92b75", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"largest" | |
], | |
"execution_count": 21, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"42" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 21 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "RlrrPljvbyhm", | |
"colab_type": "code", | |
"outputId": "2fcffab1-1175-44b1-9906-ac5a91414adb", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
} | |
}, | |
"source": [ | |
"toc-tic" | |
], | |
"execution_count": 22, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"5.187785999999999" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 22 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "fmtWD8C6bK0z", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"linear_times = []\n", | |
"\n", | |
"for l in list_lengths:\n", | |
" lst = [42]*l\n", | |
" \n", | |
" tic = time.clock()\n", | |
" x = find_max(lst)\n", | |
" toc = time.clock()\n", | |
" \n", | |
" linear_times.append(toc-tic)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_fdLU4f5d-n1", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 269 | |
}, | |
"outputId": "71c8eaa5-0ca5-4987-cd8d-3892954b04e2" | |
}, | |
"source": [ | |
"linear_df = pd.DataFrame(list(zip(list_lengths, linear_times)), columns=['N', 'time'])\n", | |
"linear_df" | |
], | |
"execution_count": 24, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>N</th>\n", | |
" <th>time</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10</td>\n", | |
" <td>0.000013</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>100</td>\n", | |
" <td>0.000005</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>1000</td>\n", | |
" <td>0.000054</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>10000</td>\n", | |
" <td>0.000492</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>100000</td>\n", | |
" <td>0.005183</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>1000000</td>\n", | |
" <td>0.050999</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>10000000</td>\n", | |
" <td>0.511218</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" N time\n", | |
"0 10 0.000013\n", | |
"1 100 0.000005\n", | |
"2 1000 0.000054\n", | |
"3 10000 0.000492\n", | |
"4 100000 0.005183\n", | |
"5 1000000 0.050999\n", | |
"6 10000000 0.511218" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 24 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "BY5mPpYWfCxj", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import seaborn as sns" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "eA_6v8hreSpH", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 369 | |
}, | |
"outputId": "a466d8c3-d0a4-43ff-8205-440573720103" | |
}, | |
"source": [ | |
"_ = sns.lmplot(x='N', y='time', data=linear_df, ci=None)" | |
], | |
"execution_count": 26, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nRK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 360x360 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "8S7JZLW7UbBz", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"#### Polynomial Time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "cXQMBEPlplpZ", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"def element_multiplier(my_list): \n", | |
" for i in range(len(my_list)):\n", | |
" for j in range(len(my_list)):\n", | |
" x = my_list[i] * my_list[j]" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "0h1VeAaSqYNv", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "ff9015b1-73c3-4be8-e247-cc108338d04b" | |
}, | |
"source": [ | |
"list_lengths" | |
], | |
"execution_count": 28, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[10, 100, 1000, 10000, 100000, 1000000, 10000000]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 28 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "5OlX1YyirN48", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "a8426a41-e717-411d-a30e-809952f5b6f8" | |
}, | |
"source": [ | |
"list_lengths[:4] # compute time gets annoyingly long from list_lengths[5] onward" | |
], | |
"execution_count": 29, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[10, 100, 1000, 10000]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 29 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "6j6cAuMltFqW", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "57b6f80e-a461-4ba9-823d-f59b3aaf3e17" | |
}, | |
"source": [ | |
"granular_list_lengths = list_lengths[:4] + [50, 500, 5000]\n", | |
"granular_list_lengths" | |
], | |
"execution_count": 30, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[10, 100, 1000, 10000, 50, 500, 5000]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 30 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "YPDXf8DVtYyk", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"granular_list_lengths.sort()" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "v0hlQ1bEtdA7", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "f6b4484b-a9bd-4470-ca85-cd82d1948355" | |
}, | |
"source": [ | |
"granular_list_lengths" | |
], | |
"execution_count": 32, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[10, 50, 100, 500, 1000, 5000, 10000]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 32 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "M7TmUgtrrSJR", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"poly_times = []\n", | |
"\n", | |
"for l in granular_list_lengths:\n", | |
" lst = [42]*l\n", | |
"\n", | |
" tic = time.clock()\n", | |
" x = element_multiplier(lst)\n", | |
" toc = time.clock()\n", | |
"\n", | |
" poly_times.append(toc-tic)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "iFaVujgXrsKz", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 269 | |
}, | |
"outputId": "dc4ae453-1e95-47be-d87f-913cb79d4dc1" | |
}, | |
"source": [ | |
"poly_df = pd.DataFrame(list(zip(granular_list_lengths, poly_times)), columns=['N', 'time'])\n", | |
"poly_df" | |
], | |
"execution_count": 34, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>N</th>\n", | |
" <th>time</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10</td>\n", | |
" <td>0.000021</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>50</td>\n", | |
" <td>0.000173</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>100</td>\n", | |
" <td>0.000673</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>500</td>\n", | |
" <td>0.018461</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>1000</td>\n", | |
" <td>0.075228</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>5000</td>\n", | |
" <td>1.946877</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>10000</td>\n", | |
" <td>7.775681</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" N time\n", | |
"0 10 0.000021\n", | |
"1 50 0.000173\n", | |
"2 100 0.000673\n", | |
"3 500 0.018461\n", | |
"4 1000 0.075228\n", | |
"5 5000 1.946877\n", | |
"6 10000 7.775681" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 34 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "GLmzSaMYsgeb", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 369 | |
}, | |
"outputId": "dd2ce52d-18f8-45f3-a6a3-a9ea3bc6ba42" | |
}, | |
"source": [ | |
"_ = sns.lmplot(x='N', y='time', data=poly_df, ci=None, order=2)" | |
], | |
"execution_count": 35, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 360x360 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "mpl4mIzzUuI6", | |
"colab_type": "text" | |
}, | |
"source": [ | |
" #### In Big O notation: \n", | |
"\n", | |
" * constant: O(1)\n", | |
" * linear: O(N)\n", | |
" * polynomial: O(N**2) \n", | |
" \n", | |
"\n", | |
" #### Others\n", | |
"\n", | |
"* logarithmic: O(log N)\n", | |
"* exponential: O(2**N)\n", | |
"* O(N log N)\n", | |
"* O(N!) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "xHaG3z18VSFw", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment