1 Recherche dans une liste

publicité
Informatique
ordonnées
Cours S1.10
Algorithmes et listes
courbe = tracé de y
en fonction de x
liste y
abscisses
liste x
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
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
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
return s
Renvoyer s
Fin de l'algorithme Recherche de x dans L
Lycée Jules Ferry Cannes
Appel de la fonction recherche:
>>> liste = [10, 30, 0]
>>> recherche (liste,30)
True
Page 1 sur 5
TSI1
Informatique
Cours S1.10
Algorithmes et listes
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
def maximum (L):
# Entrée : liste L
# Sortie : s : valeur maximum de L
n = len(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
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
Renvoyer s
Fin de Maximum
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.
Lycée Jules Ferry Cannes
Page 2 sur 5
TSI1
Informatique
Cours S1.10
Algorithmes et listes
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.
def moyenne (L):
# Entrée : liste L de nombres
# Sortie : moyenne des éléments de L
n = len(L)
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
som = L[0]
for i in range(1,n):
som = som + L[i]
return som/n
Renvoyer som/n
Fin de Moyenne
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
Lycée Jules Ferry Cannes
Page 3 sur 5
TSI1
Informatique
Cours S1.10
Algorithmes et listes
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 (2* ≤ < 2* )
Exemple pour 10 000 éléments : % & (10000) = 14 itérations…c'est plus rapide que 10000.
Références : Patrick Beynet –UPSTILycée Jules Ferry Cannes
Page 4 sur 5
TSI1
Informatique
Cours S1.10
Algorithmes et listes
ANNEXE : Opération sur les listes
Listes à une dimension ou chaines de caractères
Opération
Déterminer le nombre d’éléments de A
Python Résultats A=[2,4,6,8] Résultats A="abcd"
B=[1,3,11,7,9]
B="efg"
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"
[ 2,4,6,8, 2,4,6,8 ]
"abcabc"
True
False
Multiplication de A par 2
Vérifier si 1 est dans A
A*2
2 in A
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 [ i ] [ j ]
Lycée Jules Ferry Cannes
Page 5 sur 5
TSI1
Téléchargement