Informatique TD/ TP 4.1
(Correction de la partie TD)
Tri par insertion
Lycée Jules Ferry Cannes Page 1 sur 2 TSI1
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.
>>> recherche
f (L1,1)
True
itération init 1 2 3 4 5
v
2 3 1
s False
Fals
e
Fals
e
True
>>> recherche
w (L1,1)
True
itération init 1 2 3 4 5
n
5 5 5 5
c
0
0 1 2
T[c]
2 3 1
s
False
Fals
e
Fals
e
True
2) Comparer les 2 algorithmes en terme de complexité temporelle dans le pire des cas 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 recherche_dichotomique du cours 4.1 et une liste L2
contenant les entiers 0 à 4 qui renvoie True si 0 est dans la liste. Quelle doit être la condition sur la
liste L2 pour son utilisation avec la fonction recherche_dichotomique. Combien d'itérations
sont nécessaires pour obtenir ce résultat (tracer le tableau d'évolution des variables)?
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
k
4//2=2
2//2=1
1//2=0
T[k]
2 1 0
g 0
0 0 0
d 4
2 1 0
2 itérations nécessaire (3 au pire) pour 5 éléments
4) Comparer cet algorithme en terme de complexité temporelle (nombre d'itérations dans le pire des cas)
et en mémoire avec les 2 premiers algorithmes pour une liste à 5 éléments.
Taille mémoire similaire (2 ou 3 variables)
Complexité dans le pire des cas : dichotomie : 3 (< log2(5)+1) while : 5
Complexité dans tous les cas du for : 5 itérations
Informatique TD/ TP 4.1 Tri par insertion
Lycée Jules Ferry Cannes Page 2 sur 2 TSI2
2 Tri par insertion
On donne les algorithmes suivant
Algorithme Tri par insertion
Entrées : liste T (tableau de n nombres; n 2)
Sortie : liste T triée par ordre croissant
Pour i de 1 à n-1 faire
xT[i]
j i
Tant que j> 0 et T[j-1] > x faire
T[j]T[j-1]
j j-1
Fin Tant que
T[j]x
Fin Pour
Renvoyer T
Fin de Tri par insertion
def Tri_insertion (T):
# Entrée : liste T de n nombres (n 2)
# Sortie : liste T triée par ordre croissant
n = len(T)
for i in range(1,n): # tri de T
x = T[i]
j = i # j : position triée pour x
while j>0 and T[j-1] > x :
T[j] = T[j-1]
j = j - 1
T[j] = x
return T
5) Convertir l'algorithme donné sous forme de pseudo code en une fonction Tri_insertion en python.
6) 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-2] = [t[0], t[1]…t[n-2]] qui est trié
7) 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,3,5,1,4]
On insère t[3] = 1 dans t[0 : 3]
t=[1, 2,3,5,4]
On insère t[4] = 4 dans t[0 : 4]
t=[1,2,3,4,5]
8) 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 … à droite
t = [7, 10, 21, 31, 31, 45, 8, 1]
On décale la valeur …. à droite
t = [7, 10, 21, 21, 31, 45, 8, 1]
On place la valeur….
t = [7, 10, 11, 21, 31, 45, 8, 1]
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !