{"cells": [{"cell_type": "markdown", "id": "61151cb3", "metadata": {}, "source": ["# R\u00e9partition, table de hashage\n", "\n", "Il est facile de r\u00e9partir des \u00e9l\u00e8ves en quatre groupe apr\u00e8s les avoir tri\u00e9s par ordre croissant, les \u00e9l\u00e8ves dont les noms de famille commencent par *A* dans le premier groupe et ainsi de suite... Cette r\u00e9partition peut poser un probl\u00e8me \u00e9thique parfois. \n", "On souhaite \u00e9crire une fonction de r\u00e9partition qui affecte les \u00e9tudiants dans un groupe parmi quatre :\n", "\n", "* Cette fonction prend comme entr\u00e9e le nom et le pr\u00e9nom.\n", "* Le r\u00e9sultat ne d\u00e9pend pas des autres noms pr\u00e9sents dans la classe.\n", "* Les groupes sont \u00e0 peu pr\u00e8s de taille identique."]}, {"cell_type": "code", "execution_count": 1, "id": "524109c6", "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": "code", "execution_count": 2, "id": "8a7f337b", "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "id": "de82ac75", "metadata": {}, "source": ["## Q1 - premi\u00e8re lettre\n", "\n", "Ecrire une fonction qui retourne la distribution la premi\u00e8re lettre de chaque personnage. Est-ce une distribution uniforme ?"]}, {"cell_type": "code", "execution_count": 3, "id": "57c7c276", "metadata": {}, "outputs": [], "source": ["personnages = \"\"\"\n", "Jean Valjean\n", "Cosette\n", "Fantine\n", "Marius Pontmercy\n", "Gavroche Th\u00e9nardier\n", "Antagonistes\n", "Javert\n", "Monsieur Th\u00e9nardier\n", "Madame Th\u00e9nardier\n", "Babet\n", "Claquesous\n", "Montparnasse\n", "Gueulemer\n", "Brujon\n", "Bamatabois\n", "Madame Victurnien\n", "Les Amis de l'ABC\n", "Enjolras\n", "Combeferre\n", "Courfeyrac\n", "Jean Prouvaire\n", "Feuilly\n", "Bahorel\n", "Lesgle\n", "Joly\n", "Grantaire\n", "Marius Pontmercy\n", "Personnages secondaires\n", "Amies de Fantine\n", "Favourite\n", "Dahlia\n", "Z\u00e9phine\n", "Amis de F\u00e9lix Tholomy\u00e8s\n", "Listolier\n", "Fameuil\n", "Blachevelle\n", "Autres\n", "Fauchelevent\n", "Mr Mabeuf\n", "Azelma Th\u00e9nardier\n", "Toussaint\n", "Luc-Esprit Gillenormand\n", "Georges Pontmercy\n", "\u00c9v\u00eaque Myriel\n", "Baptistine Myriel\n", "Mme Magloire\n", "Petit-Gervais\n", "\"\"\""]}, {"cell_type": "markdown", "id": "b82c6e09", "metadata": {}, "source": ["## Q2 - somme\n", "\n", "On \u00e9crit une fonction qui fait la somme des lettres (avec la fonction [ord](https://docs.python.org/3/library/functions.html?highlight=ord#ord) par exemple). On calcule ensuite la distribution du r\u00e9sultat modulo 26. Est-ce uniforme ?"]}, {"cell_type": "code", "execution_count": 4, "id": "d5de2740", "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "id": "efceff56", "metadata": {}, "source": ["## Q3 - pseudo g\u00e9n\u00e9rateur\n", "\n", "On s'inspire d'un [g\u00e9n\u00e9rateur congruentiel lin\u00e9aire](https://fr.wikipedia.org/wiki/G%C3%A9n%C3%A9rateur_congruentiel_lin%C3%A9aire).\n", "\n", "$X_{n+1} = (22695477 X_n + 1) \\mod 2^{32}$ qu'on transforme en $X_{n+1} = (22695477 (X_n + c_n) + 1) \\mod 2^{32}$ o\u00f9 $c_n$ est la n-\u00e9ni\u00e8me lettre du nom du personnage.\n", "\n", "On prendra comme r\u00e9sultat le dernier nombre de la s\u00e9rie $X_n >> 16$, le tout module 26. On calcule de nouveau la distribution."]}, {"cell_type": "code", "execution_count": 5, "id": "a27e2e08", "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "id": "0d09fd46", "metadata": {}, "source": ["## Q4 - hash\n", "\n", "On utilise un algorithme hashage impl\u00e9ment\u00e9 par la librairie [hashlib](https://docs.python.org/3/library/hashlib.html). On transforme chaque nom des personnages et on calcule la distribution de la premi\u00e8re lettre du *hash* obtenu."]}, {"cell_type": "code", "execution_count": 6, "id": "f5a37c91", "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "id": "dab17b45", "metadata": {}, "source": ["## Q5 - light hash\n", "\n", "On s'inspire de la page [Hash Functions](http://www.cse.yorku.ca/~oz/hash.html).\n", "\n", "```c\n", " unsigned long\n", " hash(unsigned char *str)\n", " {\n", " unsigned long hash = 5381;\n", " int c;\n", "\n", " while (c = *str++)\n", " hash = ((hash << 5) + hash) + c; /* hash * 33 + c */\n", "\n", " return hash;\n", " }\n", "```\n", "\n", "De nouveau calculer la distribution du hash obtenu."]}, {"cell_type": "code", "execution_count": 7, "id": "0d30cd10", "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "id": "8ce85c58", "metadata": {}, "source": ["## Q6 - r\u00e9partition\n", "\n", "Imagine une fa\u00e7on de r\u00e9partir des \u00e9l\u00e8ves en 4 groupes."]}, {"cell_type": "code", "execution_count": 8, "id": "1ae07b3f", "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "id": "8f780015", "metadata": {}, "source": ["## Q7 - dictionnaire\n", "\n", "Les dictionnaires en python s'appuient sur une table de hashage et non sur un arbre de recherche dichotomique (voir aussi son code : [taille de hash](https://github.com/python/cpython/blob/main/Objects/dictobject.c#L38)). Quelle exp\u00e9rience pourrait-on mener pour s'assurer ? Le module [timeit](https://docs.python.org/3/library/timeit.html) pourrait vous mettre sur la voie."]}, {"cell_type": "code", "execution_count": 9, "id": "5e20ff30", "metadata": {}, "outputs": [], "source": []}, {"cell_type": "markdown", "id": "ea06a6e1", "metadata": {}, "source": ["## Quelques \u00e9l\u00e9ments de r\u00e9ponses"]}, {"cell_type": "markdown", "id": "90ed3f2a", "metadata": {}, "source": ["### Premi\u00e8re lettre"]}, {"cell_type": "code", "execution_count": 10, "id": "6ea0c84e", "metadata": {}, "outputs": [{"data": {"text/plain": ["{'J': 4,\n", " 'C': 4,\n", " 'F': 5,\n", " 'M': 8,\n", " 'G': 4,\n", " 'A': 5,\n", " 'B': 6,\n", " 'L': 4,\n", " 'E': 1,\n", " 'P': 2,\n", " 'D': 1,\n", " 'Z': 1,\n", " 'T': 1,\n", " '\u00c9': 1}"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["d = {}\n", "for m in personnages.split(\"\\n\"):\n", " if len(m) == 0:\n", " continue\n", " if m[0] in d:\n", " d[m[0]] += 1\n", " else:\n", " d[m[0]] = 1\n", "d"]}, {"cell_type": "code", "execution_count": 11, "id": "ff417ac6", "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", "import pandas\n", "\n", "def draw(*ds_legends):\n", " fig, ax = plt.subplots(len(ds_legends) // 2, 1, figsize=(8, len(ds_legends)))\n", " i = 0\n", " while i < len(ds_legends):\n", " d = ds_legends[i].copy()\n", " for a in \"abcdefghijklmnopqrstuvwxyz\".upper():\n", " if a not in d:\n", " d[a] = 0\n", " legend = ds_legends[i+1]\n", " df = pandas.DataFrame(d.items(), columns=[\"L\", legend]).sort_values(\"L\").set_index(\"L\")\n", " df.plot.bar(ax=ax[i // 2] if len(ds_legends) > 2 else ax)\n", " i += 2\n", " return ax\n", " \n", "draw(d, \"lettre 1\");"]}, {"cell_type": "markdown", "id": "8d730fd8", "metadata": {}, "source": ["### Somme"]}, {"cell_type": "code", "execution_count": 12, "id": "bef8a69c", "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["def somme(mot):\n", " s = 0\n", " for c in mot.lower():\n", " s += ord(c) - ord(\"a\")\n", " return chr(s % 26 + ord(\"A\"))\n", "\n", "def repartition(fct):\n", " d = {}\n", " for m in personnages.split(\"\\n\"):\n", " if len(m) == 0:\n", " continue\n", " key = fct(m)\n", " if key in d:\n", " d[key] += 1\n", " else:\n", " d[key] = 1\n", " return d\n", "\n", "d2 = repartition(somme)\n", "draw(d, \"lettre 1\", d2, \"somme\");"]}, {"cell_type": "markdown", "id": "80e4390b", "metadata": {}, "source": ["### Pseudo"]}, {"cell_type": "code", "execution_count": 13, "id": "2bb73aae", "metadata": {}, "outputs": [{"data": {"image/png": "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52mafmQXZFJZtF7bltYJXKOACWZ2BFANbGdm/+PuJ+XO5O6zCJfco76+frPfVDU3N1NTU0NdXR3hqmnSyt1ZtWoVzc3NDBxY9A5wIiLSjaRymNrdp7l7rbvXEe53+Xh+IY5j3bp19O3bV4W4ADOjb9++OmogIlKByu7qPSrEbdO6ERGpTKkXY3d/othvjCW47LLLuOqqq7JOQ0REMlbW16aO82V/ElvqiQEiIlLeyu4wddaamprYe++9+epXv8o+++zDcccdxwcffMDUqVPZd999GTp0KBdccAEAK1eu5Nhjj2XEiBGMGDGCJ598Eth8j3fw4ME0NTUB8F//9V8MGjSIz372s7zwwgsb52lsbOSggw5i6NChHHPMMbzzToduGyoiIt2IinEBL7zwAt/61rdYvnw52223HTNmzOCXv/wlzz//PM899xwXX3wxAJMnT+bcc8/l2WefZfbs2Zx++untxl24cCF33303jY2NzJ07l2effXbjtJNPPpkf/OAHPPfccwwZMoTLL7+8U/9HEREpH2V9mDoru+yyC6NGjQLgpJNO4uqrr6a6uppvfOMbjB8/nvHjw1fijz76KMuWLdvYbvXq1axdu7bNuPPmzeOYY46hd+/eAEyYMAGA9957j3fffZdDDz0UgFNOOYWJEyd2yv8mIiLlR8W4gPyzlquqqnjmmWd47LHHuPfee7n++ut5/PHH+eijj5g/fz7V1dWbzN+zZ08++ujjC5Hp50giItIeHaYu4LXXXuOpp54C4M4772TYsGG89957HHHEEVxzzTUsXrwYgLFjxzJjxoyN7RobG4FwR6qGhgYAGhoaePXVVwEYPXo0999/Px9++CFr1qzhV7/6FQCf/OQn2WGHHZg3bx4At99++8a9ZBERqXzaMy5gr732YubMmZx22mnsu+++XH755YwfP55169bh7lx99dUAXHfddZx11lkMHTqUlpYWRo8ezY033sixxx7Lbbfdxn777ceBBx7IoEGDADjggAP4yle+wv7778+OO+7IiBEjNi7z1ltv5cwzz+SDDz5gt9124+abb87kfxcRka5n7ptdlbJL1NfXe/79jJcvX84+++yTST6tmpqaGD9+PEuXLs00j7aUwzoSqXS6hnLn0HoFM1vo7vX543WYWkREJGMqxnnq6urKdq9YREQqk4qxiIhIxsquGGf1HXZ3oHUj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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["def pseudo(mot):\n", " s = 0\n", " for c in mot.lower():\n", " n = ord(c) - ord(\"a\")\n", " s = (22695477 * (s + n) + 1) % 2 ** 32\n", " return chr(s % 26 + ord(\"A\"))\n", "\n", "d3 = repartition(pseudo)\n", "draw(d, \"lettre 1\", d2, \"somme\", d3, \"pseudo\");"]}, {"cell_type": "markdown", "id": "4547e7a0", "metadata": {}, "source": ["### Hash"]}, {"cell_type": "code", "execution_count": 14, "id": "0b447c75", "metadata": {}, "outputs": [{"data": {"image/png": "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bS2zZ89Oc/YiIiJlzczeLDQ87eNN44FFKccUERGpaKkV4+hU9VHA/6QVU0REZFOQZjf1VYSbChS6KDkAZjaOcOUVevdu8U5YIiKZqp34u6LTLJk8qh0yqSxari1LpRib2WjgXXefY2ZfbWk6d59GuMoPdXV1G5zGvWbNGhobG1m9enUaaVWcqqoqampq6NKlw10zREREWpHWnvFQ4HAzOwyoArY2s/919xOSBGlsbKS6upra2lrCVdOkmbuzfPlyGhsb6dOn6B3gRESkA0nlmLG7T3L3GnevJdzv8vGkhRhg9erV9OjRQ4W4ADOjR48e6jUQEalAZXf1HhXilmnZiIhUptSLsbs/Uew3xhL89Kc/5fLLL886DRERyVhZX5s6zpl3SWyqZ+mJiEh5K7tu6qwtWbKE3XffnX//939njz324JhjjuGTTz5h4sSJ7LnnngwYMIDzzjsPgGXLlnH00UczZMgQhgwZwlNPPQVsuMfbr18/lixZAsB///d/07dvX77yla/w8ssvr5umoaGB/fffnwEDBnDUUUfxwQdtum2oiIh0ICrGBbz88st8//vfZ9GiRWy99dZMmTKF3/72t7z44ou88MIL/OhHPwJg/PjxTJgwgeeff56ZM2dy6qmnthp3zpw53HXXXTQ0NDBr1iyef/75deNOOukkfvGLX/DCCy/Qv39/Lr744o36HkVEpHyUdTd1VnbccUeGDh0KwAknnMAVV1xBVVUV//Ef/8Ho0aMZPTocEn/00UdZuHDhunYrVqxg1apVLcZ98sknOeqoo+jWrRsAhx9+OAAfffQRH374IYcccggAJ598MmPGjNko701ERMqPinEB+Wctd+nSheeee47HHnuMe+65h2uuuYbHH3+czz77jGeeeYaqqqr1pu/cuTOfffb5fbL1cyQREWmNuqkLeOutt3j66acBuOOOOxg0aBAfffQRhx12GFdeeSXz5s0DYMSIEUyZMmVdu4aGBiDckaq+vh6A+vp63njjDQAOPvhg7rvvPj799FNWrlzJ//3f/wGwzTbbsN122/Hkk08CcPvtt6/bSxYRkcqnPeMCdtttN6ZOncopp5zCnnvuycUXX8zo0aNZvXo17s4VV1wBwNVXX82ZZ57JgAEDaGpq4uCDD+a6667j6KOP5rbbbmOvvfZiv/32o2/fvgDsvffefOc732HgwIFsv/32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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import hashlib\n", "\n", "def hash(mot):\n", " m = hashlib.sha256()\n", " m.update(mot.encode(\"utf-8\"))\n", " h = m.digest()\n", " s = h[0]\n", " return chr(s % 26 + ord(\"A\"))\n", "\n", "d4 = repartition(hash)\n", "draw(d, \"lettre 1\", d2, \"somme\", d3, \"pseudo\", d4, \"hash\");"]}, {"cell_type": "markdown", "id": "c31db4b6", "metadata": {}, "source": ["### Light hash"]}, {"cell_type": "code", "execution_count": 15, "id": "1589301a", "metadata": {}, "outputs": [{"data": {"image/png": "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3y48FnVTi4iIZEzFWERENhirV6/mjDPOYNddd+WQQw7h008/5eabb2bo0KEMHjyYo48+mk8+Cbdbv+eeexg4cCCDBw9m+PDhLTHefvttRowYwRe+8AUuuOCCVPJSMRYRkQ3GwoULOeuss3jxxRfZYostmDp1Kt/4xjd4/vnnmTNnDrvssgu33HILAJdddhl//OMfmTNnDg8++GBLjMbGRu6++27mzp3L3XffzZtvvtnuvFSMRURkg1FXV8eQIUMA2HPPPVm8eDHz5s3jK1/5CoMGDWLKlCm8+OKLAAwbNoxTTz2Vm2++mdWrV7fEOPDAA9l8882prq5mwIABvP56wXs/JKJiLCIiG4xu3bq1PO/SpQurVq3i1FNP5frrr2fu3LlcfPHFLb8Pvummm/jZz37Gm2++yZ577snSpUtbjdFeKsYiIrJBW7ZsGdtssw0rV65kypQpLcNfffVV9t57by677DL69u2bSnd0a/TTJhER6XDldJOMyy+/nL333pu+ffuy9957s2zZMgDOP/98Fi5ciLtz4IEHMnjwYBobG9dLDirGIiKyQaitrV3rN8Y//OEPW55/97vfXWf6++67b51hp556KqeeemrL64ceeiiV3NRNLSIikjEVYxERkYypGIuISIdw33BuY5/0f1UxFhGR9a66upqlS5duEAW5+X7G1dXVsefRCVwiIrLe1dTU0NTUxJIlS7JOpUNUV1dTU1MTe3oVYxERWe+qqqqoq6vLOo2ypW5qERGRjKkYi4iIZEzd1OtJnBtnF7sCTRoxykmx/yfO/5JGDKlslfa9qST6bFqnlrGIiEjGVIxFREQypmIsIiKSMRVjERGRjKkYi4iIZEzFWEREJGMqxiIiIhlTMRYREcmYirGIiEjGVIxFREQypmIsIiKSMRVjERGRjKkYi4iIZEzFWEREJGMqxiIiIhlTMRYREcmYirGIiEjGVIxFREQylloxNrPtzOxJM5tvZi+a2Zi0YouIiFSyrinGWgWc5+4NZtYTmGVmj7n7/BSXISIiUnFSaxm7+zvu3hA9XwYsALZNK76IiEilSrNl3MLMaoHdgWfzho8GRgP069dvfSya2nEPtzl+8YSR62W5la6S3tdi/wt0zP9TLnmUE70nsqFK/QQuM+sBTAXGuvtHuePcfbK717t7fd++fdNetIiISKeUajE2sypCIZ7i7vel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EytWJLqQkbShurqampoaqqo63U+bC6od93Cb4xdPGNlBmYhsWIp990Dfv/Yoq2Lc1NREz549qa2tJVyoRdrD3Vm6dClNTU3U1RW9UY2IiGSkrLqpV6xYQe/evVWIU2Jm9O7dWz0NIiJlrqyKMaBCnDK9nyIi5a/sirGIiMiGpqyOGeeLc8JAEnFOLujRowfLly/n7bff5gc/+AH33ntvrOnzPfDAA/Tv358BAwasM+7UU09l1KhRHHPMMfGTL6D5wil9+vRpVxwREcmWWsat+PznP1+0ELflgQceYP78+SlmJCIilUrFuBWLFy9m4MBwO+NPPvmE//iP/2DAgAEcddRR7L333mtdynP8+PEMHjyYffbZh3fffZenn36aBx98kPPPP58hQ4bw6quvrhP/L3/5C/vuuy877LBDS9Ffvnw5Bx54IHvssQeDBg3iD3/4AwAff/wxI0eOZPDgwQwcOJC77767Jc7EiRNbpn/ppbj3cBcRkXKiYhzDDTfcQK9evZg/fz6XX345s2bNahn38ccfs88++zBnzhyGDx/OzTffzL777svhhx/OlVdeSWNjIzvuuOM6Md955x3++te/8tBDDzFu3Dgg/Cb4/vvvp6GhgSeffJLzzjsPd+fRRx/l85//PHPmzGHevHmMGDGiJU6fPn1oaGjgu9/9LlddddX6fzNERCR1KsYx/PWvf+W4444DYODAgey2224t4zbeeGNGjRoFwJ577snixYtjxTzyyCPZaKONGDBgAO+++y4Qfhf84x//mN12242DDjqIt956i3fffZdBgwbx2GOP8aMf/YinnnqKzTffvCXON77xjcTLFhGR8qJi3E5VVVUtPx/q0qULq1atijVft27dWp4338ZyypQpLFmyhFmzZtHY2MjWW2/NihUr6N+/Pw0NDQwaNIiLLrqIyy67bJ04SZYtIiLlRcU4hmHDhvH73/8egPnz5zN37tyi8/Ts2ZNly5YlWs6HH37IVlttRVVVFU8++SSvvx7utPX222/TvXt3TjzxRM4//3waGhqS/xMiIlK2yvqnTeVyndPvfe97nHLKKQwYMICdd96ZXXfdda2u4kKOO+44zjjjDK677jruvffegseN851wwgl8/etfZ9CgQdTX17PzzjsDMHfuXM4//3w22mgjqqqquPHGG1P5v0REpDxYcxdpR6uvr/fcM5IBFixY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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["def light_hash(mot):\n", " mot = mot.encode(\"utf-8\")\n", " x = 5381\n", " for c in mot:\n", " x = ((x << 5) + x) + c\n", " return chr(x % 26 + ord(\"A\"))\n", "\n", "d5 = repartition(light_hash)\n", "draw(d, \"lettre 1\", d2, \"somme\", d3, \"pseudo\", d4, \"hash\", d5, \"light hash\");"]}, {"cell_type": "markdown", "id": "c587f86f", "metadata": {}, "source": ["### Q7\n", "\n", "Il faut mesurer l'acc\u00e8s \u00e0 des \u00e9l\u00e9ments d'un dictionnaire de diff\u00e9rentes tailles."]}, {"cell_type": "code", "execution_count": 16, "id": "770f0eae", "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3 (ipykernel)", "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.10.5"}}, "nbformat": 4, "nbformat_minor": 5}