Info-PCSI2 4 - Algorithme sur les listes 1. Sommes des éléments d’une liste : Entrée : une liste L N longueur de la liste Somme 0 Pour k allant de 0 à N - 1 faire Somme Somme + L(k) FindePour Afficher Somme Ce qui donne en Python N = len(L) Somme = 0 for k in range(N): Somme = Somme+L[k] Print(Somme) Ou bien, puisque les listes sont des itérateurs Somme = 0 for x in L: Somme = Somme + x Print(Somme) On peut aussi écrire une fonction : def somme(L): s = 0 for x in L: s = s + x return s 2 Recherche du maximum dans une liste : Entrée : une liste L N longueur de la liste Maximum L(0) Pour k allant de 1 à N-1 faire Si L(k) > maximum alors Maximum L(k) FindeSi FindePour Afficher Maximum Ce qui donne en Python N = len(L) Maximum = L[0] for k in range(1,N): if L[k] > Maximum: Maximum = L[k] Print(Maximum) Ou bien, puisque les listes sont des itérateurs Maximum = L[0] for x in L: if x > Maximum: Maximum = x Print(Maximum) On peut aussi écrire une fonction : def maximum(L) : m=L[0] for x in L: if x > m: m=x return m N. Véron-LMB-14-15 Info-PCSI2 3 Recherche d’un élément dans une liste Entrée : Une liste L, une valeur x N longueur de la liste Réponse Faux k 0 Tant que k < N et L(k) x k k+1 FindeTantque Si k ≤ N alors Réponse Vrai FindeSi Afficher réponse Ce qui donne en Python N = len(L) Rep = False k = 0 while k < N and x != L[k]: #très important le and est paresseux aussi le deuxième test n’est pas effectué si le premier est faux ce qui évite d’être en dehors des bornes de la liste k = k+1 if k < N Rep = True print(Rep) On peut aussi écrire une fonction et utiliser le fait que la commande return met fin à l’exécution du script. def recherche(L,x) : k=0 while k<len(L) : if L[k]==x: return true k=k+1 return false On peut aussi utiliser une boucle for puisque la commande return a l’effet d’un break def recherche(L,x) : for element in L: if L[k]==x: return true return false Au pire des cas, c’est à dire lorsque x n’est pas dans la liste, ce programme effectue N itérations. Pour faire mieux on propose de partir d’un tableau trié et de faire une recherche dichotomique. Entrée : L une liste triée, x une valeur Réponse Faux g 0 d longueur de la liste - 1 m le quotient de (a + b) par 2 Tant que g ≤ d et L[m] x faire Si x > L[m] g m+1 Sinon d m-1 FindeSi N. Véron-LMB-14-15 Info-PCSI2 m le quotient de (a+b) par 2 FindeTantque Si g ≤ d Réponse Vrai FindeSi Afficher Réponse On écrit une fonction Python en tenant compte des cas précédents: def recherche_dicho(x,L) g,d = 0, len(L)-1 while g ≤ d m = (g+d)//2 if L[c]==x: return true elif L[c] < x: g = c+1 else: d = c-1 c=(a+b)//2 return false 4 Recherche d’un mot dans un texte Cela revient à rechercher une sous-liste dans une liste Entrée : Une liste L, un mot m N longueur de L M longueur de m i 0 Rep Faux Tant que i ≤ N – M faire j 0 Tant que j < M et L(i+j) = m(j) j j+1 FindeTantque Si j = M alors Rep Vraie i N–M+1 FindeSi i i+1 FindeTantque Afficher Rep N. Véron-LMB-14-15