Vous êtes sur la page 1sur 3

Exercices algorithmes

Exercice 1

Voici une algorithme permettant de savoir si un mot est un palindrome.

Algorithme Pour savoir si un mot est un palindrome


Fonction Palindrome(mot)
i ← 1 ; j ← taille de mot
Tant que i < j Faire
Si mot[i] ̸= mot[j] Alors
return Non
Fin Si
i←i + 1
j←j - 1
Fin Tant que
return Oui
Fin Fonction

1. Justifier la terminaison à l’aide d’un variant de boucle.


2. Justifier la correction à l’aide d’un invariant de boucle.
3. Déterminer la complexité en temps de cette algorithme.

Exercice 2
Voici un algorithme permettant de déterminer le PGCD de deux nombres a ⩾ 0 et b > 0 à l’aide de l’algorithme
d’Euclide.

Rappels :

♡ Théorème 1
Pour tous nombres entier naturel a et b ̸= 0, il existe un unique couple d’entiers (q ; r ) tels que

a = bq + r et 0 ⩽ r < b

q est le quotient de la division euclidienne de a par b .


r est le reste de la division euclidienne de a par b .

♡ Théorème 2
Pour tous nombres entier naturel a et b ̸= 0, on a :

PGCD(a ; b) = PGCD(b ; r )

où r est le reste de la division euclidienne de a par b .

Algorithme PGCD
Fonction PGCD(a, b)
r ← reste de a par b (div. eucl.)
Tant que r ̸= 0 Faire
a←b
b←r
r ← reste de a par b (div. eucl.)
Fin Tant que
return b
Fin Fonction
1. Justifier la terminaison à l’aide d’un variant de boucle.
2. Justifier la correction à l’aide d’un invariant de boucle.

Exercice 3
Déterminer la complexité des algorithmes suivants en fonction de m et de n qui sont des entiers positifs.
On choisira de compter le nombre d’itérations.

Algorithme 1
i ← 1; j ← 1
Tant que i ⩽ m et j ⩽ n Faire
i←i + 1
j←j + 1
Fin Tant que

Algorithme 2
i ← 1; j ← 1
Tant que i ⩽ m ou j ⩽ n Faire
i←i + 1
j←j + 1
Fin Tant que

Algorithme 3
i ← 1; j ← 1
Tant que j ⩽ n Faire
Si i ⩽ m Alors
i←i + 1
Sinon
j←j + 1
Fin Si
Fin Tant que

Algorithme 4
i ← 1; j ← 1
Tant que j ⩽ n Faire
Si i ⩽ m Alors
i←i + 1
Sinon
j←j + 1
i←1
Fin Si
Fin Tant que

Exercice 4
Écrire une fonction qui prend en entrée un tableau et un élément à rechercher dans le tableau et qui retourne
la position de la dernière occurrence de l’élément si celui-ci est présent dans le tableau et la taille du tableau
sinon.

Exercice 5
Écrire une fonction qui prend en entrée un tableau et qui retourne la liste des positions du minimum dans ce
tableau.
Exercice 6
Dans l’algorithme de la recherche dichotomique, que se passerait-il si
1. on remplace b ← m − 1 par b ← m ?
2. on remplace a ⩽ b par a < b ?

Exercice 7

1. Exécuter à la main le tri à bulles sur la liste suivante : [10, 2, 5, 7, 8, 9].


2. Que remarque-t-on ?
3. Proposer une version optimisée du tri à bulles.

Exercice 8
On se rend compte dans le tri à bulles, il y a des « tortues », c’est-à-dire des petits éléments situés près de la fin
de la liste, qui ne remontent que très lentement, un emplacement par itération, vers leur emplacement définitif
(essayer avec la liste [2, 3, 4, 5, 1]).
Plutôt que de parcourir la liste uniquement de gauche à droite, on pourrait la parcourir dans les deux sens.
C’est-à-dire faire remonter le plus grand à droite en parcourant la liste de gauche à droite, puis redescendre le
plus petit à gauche en parcourant la liste de droite à gauche, puis remonter le deuxième plus grand à droite etc.

Ecrire un tel algorithme.

Exercice 9
Voici un algorithme de tri :
1. rechercher le plus petit élément de la liste et l’échanger avec le premier élément ;
2. rechercher le second plus petit élément de la liste et l’échanger avec le deuxième élément ;
3. continuer de cette façon jusqu’à ce que la liste soit entièrement triée.
Ecrire un algorithme réalisant cet algorithme.

Exercice 10

Reprendre le tri par insertion présenté en cours.


1. Ecrire un algorithme du tri par insertion.
2. Etudier-le. (Terminaison, correction, complexité.)

Vous aimerez peut-être aussi