{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Algo - Calculs de surface et autres calculs\n", "\n", "C'est l'histoire d'une boucle, puis d'une autre, puis enfin d'un couple de boucles, voire d'un tripl\u00e9."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Enonc\u00e9"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 1 : calcul de la surface d'un cercle\n", "\n", "On cherche \u00e0 \u00e9crire une fonction qui calcule la surface d'un cercle de rayon *r*."]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["def surface_cerle(r):\n", " # ...\n", " return 0."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### 1.1 En utilisant la constante pi"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "metadata": {}, "source": ["#### 1.2 Sans utiliser pi ni aucune autre fonction\n", "\n", "Donc juste des additions, des multiplications, des divisions. On a le droit aux boucles aussi."]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 2 : tri al\u00e9atoire\n", "\n", "On impl\u00e9mente le tri suivant (est-ce vraiment un tri d'ailleurs ?) :\n", "\n", "* Dans un tableau *T*, on tire deux \u00e9lements al\u00e9atoires *i < j*, si *T[i] > T[j]*, on les permute.\n", "* On s'arr\u00eate apr\u00e8s *n* tirages sans permutations."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Exercice 3 : petits calculs parfaits pour une machine\n", "\n", "On suppose que le tableau pr\u00e9c\u00e9dent est de taille *n=10*, l'algorithme pr\u00e9c\u00e9dent s'arr\u00eate apr\u00e8s *n* tirages sans permutations. Comment choisir *n* de telle sorte que le tableau finisse tri\u00e9 dans 90% des cas..."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## R\u00e9ponses"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### 1.1. calcul de la surface d'un cercle avec pi"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["78.53981633974483"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["from math import pi\n", "\n", "\n", "def surface_cercle(r):\n", " return r ** 2 * pi\n", "\n", "surface_cercle(5)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### 1.2. calcul de la surface d'un cercle sans pi ou autre fonction\n", "\n", "Une approche possible est probabiliste : on construit un estimateur de $\\pi$ en tirant al\u00e9atoirement des points dans un carr\u00e9 de c\u00f4t\u00e9 1. Si le point $P_i$ tombe dans le quart de cercle inscrit dans le carr\u00e9, on compte 1, sinon on compte 0. Donc:\n", "\n", "$$\\frac{1}{n} \\sum_{i=1}^n \\mathbb{1}_{\\Vert P_i \\Vert^2 \\leqslant 1} \\rightarrow \\frac{\\pi}{4}$$\n", "\n", "Ce ratio converge vers la probabilit\u00e9 pour le point $P_i$ de tomber dans le quart de cercle, qui est \u00e9gale au ratio des deux aires : $\\frac{\\pi r^2}{r^2}$ avec $ r=1$."]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["3.112"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["import numpy\n", "\n", "\n", "def estimation_pi(n=10000):\n", " rnd = numpy.random.rand(1000, 2)\n", " norme = rnd[:, 0] ** 2 + rnd[:, 1] ** 2\n", " dedans = norme <= 1\n", " dedans_entier = dedans.astype(numpy.int64)\n", " return dedans_entier.sum() / dedans.shape[0] * 4\n", "\n", "pi = estimation_pi()\n", "pi"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["77.8"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["def surface_cercle_pi(r, pi):\n", " return r ** 2 * pi\n", "\n", "surface_cercle_pi(5, pi)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### 2. tri al\u00e9atoire\n", "\n"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/plain": ["[0, 1, 2, 3, 3, 4, 5, 7, 8, 9, 10, 11]"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["def tri_alea(T, n=1000):\n", " T = T.copy()\n", " for i in range(0, n):\n", " i, j = numpy.random.randint(0, len(T), 2)\n", " if i < j and T[i] > T[j]:\n", " T[i], T[j] = T[j], T[i]\n", " return T\n", "\n", "tableau = [1, 3, 4, 5, 3, 2, 7, 11, 10, 9, 8, 0]\n", "tri_alea(tableau)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Et si *i > j*, on ne fait rien et c'est bien dommage."]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"text/plain": ["[0, 1, 2, 3, 3, 4, 5, 7, 8, 9, 10, 11]"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["def tri_alea2(T, n=1000):\n", " T = T.copy()\n", " for i in range(0, n):\n", " i = numpy.random.randint(0, len(T) - 1)\n", " j = numpy.random.randint(i + 1, len(T))\n", " if T[i] > T[j]:\n", " T[i], T[j] = T[j], T[i]\n", " return T\n", "\n", "tableau = [1, 3, 4, 5, 3, 2, 7, 11, 10, 9, 8, 0]\n", "tri_alea2(tableau)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le r\u00e9sultat n'est pas forc\u00e9ment meilleur mais il est plus rapide \u00e0 obtenir puisqu'on fait un test en moins."]}, {"cell_type": "markdown", "metadata": {}, "source": ["Et si on s'arr\u00eate quand cinq permutations al\u00e9atoires de suite ne m\u00e8nen \u00e0 aucune permutations dans le tableau."]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["[0, 1, 2, 3, 3, 4, 5, 7, 8, 9, 10, 11]"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["def tri_alea3(T, c=100):\n", " T = T.copy()\n", " compteur = 0\n", " while compteur < c:\n", " i = numpy.random.randint(0, len(T) - 1)\n", " j = numpy.random.randint(i + 1, len(T))\n", " if T[i] > T[j]:\n", " T[i], T[j] = T[j], T[i]\n", " compteur = 0\n", " else:\n", " compteur += 1\n", " return T\n", "\n", "tableau = [1, 3, 4, 5, 3, 2, 7, 11, 10, 9, 8, 0]\n", "tri_alea3(tableau)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### 3. petits calculs parfaits pour une machine"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": ["def est_trie(T):\n", " for i in range(1, len(T)):\n", " if T[i] < T[i-1]:\n", " return False\n", " return True"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["0.81"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["def eval_c(n, c, N=100):\n", " compteur = 0\n", " for i in range(N):\n", " T = numpy.random.randint(0, 20, n)\n", " T2 = tri_alea3(T, c=c)\n", " if est_trie(T2):\n", " compteur += 1\n", " return compteur * 1. / N\n", "\n", "eval_c(10, 100)"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 10/10 [00:01<00:00, 5.77it/s]\n"]}, {"data": {"text/plain": ["[0.89, 0.91, 0.98, 0.96, 0.98]"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["from tqdm import tqdm # pour afficher une barre de d\u00e9filement\n", "\n", "cs = []\n", "ecs = []\n", "for c in tqdm(range(1, 251, 25)):\n", " cs.append(c)\n", " ecs.append(eval_c(10, c=c))\n", " \n", "ecs[-5:]"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "plt.plot(cs, ecs)\n", "plt.plot([0, max(cs)], [0.9, 0.9], '--');"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La r\u00e9ponse se situe aux alentours de 150, on ne peut pas dire pr\u00e9cis\u00e9ment car tout est al\u00e9atoire, on peut seulement estimer la distribution de ce r\u00e9sultat qui est aussi une variable al\u00e9atoire. Cette r\u00e9ponse d\u00e9pend de la taille du tableau \u00e0 tirer."]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": []}], "metadata": {"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.2"}}, "nbformat": 4, "nbformat_minor": 2}