import random def search1(taille): L=range(taille) nb=random.randint(L[0],L[taille-1]) for elt in L: if elt == nb : return "Trouvé"
Compléter la fonction ci-dessous. Cette fonction prend en paramétre un nb taille (taille d'une liste) et renvoie le temps mis pour exécuter 100 fois la fonction search1(taille)
import time def repeat_search1(taille): time1=time.time() return temps
Compléter la fonction liste_time_search1(taille_max) qui prend en paramétre un nombre taille_max et qui renvoie une liste telle que :
L=[] L.append(repeat_search1(1)) L.append(repeat_search1(2)) L.append(repeat_search1(3)) ... L.append(repeat_search1(1000))
def liste_time_search1(taille_max): L=[] return L
Executer le code ci-dessous avec taille_max = 1000 et 2000 puis en déduire la compléxité de cet algorithme de recherche.
import pylab def complexite1(taille_max): abscisses = [i for i in range(1,taille_max)] ordonnees=liste_time_search1(taille_max) pylab.title('Recherche par balayage') pylab.xlabel('taille de la liste') pylab.ylabel('temps en secondes') pylab.grid() pylab.plot(abscisses,ordonnees,label="balayage") pylab.legend() pylab.show()
Expliquer la présence des nombreux pics.
Apporter les modifications necessaires pour traiter le balayage dans le pire des cas.
def search2(taille): L=range(taille) nb=random.randint(L[0],L[taille-1]) gauche=0 droite=taille-1 while gauche < droite: milieu=(gauche+droite)//2 if L[milieu] < nb: gauche=milieu+1 else : droite=milieu return L[gauche]
Construire le graphique illustrant la compléxite en temps de l'algorithme de recherche par dichotomie.
Aide : Reprendre la démarche du paragraphe ci-dessus.
Completer le code ci-dessous de façon à pourvoir comparer (sous la forme d'un graphique) la complexité en temps des deux algorithmes de recherche.
def comparer_complexite(taille_max): ordonnees_liste1= # Mettre la liste optenu avec la méthode "Recherche séquentielle" ordonnees_liste2= # Mettre la liste optenu avec la méthode "Recherche dichotomique" abscisses = [i for i in range(1,taille_max)] pylab.title('Recherche par balayage V.S dichotomie') pylab.xlabel('taille des listes') pylab.ylabel('temps en secondes') pylab.grid() pylab.plot(abscisses,ordonnees_liste1,label="balayage ") pylab.plot(abscisses,ordonnees_liste1,label="dichotomique") pylab.legend() pylab.show()
Par exemple :
def mon_algo(L): if len(L)==0 or len(L)==1: return None L.sort() min=L[0] for elt in L: if elt != min: return elt return None