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