Informatique Cours S1.10 Algorithmes et listes
Lycée Jules Ferry Cannes Page 1 sur 5 TSI1
Lorsque l'on souhaite stocker puis traiter un ensemble de valeurs d'une grandeur, le format
d'enregistrement à adopter est la liste.
Il faut être ensuite capable de traiter les données stockées dans les listes.
Les algorithmes présentés dans ce cours doivent être connu. Ils pourront être adapté selon le type
des données stockées.
1 Recherche dans une liste
Des instructions permettent de savoir si un élément est dans une liste :
Exemple :
>>> liste = [10, 30, 0]
>>> 30 in liste
True
L'algorithme de recherche d'un élément dans une liste s'arrête dès que la valeur est trouvée :
boucle conditionnelle while
Algorithme Recherche de x dans L
Entrées : élément x et liste L
Sortie : s=Vrai si x est dans L et Faux sinon
n Nombre d'éléments de L
s Faux
c 0
Tant que (c < n et s=Faux) Faire
Si L[c]=x alors
s Vrai
c c+1
Fin tant que
Renvoyer s
Fin de l'algorithme Recherche de x dans L
def recherche (L,x):
# Entrées : élément x et liste L
# Sortie : s=True si x dans L et False sinon
n = len (L)
s = False # s : Faux par défaut
c = 0 # initialisation de l'indexe
while (c<n and s==False):
if L[c]==x :
s = True
c = c+1
return s
Appel de la fonction recherche:
>>> liste = [10, 30, 0]
>>> recherche (liste,30)
True
abscisses liste x
ordonnées liste y courbe = tracé de y
en fonction de x
Informatique Cours S1.10 Algorithmes et listes
Lycée Jules Ferry Cannes Page 2 sur 5 TSI1
Adaptation de l'algorithme en fonction du type d'éléments à trouver :
- avec des flottants : l'égalité de l'instruction conditionnelle pourra être utilement remplacée
par une inégalité : abs(L[c]-x) < seuil # abs : fonction valeur absolue.
- pour la recherche d'un mot dans une chaine de caractères, il faudra adapter l'expression :
o du test de l'instruction conditionnelle : L[c:c+len(x)]
o du test de la boucle conditionnelle : c < (n-len(x)+1) and s==False
2 Recherche du maximum dans une liste
La fonction max est implémentée dans python pour déterminer le maximum d'une liste.
>>> liste = [10, 30, 0]
>>> max(liste)
30
L'algorithme de recherche du maximum s'arrête une fois que toutes les valeurs de la liste ont été
scrutées :
boucle inconditionnelle for.
Algorithme Maximum
Entrées : liste L
Sortie : s : valeur maximum de L
n Nombre d'éléments de L
s L[0]
Pour i variant de 0 à n-1 par incrément 1faire
Si L[i]>s alors
s L[i]
Fin Si
Fin Pour
Renvoyer s
Fin de Maximum
def maximum (L):
# Entrée : liste L
# Sortie : s : valeur maximum de L
n = len(L)
s = L[0]
for i in range(n):
if L[i]>s:
s=L[i]
return s
Appel de la fonction maximum :
>>> liste = [10, 30, 0]
>>> maximum(liste)
30
Remarque :
Cet algorithme fonctionne également avec la recherche d'un caractère dans une chaine de
caractères puisque l'on peut comparer chaque valeur de caractère du codage UTF8.
Informatique Cours S1.10 Algorithmes et listes
Lycée Jules Ferry Cannes Page 3 sur 5 TSI1
3 Moyenne des valeurs d'une liste
Pour obtenir la moyenne des valeurs d'une liste, on en fait la somme que l'on divise par le nombre
d'éléments :  




