Informatique TD/ TP 4.1 Tri par insertion 1 Algorithme de recherche dans une liste 1) Compléter l'évolution des variables dans les tableaux suivants pour l'appel des fonctions avec les entrées L1 et 1. Inscrire aussi en dessus des tableaux l'instruction correspondant à la fonction ainsi que la valeur retournée en console. >>> recherchef (L1,1) >>> recherchew (L1,1) True True itération init 1 2 3 4 5 itération init 1 2 3 4 5 v 2 3 1 n 5 5 5 5 s False False False True c 0 T[c] s 0 1 2 2 3 1 False False False True 2) Comparer les 2 algorithmes en terme de complexité temporelle et en mémoire. C(n) = n boucles dans le pire des cas et C(n)=1 boucle dans le meilleur des cas (pour les 2 algorithmes). recherchew nécessite une variable en plus, ce qui n'est pas significatif car cela est indépendant de n. 3) Proposer une instruction avec la fonction dichotomie et une liste contenant les entiers 0 à 4 qui renvoie True si 1 est dans la liste. Combien d'itérations sont nécessaires pour obtenir ce résultat. L2=[0,1,2,3,4] # liste triée obligatoire pour l'algorithme de dichotomie print('dichotomie avec', L1, 'renvoie :', dichotomie (L2,1)). Evolution des variables : les valeurs sont dans l'ordre de modification dans la boucle. itération init 1 2 3 4 5 T[k] T[2] : 2 T[1] :1 g 0 0 1 d 4 2 1 k 4//2=2 2//2=1 1//2=0 2 itérations nécessaire (3 au pire) pour 5 éléments 4) Comparer cet algorithme en terme de complexité temporelle et en mémoire avec les 2 premiers algorithmes. C(n) = k itérations tel que = 1 (k divisions par 2 sont nécessaires pour aboutir à 1 seul élément) soit = = 2. log dans le pire des cas (1 absent de la liste ou situé à l'indexe 0 de L2). 2 Tri par insertion 5) Compléter la description suivante en décrivant la dernière itération. partant d’un tableau t de taille n ≥ 2 : on insère t[1] dans le sous-tableau t[0 : 1] = [t[0]] on insère t[2] dans le sous-tableau t[0 : 2] = [t[0], t[1]] (qui est trié) … on insère t[n-1] dans le sous-tableau t[0 : n-1] = [t[0], t[1]…t[n-2]] (qui est trié) Lycée Jules Ferry Cannes Page 1 sur 3 TSI1 Informatique TD/ TP 4.1 Tri par insertion 6) Compléter le tableau suivant qui décrit l'évolution du tri par l'algorithme Tri_insertion. Sur le tableau t = [5; 2; 3; 1; 4], l’algorithme est : t=[5,2,3,1,4] On insère t[1] = 2 dans t[0 : 1] t=[2,5,3,1,4] On insère t[2] = 3 dans t[0 : 2] t=[2,5,3,1,4] On insère t[3] = 1 dans t[0 : 3] t=[2,5,3,1,4] On insère t[4] = 4 dans t[0 : 4] t=[2,5,3,1,4] A chaque étape, l’insertion de t[i ] provoque la modification du sous-tableau t[0 : i ] : on décale certains éléments pour placer t[i ]. On fait des décalages vers la droite tant que l’élément t[j ] rencontré est supérieur à la valeur que l’on veut insérer. 7) Compléter le tableau suivant décrivant l'effet de l'algorithme. Préciser la séquence de l'algorithme qui produit les décalages vers la droite. Soit t = [7; 10; 21; 31; 45; 11; 8; 1] (de longueur n = 8). Pour insérer la valeur t[5] = 11 dans t[0 : 5] = [7; 10; 21; 31; 45]. On stocke la valeur 11 ailleurs t = [7; 10; 21; 31; 45;11; 8; 1] On décale la valeur 45 à droite t = [7; 10; 21; 31; 45;45; 8; 1] On décale la valeur 31 à droite t = [7; 10; 21; 31; 31;45; 8; 1] On décale la valeur 21. à droite t = [7; 10; 21; 21; 31;45; 8; 1] On place la valeur 11 t = [7; 10; 11; 21; 31;45; 8; 1] 8) La liste initiale est-elle triée après l'exécution de la fonction ? Justifier votre réponse. Oui la liste initiale est triée en fin de fonction car il s'agit d'un alias dans la fonction. Si on souhaite que la liste passée en entrée ne soit pas modifiée par la fonction, il faut refaire une affectation de la liste passée en entrée en début de fonction de tri : T = T[0:len(T)-1] T n'est plus alors un alias de la liste passée en entrée mais une liste contenant les valeurs de la liste passée en entrée. 9) Ecrire les instructions faisant appel à la bibliothèque numpy et qui permettent de récupérer les valeurs du fichier four.txt sous forme d'un tableau four. mes1 = genfromtxt ( 'four.txt', delimiter='\t') 10) Ecrire une fonction rapidite qui admet les mesures mes en entrées et qui renvoie en sortie le temps de réponse à 5%. Pour cela, on scrutera la valeur de la grandeur four à partir du dernier instant de mesure jusqu'à ce que la grandeur s atteigne 95% de sa valeur finale ou 105% de sa valeur finale. Lycée Jules Ferry Cannes Page 2 sur 3 TSI2 Informatique TD/ TP 4.1 Tri par insertion 11) Ecrire une fonction ecart qui détermine l'écart maximum entre 2 mesures successives de la grandeur physique four. 12) Ecrire une fonction valeurs qui admet les mesures et une valeur x en entrées. Cette fonction renvoie les instants où l'écart entre x et les valeurs de températures sont inférieures à l'écart maximum e constaté entre 2 températures successives (l'écart e est obtenu par la fonction portant ce nom; l'algorithme de recherche est l'algorithme while avec la comparaison abs(xT[c])<e pour signifier l'égalité des flottants oùT est la liste des températures). Lycée Jules Ferry Cannes Page 3 sur 3 TSI2