diff --git a/1NSI/09_Recherche_par_dichotomie_et_complexite/Temps d'exécution.ipynb b/1NSI/09_Recherche_par_dichotomie_et_complexite/Temps d'exécution.ipynb new file mode 100644 index 0000000..4d3cfd9 --- /dev/null +++ b/1NSI/09_Recherche_par_dichotomie_et_complexite/Temps d'exécution.ipynb @@ -0,0 +1,556 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3dbe9854", + "metadata": {}, + "source": [ + "# Temps d'exécution et complexité\n", + "\n", + "Dans ce TP, vous allez chercher à évaluer la rapidité d'exécution de différents programmes.\n", + "\n", + "## Recherche d'élément\n", + "\n", + "1. Programmer et tester la fonction `chercher` qui prend en argument une liste de nombres et un nombre et qui renvoie si ce nombre est dans la liste" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68971c87", + "metadata": {}, + "outputs": [], + "source": [ + "# Tests" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "35634668", + "metadata": {}, + "outputs": [], + "source": [ + "# Fonction\n", + "def chercher(liste, nombre):\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab9adcbe", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "bd03de42", + "metadata": {}, + "source": [ + "On voudra tester votre fonction sur des grandes listes de nombre construites aléatoirements avec le module `random`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdda9aa6", + "metadata": {}, + "outputs": [], + "source": [ + "from random import randint\n", + "# import de la fonction randint dans le module random" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e6a937aa", + "metadata": {}, + "outputs": [], + "source": [ + "print(randint(1, 10))" + ] + }, + { + "cell_type": "markdown", + "id": "2935612a", + "metadata": {}, + "source": [ + "Le résultat est un nombre aléatoire entre 1 et 10.\n", + "\n", + "Les listes seront construites de la manière suivante" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9d32862", + "metadata": {}, + "outputs": [], + "source": [ + "liste_aleatoire = [randint(0, 200) for i in range(1000)]\n", + "print(liste_aleatoire)" + ] + }, + { + "cell_type": "markdown", + "id": "5d4e98c8", + "metadata": {}, + "source": [ + "2. Vérifier que votre fonction `chercher` fonctionne avec des listes aléatoires à 10, 100, 1000 et 1000 nombres entre 0 et 100." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ebf38f09", + "metadata": {}, + "outputs": [], + "source": [ + "# 10 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a57efc6", + "metadata": {}, + "outputs": [], + "source": [ + "# 100 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6279eb6d", + "metadata": {}, + "outputs": [], + "source": [ + "# 1000 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dc1c177d", + "metadata": {}, + "outputs": [], + "source": [ + "# 10000 nombres" + ] + }, + { + "cell_type": "markdown", + "id": "fad0261b", + "metadata": {}, + "source": [ + "On cherche maintenant à évaluer la rapidité d'exécution de votre fonction. Pour cela on utilisera le module `time` qui permet d'accéder au temps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08421e3c", + "metadata": {}, + "outputs": [], + "source": [ + "from time import time\n", + "# import de la fonction time dans le module time" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bf3e19cd", + "metadata": {}, + "outputs": [], + "source": [ + "print(time())" + ] + }, + { + "cell_type": "markdown", + "id": "92829a6b", + "metadata": {}, + "source": [ + "le résultat est le nombre de secondes écoulée depuis le 1 janvier 1970.\n", + "\n", + "3. Pour mesurer le temps d'exécution, on enregistre le temps avant l'exécution de la fonction puis on faire la différente avec le temps après l'exécution.\n", + "\n", + "Combien de temps prend la commande `cherche([1, 7, 8, 3, 9, 3], 9)` à s'exécuter?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "278f29e6", + "metadata": {}, + "outputs": [], + "source": [ + "t = time()\n", + "chercher([1, 7, 8, 3, 9, 3], 9)\n", + "print(time() - t)" + ] + }, + { + "cell_type": "markdown", + "id": "c1d58926", + "metadata": {}, + "source": [ + "4. Combien de temps met votre fonction pour chercher un nombre dans une liste de 10 nombres? 100 nombres? 1000nombres? 10 000 nombres?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c05e0ee0", + "metadata": {}, + "outputs": [], + "source": [ + "# 10 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75ff703a", + "metadata": {}, + "outputs": [], + "source": [ + "# 100 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8f6ebd2", + "metadata": {}, + "outputs": [], + "source": [ + "# 1000 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d19b52db", + "metadata": {}, + "outputs": [], + "source": [ + "# 10000 nombres" + ] + }, + { + "cell_type": "markdown", + "id": "e87c612a", + "metadata": {}, + "source": [ + "5. Le soucis de cette méthode est que l'on est pas à l'abris d'une liste \"facile\". Vous devez faire la même chose en calculant 5 fois le temps pour 5 listes différentes puis faire la moyenne des temps d'exécution. *(je vous encourage à programmer une fonction `moyenne` pour calculer cette moyenne)*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26d66477", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "66448c0a", + "metadata": {}, + "outputs": [], + "source": [ + "# 10 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a549e4e3", + "metadata": {}, + "outputs": [], + "source": [ + "# 100 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30bf2e23", + "metadata": {}, + "outputs": [], + "source": [ + "# 1000 nombres" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "994b1e70", + "metadata": {}, + "outputs": [], + "source": [ + "# 10000 nombres" + ] + }, + { + "cell_type": "markdown", + "id": "07144eae", + "metadata": {}, + "source": [ + "On va maintenant tracer le temps d'exécution en fonction de la taille de la liste.\n", + "\n", + "Pour cela, vous allez utiliser la librairy graphique `matplotlib`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c1834454", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2882fd2", + "metadata": {}, + "outputs": [], + "source": [ + "# taille des listes\n", + "x = [10, 100, 1000, 10000]\n", + "# Temps\n", + "t = [1, 2, 3, 4]\n", + "# le graphique\n", + "fig, ax = plt.subplots()\n", + "ax.plot(x, t)" + ] + }, + { + "cell_type": "markdown", + "id": "67489459", + "metadata": {}, + "source": [ + "6. Tracer le graphique des temps d'exécution de votre fonction `chercher`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d1f57ba", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "976edf11", + "metadata": {}, + "source": [ + "7. Comparer les temps " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f3c72341", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "899bea56", + "metadata": {}, + "source": [ + "## Fonction max\n", + "\n", + "On souhaite étudier le temps d'exécution d'une fonction `maximum`.\n", + "\n", + "1. Progammer et tester la fonction `maximum` qui prend en argument une liste de nombre et qui renvoie le plus grand élément de la liste." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a79511a2", + "metadata": {}, + "outputs": [], + "source": [ + "# Tests" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1cb5630c", + "metadata": {}, + "outputs": [], + "source": [ + "# Fonction" + ] + }, + { + "cell_type": "markdown", + "id": "d8e43d4f", + "metadata": {}, + "source": [ + "2. Mesurer le temps d'exécution de votre fonction sur des listes avec 10, 100, 1000, 10000 et 100000 nombres." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fec2675f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5fb9697", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "462ee355", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a1ca0ba6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8abf0381", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "eaaff40e", + "metadata": {}, + "source": [ + "3. Reprendre la question précédente en faisant la moyenne des temps d'exécution sur 5 listes pour chaque taille." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4dc8d464", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1b775dbe", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49807880", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "43933ce7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "321d4456", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "27a4391a", + "metadata": {}, + "source": [ + "4. Tracer le graphique de la moyenne de temps d'exécution en fonction de la taille des listes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0d4f074", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ce6c0a6e", + "metadata": {}, + "source": [ + "## Recherche par dichotomie.\n", + "\n", + "La recherche par dichotomie permet de grandement améliorer la vitesse de recherche d'un élément dans un liste. **À condition que cette liste soit triée en ordre croissant**.\n", + "\n", + "1. Chercher la meilleur stratégie pour gagner " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ebb87f94", + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/1NSI/09_Recherche_par_dichotomie_et_complexite/cherche_dich/plus_moins.html b/1NSI/09_Recherche_par_dichotomie_et_complexite/cherche_dich/plus_moins.html new file mode 100644 index 0000000..4b0de79 --- /dev/null +++ b/1NSI/09_Recherche_par_dichotomie_et_complexite/cherche_dich/plus_moins.html @@ -0,0 +1,61 @@ + + +
+ +Devinez un nombre entre 0 et + +
+ +Devinez un nombre entre 0 et + +
+ +