L ES ALGORITHMES VUS EN COURS ET EN T D
OBJECTIF:L’objectif de ce tp est de rendre l’élève capable :
• concevoir un algorithme répondant à un problème précisément posé, en particulier :
◦ rechercher un élément dans une liste
◦ rechercher le maximum dans une liste de nombres
◦ calculer la moyenne et la variance d’un tableau de nombres
◦ rechercher un mot dans une chaîne de caractères
• traduire enPython, un algorithme en pseudocode
• comparer de façon expérimentale les vitesses de convergence de différents algorithmes
1 Les algorithmes du B.O. à connaître
Q - 1 :Programmer enPythonles algorithmes suivants.
REMARQUE:On pourra générer des tableaux denvaleurs dansNà l’aide de la bibliothèquerand. Par exemples, pour tableau den=nvalde valeurs prises entre 0 etnmax:
[r.randint(0,nmax) for i in range(nval)]
1.1 Indice du maximum
Algorithm 1Indice du maximum entrée:T un tableau denvaleurs
résultat:iMaxl’indice du maximum du tableau indiceMax(T)
1: n=taille(T)
2: iMax=i0
3: max←T[0]
4: pouri entre 1 et nfaire
5: siT[i]> maxalors
6: iMax←i
7: max←T[i]
8: fin si
9: fin pour
10: renvoi: iMax
1.2 Recherche dans un tableau
Algorithm 2Recherche dans un tableau
entrée:T un tableau de nvaleurs et x un élément (pas forcément du tableau)
résultat:-1 si x<T, l’indice de la première occur- rence de xdans le tableauT
recherche(T,x)
1: i←0
2: n←taille(T )
3: tant quei<n et T[i],xfaire
4: i←i+1
5: fin tant que
6: sii=nalors
7: i←-1
8: fin si
9: renvoi: i
LYCÉE CARNOT(DIJON) 1/3 INFO ENMPSI & PCSI - TP1 - ALGO-PROG-2
1.3 Moyenne et variance
Algorithm 3Moyenne et variance entrée:T un tableau denvaleurs résultat:Moy, la moyenne deT Var, la variance deT
MoyVar(T)
1: n←taille(T )
2: som←0
3: somCar←0.
4: pouri entre 0 et n-1faire
5: som←som+T[i]
6: somCar←somCar+T[i]2
7: fin pour
8: moy←som/n
9: renvoi: moy, somCar/n-moy2
1.4 Recherche dichotomique dans un tableau trié
Algorithm 4Recherche dichotomique dans un tableau trié
entrée:T un tableau denvaleurs etxun élément (pas forcément du tableau)
résultat:-1 si x<T, l’indice d’unxdans le tableauT
1: DichoSearch(T,x)
2: n←taille(T )
3: min,max,mil←0,n-1,(min+max)//2
4: tant quemin<max et T[mil],xfaire
5: siT[mil]<xalors
6: min←mil+1
7: sinon
8: max←mil-1
9: fin si
10: mil←(min+max)//2
11: fin tant que
12: siT[mil],xalors
13: rep←-1
14: sinon
15: rep←mil
16: fin si
17: renvoi: rep
1.5 Recherche d’un mot dans une chaîne de caractères
Algorithm 5Teste la présence d’un mot à partir d’une position dans une chaîne de caractères.
entrée:motetchainedeux chaînes de caractères, i, un indice
résultat:vraisimotcorrespond aux premiers ca- ractères de chaineà partir de l’indicei; f aux si- non
1: TestMot(mot,chaine,i)
2: j,m←0,taille(mot )
3: tant que j<m et mot [j]=chaine[i+j]faire
4: j←j+1
5: fin tant que
6: renvoi: j==m
Algorithm 6Recherche d’un mot dans une chaîne de caractères.
entrée:motetchainedeux chaînes de caractères résultat: l’indice de la première occurrence de motdanschaine; sinon -1
ChercheMot(mot,chaine)
1: i,n,m,pos,pastrouv←
0,taille(chaine),taille(mot),0,vrai
2: tant quei≤n-m et pastrouvfaire
3: pastrouv←non(TestMot(mot ,chaine, i ))
4: i←i+1
5: fin tant que
6: sipastrouvalors
7: i←-1
8: fin si
9: renvoi: i
LYCÉE CARNOT(DIJON) 2/3 INFO ENMPSI & PCSI - TP1 - ALGO-PROG-2
REMARQUE:Pour créer une chaîne aléatoire de caractères, on peut commencer à faire un mot contenant toutes les lettres de l’alphabet, puis prendre au hasard une lettre parmi les 26 pour composer le mot :
lettres="azertyuiopqsdfghjklmwxcvbn"
nmax=len(lettres)-1 MotdePass=""
for i in range(nval):
MotdePass+=lettres[r.randint(0,nmax)]
2 Les algorithmes du Td
Q - 2 :Résoudre enPythonles problèmes suivants :
2.1 Boucles inconditionnelles
• Factorielle(n): calculern!
• Puissance(x,n): calculer xn
• Somme(L): faire la somme des tous les éléments de la listeL
• Maximum(L): déterminer le maximum de la listeL
• Occurences(x,L): déterminer le nombre d’occurrences de xdansL
• Miroir(chaine): inverser l’ordre des lettres du motchaine
2.2 Boucles conditionnelles
Q - 3:Faire évoluer la taille n ∈n
101,102, . . . ,108o
des problèmes suivants et compter pour chaque algorithme le nombre total d’itérations avant convergence nit en fonction de n. Tracer l’évolution denit(n). Est-ce cohérent avec l’étude de la complexité ?
• PpPuissdedeux(n): déterminer la plus petite puissance de 2 majorant un entier natureln
• Palindrome(chaine): déterminer sichaineest un palindrome ou non
• IsFact(n): déterminer sinest une factorielle
LYCÉE CARNOT(DIJON) 3/3 INFO ENMPSI & PCSI - TP1 - ALGO-PROG-2