La moyenne fait intervenir l'ensemble des valeurs de L :
boucle inconditionnelle for.
Algorithme Moyenne
Entrées : liste L
Sortie : moyenne des éléments de L
n Nombre d'éléments de L
som L[0]
Pour i variant de 1 à n-1 par incrément 1faire
som som + L[i]
Fin Pour
Renvoyer som/n
Fin de Moyenne
def moyenne (L):
# Entrée : liste L de nombres
# Sortie : moyenne des éléments de L
n = len(L)
som = L[0]
for i in range(1,n):
som = som + L[i]
return som/n
Appel de la fonction moyenne :
>>> moyenne(liste)
20
Remarque : cette algorithme fonctionne aussi avec d'autres opérations statistiques pourvu
d'adapter les opérations à effectuer avec chaque terme.
Exemple pour la variance (écart à la moyenne) :  


 
def variance (L):
# Entrée : liste L de nombres
# Sortie : variance des éléments de L
n = len(L)
som = L[0]**2
for i in range(1,n):
som = som + L[i]**2
return som/n - moyenne(L)**2
Informatique Cours S1.10 Algorithmes et listes
Lycée Jules Ferry Cannes Page 4 sur 5 TSI1
4 Recherche dans un tableau trié
Dans le cas d'un tableau trié, un algorithme de recherche par dichotomie est statistiquement plus
rapide qu'un algorithme itératif depuis la première valeur de la liste jusqu'à la !
"
valeur.
L'idée de l'algorithme de recherche par dichotomie dans une liste triée est de diviser par 2 la taille
de la liste à chaque itération.
On utilise ainsi 3 pointeurs de liste :
- pointeur gauche
g : début de la liste
,
- pointeur droit
d : fin de la liste
,
- pointeur du milieu
k=(g+d)/2
.
La recherche est terminée lorsque le pointeur gauche et le pointeur droit sont égaux :
g=d
Algorithme Recherche dichotomique
Entrées : élément x et liste L
Sortie : s=Vrai si x est dans L et Faux sinon
n Nombre d'éléments de L
g 0
d n-1
k (g+d) div 2
Tant que g#$ d Faire
Si L[k]<x Alors
g k+1
Sinon :
Si L[k]>x Alors
d k
Sinon :
d k
g k
Fin Si
k (g+d) div 2
Fin Tant que
Si L[g]=x Alors
s True
Sinon
s False
Fin Si
Renvoyer s
Fin de Recherche dichotomique
def Recherche_dichotomique (L,x):
# Entrée : liste L, x élément cherché
# Sortie : s=True si x dans L et False sinon
n=len(L)
g=0 # premier indice de L : 0
d=n-1 # dernier indice de L : n-1
k=(g+d)//2 # dichotomie
while g!=d:
if L[k]<x: # x est à droite du milieu
g=k+1
else:
if L[k]>x: # x est à gauche du milieu
d=k
else: # x est au milieu
g=k
d=k
k=(g+d)//2
if L[g]==x: # Affectation de la sortie
s=True
else:
s=False
return s
Appel de la fonction Recherche_dichotomique :
>>> liste_triee=[10, 30, 0]
>>> Recherche_dichotomique(liste_triee,30)
True
Un algorithme itératif nécessite au plus
n
itérations (valeur trouvée au dernier élément de la liste)
Un algorithme par dichotomie nécessite au plus
%&
'(
itérations ()
*
+  , )
*
)
Exemple pour 10 000 éléments : %&
'-....( -/ itérations…c'est plus rapide que 10000.
Références : Patrick Beynet –UPSTI-
Informatique Cours S1.10 Algorithmes et listes
Lycée Jules Ferry Cannes Page 5 sur 5 TSI1
ANNEXE : Opération sur les listes
Listes à une dimension ou chaines de caractères
Opération
Python
Résultats
A=[2,4,6,8]
B=[1,3,11,7,9]
Résultats
A="abcd"
B="efg"
Déterminer le nombre d’éléments de A
len(A)
4 4
Afficher l’élément 3 de B
B[2]
11 "c"
Afficher le 2e élément en partant de la fin de B
B[
-
2]
7 "c"
Extraire les éléments 1 à 3
B[1:4]
[3,11,7] "abc"
Concaténer (ajouter) A et B
A
+
B
[2,4,6,8, 1,3,11,7,9] "abcdefg"
Multiplication de A par 2
A*2 [ 2,4,6,8, 2,4,6,8 ] "abcabc"
Vérifier si 1 est dans A
in A
True False
Spécifique aux listes à une ou plusieurs dimensions
Remplacer 3e élément de B par 9
B[2]=9
Afficher l'élément ligne i colonne j
C
[
]
[ j ]
1 / 5 100%