Complexité
On peut utiliser le notebook pour mesurer le temps d'exécution de programmes, on va s'en servir pour vérfier en direct les complexités théoriques que nous avons vues en cours.
Pour mesurer le temps d'exécution, on utilise la commande time.
Un peu d'échauffement
sur le modèle de la fonction ci-dessous qui simule une complexité , écrivez des fonctions qui simulent les complexité , , , et . Vous n'avez besoin que de la multiplication et de l'addition.
Utiliser la commande time pour comparer les temps d'exécution pour valant 100, 1000, 10 000, 100 000, 1 000 000.
Recherche dichotomique
Compléter les deux fonctions suivantes qui effectue une recherche dans un tableau. Dans le second cas, on on suppose que le tableau est trié et on effectue donc une recherche dichotomique.
La fonction suivante retourne un tableau d'entiers alétoire de taille donnée (non trié).
Comme nous n'avons pas encore étudié les algorithmes de tris, nous allons utiliser la méthode sort de python comme ci dessous.
Ecrire une fonction qui prend en paramètre un entier et utilise random_tableau et sort pour retourner un tableau trié.
Dans les cellules suivantes, faites dans l'ordre pour chacune des tailles 100, 1000, 10 000, 1 000 000
Tirez un tableau trié de taille n
mesurez le temps de recherche classique pour une valeur quelconque
mesurez le temps de recherche dichotomique pour la même valeur (dans le même tableau !)
Vous pouvez recommencer plusieurs fois pour chacune des valeurs et observer les résultats
Comme python possède la fonction sort, on se dit que peut-être, on pourrait modifier la recherche dans les tableaux non triés pour d'abord trié le tableau puis effectuer une recherche dichotomique.
Complétez la fonction suivante
Comparez les performances de recherche et recherchePresqueDicho
Python a lui aussi une fonction de recherche implantée nativement
Comparez sur tableau trié / non trié les performances de vos différentes fonctions et de la fonction native de python.