1 Algorithme de recherche dans une liste

publicité
TD/ TP 4.1 (Correction
Informatique
de la partie TD)
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
True
(L1,1)
True
itération
v
init
s
False
1
2
3
2
3
1
4
5
itération
n
init
1
2
3
5
5
5
5
c
0
0
1
2
2
3
1
Fals Fals True
e
e
T[c]
s
False
4
5
Fals Fals True
e
e
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
k
init
T[k]
g
0
d
4
1
4//2=2
2
0
2
2
3
4
5
2//2=1 1//2=0
1
0
0
0
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)
Complexité dans tous les cas du for : 5 itérations
Lycée Jules Ferry Cannes
Page 1 sur 2
while : 5
TSI1
Informatique
TD/ TP 4.1
Tri par insertion
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
x←T[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,
On décale la valeur …. à droite
On place la valeur….
Lycée Jules Ferry Cannes
8, 1]
t = [7, 10, 21, 21, 31, 45, 8, 1]
t = [7, 10, 11, 21, 31, 45, 8, 1]
Page 2 sur 2
TSI2
Téléchargement