2022-2023/1NSI/09_Recherche_par_dichotomie.../Complexite_recherche_dichot...

2 lines
12 KiB
Plaintext
Raw Normal View History

{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Temps d'exécution et complexité\n\nDans ce TP, vous allez chercher à évaluer la rapidité d'exécution de différents programmes.\n\n## Recherche d'élément\n\n1. 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"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Tests","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Fonction\ndef chercher(liste, nombre):\n pass","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"On voudra tester votre fonction sur des grandes listes de nombre construites aléatoirements avec le module `random`."},{"metadata":{"trusted":true},"cell_type":"code","source":"from random import randint\n# import de la fonction randint dans le module random","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(randint(1, 10))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Le résultat est un nombre aléatoire entre 1 et 10.\n\nLes listes seront construites de la manière suivante"},{"metadata":{"trusted":true},"cell_type":"code","source":"liste_aleatoire = [randint(0, 200) for i in range(1000)]\nprint(liste_aleatoire)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"2. Vérifier que votre fonction `chercher` fonctionne avec des listes aléatoires à 10, 100, 1000 et 1000 nombres entre 0 et 100."},{"metadata":{"trusted":true},"cell_type":"code","source":"# 10 nombres","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 100 nombres","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 1000 nombres","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 10000 nombres","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","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."},{"metadata":{"trusted":true},"cell_type":"code","source":"from time import time\n# import de la fonction time dans le module time","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(time())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"le résultat est le nombre de secondes écoulée depuis le 1 janvier 1970.\n\n3. 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\nCombien de temps prend la commande `cherche([1, 7, 8, 3, 9, 3], 9)` à s'exécuter?"},{"metadata":{"trusted":true},"cell_type":"code","source":"t = time()\nchercher([1, 7, 8, 3, 9, 3], 9)\nprint(time() - t)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"4. Combien de temps met votre fonction pour chercher un nombre dans une liste de 10 nombres? 100 nombres? 1000nombres? 10 000 nombres?"},{"metadata":{"trusted":true},"cell_type":"code","source":"# 10 nombres","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 100 nombres","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 1000 nombres","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 10000 nombres","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","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