4 - Algorithme sur les listes 1. Sommes des éléments d`une liste

publicité
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
Téléchargement