{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Algo - les k premiers \u00e9l\u00e9ments\n", "\n", "Rechercher les k premiers \u00e9l\u00e9ments est un exercice classique d'algorithmie, souvent appel\u00e9 *top-k*et qu'on peut r\u00e9soudre \u00e0 l'aide d'un [algorithme de s\u00e9lection](https://fr.wikipedia.org/wiki/Algorithme_de_s%C3%A9lection). C'est tr\u00e8s utile en machine learning pour retourner les 3, 4, ou 5 premiers r\u00e9sultats d'un mod\u00e8le pr\u00e9dictif."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Enonc\u00e9\n", "\n", "On part d'une liste toute simple, une permutation al\u00e9atoire des premiers entiers. On conna\u00eet donc les *k* plus petits \u00e9l\u00e9ments qu'il faut obtenir."]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([17, 11, 18, 15, 3, 19, 8, 14, 4, 2, 16, 5, 9, 7, 1, 6, 10,\n", " 0, 13, 12])"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["import numpy\n", "perm = numpy.random.permutation(numpy.arange(20))\n", "perm"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 1 : on trie tout et on prend les k plus petit\n", "\n", "C'est la m\u00e9thode la plus simple mais pas la plus efficace."]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["def topk_sortall(ensemble, k):\n", " # \u00e0 vous\n", " # ...\n", " pass\n", "\n", "topk_sortall(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 2 : version plus rapide au choix\n", "\n", "A vois de choisir entre l'une et l'autre voire les deux si vous allez vite.\n", "\n", "**Id\u00e9e 1**\n", "\n", "On garde un tableau de *k* \u00e9l\u00e9ments tri\u00e9s *T*, on parcourt tous les \u00e9l\u00e9ments du tableau initial. Si l'\u00e9l\u00e9ment est plus petit que le plus grand des \u00e9l\u00e9ments dans le tableau *T*, on l'ajoute \u00e0 ce tableau de fa\u00e7on \u00e0 le garder trier. On continue jusqu'\u00e0 la fin et le tableau *T* est l'ensemble des *k* plus petits \u00e9l\u00e9ments.\n", "\n", "**Id\u00e9e 2**\n", "\n", "On d\u00e9coupe le tableau en $\\left[\\frac{n}{k}\\right]$ tableaux de taille *k* qu'on trie. On fusionne ensuite ces $\\left[\\frac{n}{k}\\right]$ pour garder ensuite les *k* plus petits \u00e9l\u00e9ments."]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["def topk_idee1ou2(ensemble, k):\n", " pass"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Vous avez aussi le droit de tricher pour une troisi\u00e8me id\u00e9e [Heap / Tas](http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx/notebooks/nbheap.html) mais il faudra vous d\u00e9brouiller tout seul."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 3 : algorithme de s\u00e9lection\n", "\n", "L'id\u00e9e est assez simple : on prend un \u00e9l\u00e9ment du tableau au hasard - le pivot - , on range \u00e0 droite tous les \u00e9l\u00e9ments sup\u00e9rieurs, \u00e0 gauche tous les \u00e9l\u00e9ments inf\u00e9rieurs. Si ce pivot se trouve \u00e0 la position *k* alors on a trouv\u00e9 les *k* plus petits \u00e9l\u00e9ments. Sinon, on sait o\u00f9 chercher."]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 4 : utiliser la fonction perf_counter pour comparer les vitessses de chaque solution\n", "\n", "Et bien s\u00fbr, il faudra expliquer pourquoi l'algorithme le plus rapide est bien le plus rapide. Faire varier la taille du tableau initial."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": ["from time import perf_counter"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "metadata": {}, "source": ["## R\u00e9ponses"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 1 : on trie tout et on prend les k plus petit\n", "\n", "Tr\u00e8s simple mais le co\u00fbt est en $O(n \\ln n)$ puisqu'il faut trier tous les \u00e9l\u00e9ments."]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([0, 1, 2, 3])"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["def topk_sortall(ensemble, k):\n", " ensemble = ensemble.copy()\n", " ensemble.sort()\n", " return ensemble[:k]\n", "\n", "topk_sortall(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Or trier tous les \u00e9l\u00e9ments n'est pas n\u00e9cessaire. On n'a pas besoin de trier tous les \u00e9l\u00e9ments apr\u00e8s la position *k*. Il est donc a priori envisageable de fairre mieux en ne faisant que les calculs n\u00e9cessaires."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 2 : version plus rapide au choix\n", "\n", "La premi\u00e8re id\u00e9e n'est pas une de celles propos\u00e9es mais elle est tr\u00e8s simple. Parmi les tris d\u00e9crits sur cette [interstices/tri](https://interstices.info/les-algorithmes-de-tri/), le tri par s\u00e9lection est int\u00e9ressant car il suffit d'effectuer les *k* premi\u00e8res it\u00e9rations pour retrouver les *k* plus petits \u00e9l\u00e9ments aux *k* premi\u00e8res positions."]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([0, 1, 2, 3])"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["def topk_tri_selection(ensemble, k):\n", " ensemble = ensemble.copy()\n", " for i in range(0, min(k, len(ensemble))):\n", " for j in range(i + 1, len(ensemble)):\n", " if ensemble[i] > ensemble[j]:\n", " ensemble[i], ensemble[j] = ensemble[j], ensemble[i]\n", " return ensemble[:k]\n", "\n", "topk_tri_selection(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le co\u00fbt de l'algorithme est en $O(kn)$.\n", "\n", "**id\u00e9e 1**"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["[0, 1, 2, 3]"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["def topk_insertion(ensemble, k):\n", " \n", " def position(sub, value):\n", " a, b = 0, len(sub) - 1\n", " m = (a + b) // 2\n", " while a < b:\n", " if value == sub[m]:\n", " return m\n", " if value < sub[m]:\n", " b = m - 1\n", " else:\n", " a = m + 1\n", " m = (a + b) // 2\n", " return m if sub[m] >= value else m + 1\n", " \n", " res = [ensemble[0]]\n", " for i in range(1, len(ensemble)):\n", " if ensemble[i] < res[-1]:\n", " # on ins\u00e8re selon un m\u00e9thode dichotomique\n", " p = position(res, ensemble[i])\n", " res.insert(p, ensemble[i])\n", " if len(res) > k:\n", " res.pop()\n", " \n", " return res\n", "\n", "\n", "topk_insertion(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le co\u00fbt de l'algorithme est dans le pire des cas $O(n * (\\ln k + k))$ :\n", "\n", "* *n* car il y *n* it\u00e9rations\n", "* $\\ln k$ car on recherche un \u00e9l\u00e9ment de fa\u00e7on dichotomique dans un tableau tri\u00e9\n", "* *k* car on ins\u00e8re un \u00e9l\u00e9ment dans un tableau en d\u00e9pla\u00e7ant tous les \u00e9l\u00e9ments plus grands\n", "\n", "Dans les faits, c'est un peu plus compliqu\u00e9 car le fait qu'on ait trouv\u00e9 un \u00e9l\u00e9ment plus petit \u00e0 la position $i$ que le plus grand d\u00e9j\u00e0 trouv\u00e9 n'est pas un \u00e9v\u00e9nement fr\u00e9quent si on suppose que le tableau est dans un ordre al\u00e9atoire. On pourrait m\u00eame dire que la probabilit\u00e9 de trouver un \u00e9l\u00e9ment faisant partie des *k* plus petits \u00e9l\u00e9ments est de plus en plus faible. On pourrait soit en rester l\u00e0, soit se dire qu'on souhaite un algorithme plus rapide encore m\u00eame dans le pire des cas qui serait pour cette version-ci un tableau tri\u00e9 dans le sens d\u00e9croissant. Dans ce cas, on sait que le prochain \u00e9l\u00e9ment fait toujours partie des $k$ plus petits \u00e9l\u00e9ments connus jusqu'\u00e0 pr\u00e9sent.\n", "\n", "On pourrait r\u00e9pondre \u00e0 cette question si on suppose que les \u00e9l\u00e9ments sont ind\u00e9pendants et tir\u00e9s selon la m\u00eame loi al\u00e9atoire."]}, {"cell_type": "markdown", "metadata": {}, "source": ["**id\u00e9e 2**\n", "\n", "L'id\u00e9e est un peu plus compliqu\u00e9e."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["[0, 1, 2, 3]"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["def topk_fusion(ensemble, k):\n", " n = len(ensemble) // (len(ensemble) // k)\n", " res = []\n", " last = 0\n", " while last < len(ensemble):\n", " res.append(last)\n", " last += n\n", " res.append(len(ensemble))\n", " \n", " subs = []\n", " for i in range(1, len(res)):\n", " sub = ensemble[res[i-1] : res[i]]\n", " sub.sort()\n", " subs.append(sub)\n", " \n", " indices = [0 for sub in subs]\n", " topk = []\n", " while len(topk) < k:\n", " arg = None\n", " for i, sub in enumerate(subs):\n", " if indices[i] < len(sub) and (arg is None or sub[indices[i]] < subs[arg][indices[arg]]):\n", " arg = i\n", " topk.append(subs[arg][indices[arg]])\n", " indices[arg] += 1\n", " \n", " return topk\n", " \n", "\n", "topk_fusion(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 3 : algorithme de s\u00e9lection\n", "\n", "Premi\u00e8re version par r\u00e9currence."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/plain": ["[3, 2, 1, 0]"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["def topk_select_recursive(ensemble, k):\n", " if len(ensemble) <= k:\n", " return ensemble\n", " p = ensemble[k]\n", " inf, sup = [], []\n", " for e in ensemble:\n", " if e > p:\n", " sup.append(e)\n", " else:\n", " inf.append(e)\n", " if len(inf) == k:\n", " return inf\n", " if len(sup) == 0:\n", " # potentiellement une boucle infinie, on change\n", " # le pivot de c\u00f4t\u00e9\n", " sup.append(p)\n", " del inf[inf.index(p)]\n", " if len(inf) >= k:\n", " return topk_select_recursive(inf, k)\n", " return inf + topk_select_recursive(sup, k - len(inf))\n", "\n", "\n", "topk_select_recursive(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Une seconde version sans r\u00e9currence."]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([0, 1, 2, 3])"]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["def topk_select(ensemble, k):\n", " ensemble = ensemble.copy()\n", " \n", " def loop(a, b, pivot):\n", " pivot_index = None\n", " while a < b:\n", " while a < len(ensemble) and ensemble[a] < pivot:\n", " a += 1\n", " while b >= 0 and ensemble[b] >= pivot:\n", " if ensemble[b] == pivot:\n", " pivot_index = b\n", " b -= 1\n", " if a < b:\n", " ensemble[a], ensemble[b] = ensemble[b], ensemble[a]\n", " return min(a, len(ensemble) - 1), pivot_index\n", " \n", "\n", " a = 0\n", " b = len(ensemble) - 1\n", " m = k\n", " while True:\n", " pivot = ensemble[m]\n", " m, pi = loop(a, b, pivot)\n", " if m == k:\n", " return ensemble[:m]\n", " # Les cas particuliers interviennent lorsque pivot choisi est\n", " # identique au pr\u00e9c\u00e9dent.\n", " if m > k:\n", " if b == m - 1:\n", " ensemble[b], ensemble[pi] = ensemble[pi], ensemble[b]\n", " b -= 1\n", " else:\n", " b = m - 1\n", " else:\n", " if a == m:\n", " ensemble[a], ensemble[pi] = ensemble[pi], ensemble[a]\n", " a += 1\n", " else:\n", " a = m\n", " m = k\n", "\n", " \n", "topk_select(perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 4 : utiliser la fonction perf_counter pour comparer les vitessses de chaque solution"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.0033986000000005845"]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["from time import perf_counter\n", "\n", "def measure_time(fct, perm, k, repeat=1000):\n", " t1 = perf_counter()\n", " for r in range(repeat):\n", " fct(perm, k)\n", " return perf_counter() - t1\n", "\n", "measure_time(topk_sortall, perm, 4)"]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.09221089999999954"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_tri_selection, perm, 4)"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.01921359999999961"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_insertion, perm, 4)"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.04859970000000047"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_fusion, perm, 4)"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.016174200000000027"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_select_recursive, perm, 4)"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.0986205"]}, "execution_count": 21, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_select, perm, 4)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La premi\u00e8re fonction est plus rapide surtout parce que le tri est impl\u00e9ment\u00e9 par une fonction du langage particuli\u00e8rement optimis\u00e9e (en C). Il faudrait impl\u00e9menter un tri en python pour pouvoir comparer."]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": ["perm10000 = numpy.random.permutation(numpy.arange(10000))"]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.0050952000000004105"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_sortall, perm10000, 40, repeat=10)"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"text/plain": ["1.6007581999999996"]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_tri_selection, perm10000, 40, repeat=10)"]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.10587389999999974"]}, "execution_count": 25, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_insertion, perm10000, 40, repeat=10)"]}, {"cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.1086203999999995"]}, "execution_count": 26, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_fusion, perm10000, 40, repeat=10)"]}, {"cell_type": "code", "execution_count": 26, "metadata": {"scrolled": false}, "outputs": [{"data": {"text/plain": ["0.03971849999999222"]}, "execution_count": 27, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_select_recursive, perm10000, 40, repeat=10)"]}, {"cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.09422410000001946"]}, "execution_count": 28, "metadata": {}, "output_type": "execute_result"}], "source": ["measure_time(topk_select, perm10000, 40, repeat=10)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Il faut faire tourner la fonction un grand nombre de fois sur diff\u00e9rentes tailles de *n* pour voir l'\u00e9volution."]}, {"cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 9/9 [00:09<00:00, 1.10s/it]\n"]}, {"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " k \n", " n \n", " topk_sortall \n", " topk_tri_selection \n", " topk_insertion \n", " topk_fusion \n", " topk_select_recursive \n", " topk_select \n", " \n", " \n", " \n", " \n", " 0 \n", " 100 \n", " 1000 \n", " 0.000754 \n", " 0.425342 \n", " 0.004273 \n", " 0.005617 \n", " 0.012390 \n", " 0.028960 \n", " \n", " \n", " 1 \n", " 150 \n", " 1000 \n", " 0.000244 \n", " 0.570124 \n", " 0.002137 \n", " 0.006894 \n", " 0.057368 \n", " 0.025287 \n", " \n", " \n", " 2 \n", " 200 \n", " 1000 \n", " 0.001304 \n", " 0.794225 \n", " 0.001893 \n", " 0.005902 \n", " 0.045107 \n", " 0.062032 \n", " \n", " \n", " 3 \n", " 250 \n", " 1000 \n", " 0.000666 \n", " 0.933013 \n", " 0.002037 \n", " 0.006944 \n", " 0.059049 \n", " 0.067764 \n", " \n", " \n", " 4 \n", " 300 \n", " 1000 \n", " 0.000625 \n", " 1.007520 \n", " 0.001996 \n", " 0.007394 \n", " 0.069228 \n", " 0.035983 \n", " \n", " \n", "
\n", "
"], "text/plain": [" k n topk_sortall topk_tri_selection topk_insertion topk_fusion \\\n", "0 100 1000 0.000754 0.425342 0.004273 0.005617 \n", "1 150 1000 0.000244 0.570124 0.002137 0.006894 \n", "2 200 1000 0.001304 0.794225 0.001893 0.005902 \n", "3 250 1000 0.000666 0.933013 0.002037 0.006944 \n", "4 300 1000 0.000625 1.007520 0.001996 0.007394 \n", "\n", " topk_select_recursive topk_select \n", "0 0.012390 0.028960 \n", "1 0.057368 0.025287 \n", "2 0.045107 0.062032 \n", "3 0.059049 0.067764 \n", "4 0.069228 0.035983 "]}, "execution_count": 29, "metadata": {}, "output_type": "execute_result"}], "source": ["from tqdm import tqdm\n", "from pandas import DataFrame\n", "\n", "perm1000 = numpy.random.permutation(numpy.arange(1000))\n", "res = []\n", "for k in tqdm(range(100, 501, 50)):\n", " obs = dict(k=k, n=perm1000.shape[0])\n", " for fct in [topk_sortall, topk_tri_selection, topk_insertion,\n", " topk_fusion, topk_select_recursive, topk_select]:\n", " obs[fct.__name__] = measure_time(fct, perm1000, k, repeat=10)\n", " res.append(obs)\n", "\n", "df = DataFrame(res)\n", "df.head()"]}, {"cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [{"data": {"image/png": "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z5IlSzAYDGWeW9k23333HU8++SQWi4Xg4GDeffdd3njjDQwGAx9++CGvvvoqP/zwAz4+Pvztb39jz549PPTQQ+Tm5tK2bVuWLl1KYGAgw4cPp3///mzatIn09HTeffddhgwZcj0/LiEahDMXcnj8031sP30RN6OLLcA08WJg26CSMNOiiTeRgZ54uBquvsN65NRhxx4WLlzIgQMH2LNnD2vWrOGNN95g7969pKWl0bdvX4YOHQrA9u3bOXToEC1btmTs2LF89tlnTJkyBYDk5GQmTpzIggULShqi8lasWMGYMWN46qmnsFgs5ObmkpiYyN///nd27txJYGAgN910E1988QW33XYbOTk5dOvWjWeffRaApUuXsmnTppLu/ueee44mTZpgsVgYNWoU+/bto0ePHvXwjgkh6tuBn85xKSmXm//QHYPRKeehETVQX+3UwoULWbx4Md988w0Ay5cv59dff2Xfvn00adKEuLi4Kut84403eOyxx7j77rspLCzEYrFw+PBhVq9ezdatW3F1deXhhx/mo48+KjPkrLJtxo0bx6xZs9i8eTOtW7fm4sWLNGnShIceeqgk3AD88MMPJfu65557ePXVVxk2bBjz5s1j/vz5vPTSS4Ctd2r79u18++23zJ8/n40bN17Xz0MIZ2a1at77NY5F3x3FaFAsmtKDKb0jcXFxnsk5nDrsVPXNVn3YsmUL06dPx2AwEBYWxrBhw9ixYwd+fn7069ePNm3aADB9+nS2bNnClClTMJlMjBo1itdee41hw4ZVuu++ffty//33YzKZuO2224iKiuLHH39k+PDhhISEAHD33XezefNmbrvtNgwGA7fffnul+/v444956623MJvNnD9/nkOHDknYEaIBys82seOb00R2CqRVDzn/zt4acjtVkdGjR9OkSZNqbTtw4ECee+45EhISmDx5Mu3bt+eHH35g586d9O3bF4C8vDxCQ0PLPK+ybX777TeGDh1acs2bq9WRkZFBenp6yWu89957ueOOO0oenzx5MgB9+vS5anAToiGKS8vhfz/dx/a4i4zoGMK/Jnenmb+nvcu6Zg4ZdpRSE4AJ7dq1s3cpVdJaV/pY+ekoi+8bjUb69OnD+vXrq2xEhg4dyubNm1m7di0zZszg8ccfx8/Pr9LtPTw8rujmL3b69GkWL17Mjh07CAwMZObMmXJdACEa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\n", "text/plain": [""]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1, 2, figsize=(14, 4))\n", "df.set_index('k').drop([\"n\", \"topk_tri_selection\"], axis=1).plot(\n", " logy=True, logx=True, title=\"Co\u00fbt en fonction de k\", ax=ax[0])\n", "df.set_index('k')[[\"topk_tri_selection\"]].plot(\n", " logy=True, logx=True, title=\"Co\u00fbt en fonction de k\", ax=ax[1]);"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Pas \u00e9vident, le langage est trop haut niveau et le co\u00fbt de l'interpr\u00e9teur gomme les aspects algorithmique. Il faudrait augmenter la taille du tableau \u00e0 trier ou affiner la mesure."]}, {"cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 5/5 [00:05<00:00, 1.19s/it]\n"]}, {"data": {"text/html": ["\n", "\n", "
\n", " \n", " \n", " \n", " k \n", " n \n", " topk_sortall \n", " topk_tri_selection \n", " topk_insertion \n", " topk_fusion \n", " topk_select_recursive \n", " topk_select \n", " \n", " \n", " \n", " \n", " 0 \n", " 10 \n", " 20 \n", " 0.000464 \n", " 0.001552 \n", " 0.000253 \n", " 0.000390 \n", " 0.000560 \n", " 0.001252 \n", " \n", " \n", " 1 \n", " 10 \n", " 100 \n", " 0.000301 \n", " 0.007772 \n", " 0.001735 \n", " 0.002594 \n", " 0.001299 \n", " 0.004708 \n", " \n", " \n", " 2 \n", " 10 \n", " 1000 \n", " 0.000406 \n", " 0.052845 \n", " 0.003583 \n", " 0.007324 \n", " 0.002064 \n", " 0.006233 \n", " \n", " \n", " 3 \n", " 10 \n", " 10000 \n", " 0.005089 \n", " 0.372522 \n", " 0.026215 \n", " 0.066013 \n", " 0.026855 \n", " 0.060124 \n", " \n", " \n", " 4 \n", " 10 \n", " 100000 \n", " 0.063857 \n", " 3.491449 \n", " 0.245375 \n", " 0.699281 \n", " 0.221890 \n", " 0.565102 \n", " \n", " \n", "
\n", "
"], "text/plain": [" k n topk_sortall topk_tri_selection topk_insertion topk_fusion \\\n", "0 10 20 0.000464 0.001552 0.000253 0.000390 \n", "1 10 100 0.000301 0.007772 0.001735 0.002594 \n", "2 10 1000 0.000406 0.052845 0.003583 0.007324 \n", "3 10 10000 0.005089 0.372522 0.026215 0.066013 \n", "4 10 100000 0.063857 3.491449 0.245375 0.699281 \n", "\n", " topk_select_recursive topk_select \n", "0 0.000560 0.001252 \n", "1 0.001299 0.004708 \n", "2 0.002064 0.006233 \n", "3 0.026855 0.060124 \n", "4 0.221890 0.565102 "]}, "execution_count": 31, "metadata": {}, "output_type": "execute_result"}], "source": ["res = []\n", "k = 10\n", "for n in tqdm([20, 100, 1000, 10000, 100000]):\n", " permn = numpy.random.permutation(numpy.arange(n))\n", " obs = dict(k=k, n=permn.shape[0])\n", " for fct in [topk_sortall, topk_tri_selection, topk_insertion,\n", " topk_fusion, topk_select_recursive, topk_select]:\n", " obs[fct.__name__] = measure_time(fct, permn, k, repeat=10)\n", " res.append(obs)\n", "\n", "df = DataFrame(res)\n", "df.head()"]}, {"cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": [""]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["df.set_index('n').drop([\"k\"], axis=1).plot(\n", " logy=True, logx=True, title=\"Co\u00fbt en fonction de n\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Les co\u00fbts paraissent lin\u00e9aires en *n*. Il faudrait cependant augmenter la taille encore car on sait que l'un d'entre eux ne l'est pas. Le co\u00fbt de l'interpr\u00e9teur python est l\u00e0-encore non n\u00e9gligeable. Il faudrait prendre des langages plus rapide ou plus bas niveau ou augmenter les tailles pour voir quelque chose d'int\u00e9ressant."]}, {"cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}}, "nbformat": 4, "nbformat_minor": 2}