Vous êtes sur la page 1sur 51

‫المديرية اإلقليمية بعبن السبع الحي المحمدي‬

‫تنظم‬
‫التكوين المعمق في مجال البرمجة‬
‫لفائدة أستاذات و أساتذة المعلوميات بالثاـنوي التأهيلي‬

‫‪Direction provinciale Ain sebaa-hay mohammadi‬‬

‫‪Mr Abdelhak Fadili‬‬


‫‪Professeur d’informatique‬‬
‫‪25 Octobre 2021‬‬
Identification
P. Tech

Objectif opérationnel : 
Savoir créer une application en utilisant le langage Java et les outils JDK et
Eclipse.
Objectifs pédagogiques : 
À l’issue de la formation Java, vous aurez acquis les connaissances et
compétences nécessaires pour :
•Décrire les différentes technologies Java (Java EE, Java embarqué, etc.)
•Utiliser Eclipse et comprendre les apports d’un IDE (Integrated
Development Environment)
•Maîtriser la syntaxe Java
•Comprendre et savoir appliquer les concepts objets au langage Java
(classes, méthodes, encapsulation, héritage, constructeur, polymorphisme,
classe abstraite, interfaces, relations entre classes, etc.)
•Maîtriser les opérations et les packages de base de Java (Collections, IO,
String, Exception)
•Construire les exécutables et déployer des applications.
2
Plan de formation:
P. Tech

I. Algorithmique
1. Les algorithmes de Tri
2. Les algorithmes de recherches
II. Langage C
1. Les fonctions
2. Les pointeurs
3. Les listes chainés
4. Les piles & les files
III. Python
1. Les instructions de base
2. Les listes, Tuples, Dictionnaires

3
Plan de Cours:
P. Tech

I. Algorithmique
II. Langage C
III.Python
IV. Rur-ple
V. Scratch

4
1. Algorithmes de recherche
P. Tech

• Sur des structures de données usuelles comme les listes, les tables
ou les arbres.
• Il faut cependant savoir retrouver les données dans ces structures.
• Structurer les données est indispensable pour les manipuler dans
les programmes.
• il existe des algorithmes bien connus que l'on peut facilement
mettre en œuvre et qui exploitent les propriétés de la structure de
données

5
1. Algorithmes de recherche
P. Tech

• Le problème est de trouver un élément dans une structure linéaire


(tableau).
– l'élément peut ne pas être présent
– l'élément peut être présent à plusieurs endroits
– si la structure a plusieurs dimensions, il faut fouiller chaque
dimension

6
1. Algorithmes de recherche
P. Tech
A. Recherche séquentielle B. Recherche du nombre d'occurrences

• Technique intuitive : la recherche séquentielle


– on parcourt la structure dans l'ordre « naturel »
– on s'arrête au bout, ou quand on trouve l'élément
– parfois on peut s'arrêter plus tôt

7
1. Algorithmes de recherche
P. Tech
A. Recherche séquentielle B. Recherche du nombre d'occurrences

• Technique intuitive : la recherche séquentielle


– on parcourt la structure dans l'ordre « naturel »
– on s'arrête au bout, ou quand on trouve l'élément
– parfois on peut s'arrêter plus tôt

7 9 1 2 5 3 8 0 4 6

3 3 3 3 3 3

on s'arrête quand on trouve l'élément, ou quand on arrive au bout


du tableau.
8
1. Algorithmes de recherche
P. Tech
A. Recherche séquentielle B. Recherche du nombre d'occurrences

9
1. Algorithmes de recherche
P. Tech
A. Recherche séquentielle B. Recherche du nombre d'occurrences

• On cherche le nombre d’occurrences d’un élément

10
1. Algorithmes de recherche
P. Tech
B. Recherche du nombre d'occurrences C. Recherche dans un tableau trié
• Optimisation : si le tableau est trié, on peut s'arrêter plus « tôt »

11
1. Algorithmes de recherche
P. Tech
C. Recherche dans un tableau trié D. Divide ut imperes
• Principe diviser pour régner : on découpe les données en
différentes parties qu’on traite séparément.

Exemple : pour rechercher un élément dans un tableau, on le coupe


en deux et on chercher dans chaque partie.

Ce principe est utile :


• si on peut lancer des programmes en parallèle, on mettra environ
deux fois moins de temps pour rechercher l'élément.
• si le tableau est trié, on peut ne chercher l'élément que dans une
seule des parties.
12
1. Algorithmes de recherche
P. Tech
C. Recherche dans un tableau trié E. Recherche dichotomique

• Recherche par dichotomie : le tableau est supposé trié par ordre


croissant et on cherche un élément e dans un tableau t
• Principe de l'algorithme :
1. on regarde l'élément situé au milieu de t :
2. s'il s'agit de e c'est gagné.
3. s'il est plus grand que e, on cherche dans la moitié gauche
4. s'il est plus petit que e, on cherche dans la moitié droite
Remarques :
 ça ne peut marcher que si le tableau est trié
 on coupe le tableau en deux parties pas forcément égales en taille

13
1. Algorithmes de recherche
P. Tech
C. Recherche dans un tableau trié E. Recherche dichotomique

• Exemple : rechercher 490 dans le tableau d'entiers suivant.

Remarque : on trouve 490 en 4 itérations, une recherche


séquentielle aurait demandé 11 itérations

14
1. Algorithmes de recherche
P. Tech
C. Recherche dans un tableau trié E. Recherche dichotomique

15
1. Algorithmes de recherche
P. Tech
E. Recherche dichotomique F. Recherche par interpolation

Recherche par interpolation : On améliore la recherche par


dichotomie en coupant le tableau non pas au milieu, mais à un
endroit « proche » de la valeur cherchée.
La recherche par interpolation suppose qu'on puisse interpoler
l'indice probable de la valeur recherchée.

Exemple : chercher un mot dans le dictionnaire se fait par


interpolation

Interpoler l'indice où on peut trouver un élément dans un tableau


implique qu’on connaisse à l'avance la répartition des éléments (au
moins approximativement).

Un cas simple : les éléments sont répartis linéairement dans le


tableau.
16
1. Algorithmes de recherche
P. Tech
E. Recherche dichotomique F. Recherche par interpolation

Supposons que nous ayons un tableau trié A[] contenant n éléments et que nous
voulons trouver un élément donné X.

1. Définissez lo comme 0, mid comme -1 et hi comme n-1.


2. Alors que lo <= hi et X se situent dans la plage entre lo et hi, c’est-à-dire X >=
A[lo] et X <= A[hi].
a. Calculer mid en utilisant la formule pour la position de la sonde :
mid = lo + (X - A[lo]) * (hi - lo) / (A[hi] - A[lo]).
b. Si l’élément à la position de la sonde est inférieur à l’élément cible,
déplacez-vous vers la droite. Si A[mid] < X, définissez lo comme mid + 1.
c. Sinon, si l’élément est supérieur à l’élément cible, déplacez-vous vers la
gauche. Si A[mid]> X, définissez hi sur mid-1.
d. Sinon, nous avons trouvé l’élément et nous retournons mid.
3. Si lo == hi, il ne reste qu’un seul élément vérifier s’il s’agit de l’élément cible,
c’est-à-dire si A[lo] == X.
a. Si true, alors renvoie lo.
b. Sinon, retourne -1.
17
1. Algorithmes de recherche
P. Tech
E. Recherche dichotomique F. Recherche par interpolation

Exemple de recherche par interpolation


Supposons que nous ayons le tableau : (1, 3, 7, 8, 11, 15, 17, 18, 21), et que
nous voulions trouver X - 18.

1. Set lo = 0 , mid= -1 et hi = 8.
2. Calculer mid comme 6 en utilisant la formule :
0 + (18 - 1)*(8 - 0)/(21-1)
3. Ensuite, nous comparons A[6] avec X pour voir qu’il est plus petit et nous
fixons lo comme 7.
4. Calculer mid en utilisant:
7 + (18 - 18)*(8 - 7)/(21 - 18).
5. Ensuite, on compare A[7] avec X pour voir qu’il est égal à 18 et on
obtient l’indice 7.

18
1. Algorithmes de recherche
P. Tech
E. Recherche dichotomique F. Recherche par interpolation

int interpolation_search(int arr[], int n, int X)


{
int lo = 0; int hi = n - 1; int mid;

while ((arr[hi] != arr[lo]) && (X >= arr[lo]) && (X <= arr[hi])) {


mid = lo + ((X - arr[lo]) * (hi - lo) / (arr[hi] - arr[lo]));

if (arr[mid] < X) int main(void)


lo = mid + 1; {
else if (X < arr[mid]) int n = 9;
hi = mid - 1; int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
else int x = 4;
return mid; int result = interpolation_search(arr, n, x);
} if (result == -1) {
cout << "Element not found !!";
if (X == arr[lo]) }
return lo ; else cout << "Element found at index " << result;
else return 0;
return -1; }
19
}
2. Tableau trié
P. Tech
A. Tableau trié

La recherche d'élément parait plus efficace dans les tableaux triés. Il est donc
intéressant de pouvoir tester si un tableau est trié et, si ce n'est pas le cas, de
pouvoir le trier.
 Tester si un tableau est trié par ordre croissant : on s'assure que chaque
case(sauf la dernière) a un contenu plus petit que celui de la case
suivante.

20
2. Tableau trié
P. Tech
A. Tableau trié

Optimisation : on peut s'arrêter dès qu'on trouve deux éléments qui ne sont
pas dans le bon ordre.

21
2. Tableau trié
P. Tech
A. Tableau trié

Le problème est de placer les éléments d'une structure linéaire dans l'ordre
• les éléments doivent pouvoir être comparés
• on peut trier par ordre croissant ou décroissant
• si la structure a plusieurs dimensions, on peut trier chaque dimension

De nombreux algorithmes de tri existent, qui ont chacun leurs avantages et


inconvénients en fonction des données à trier.

Certains algorithmes utilisent des structures de données plus complexes


(arbres en particulier).

On ne voit ici que quelques tris de base.

22
2. Tableau trié
P. Tech
A. Tableau trié B. Tri en place

Occupation mémoire d'un algorithme de tri :

 tri en place : les éléments sont triés dans la structure de données.

 tri pas en place : on crée une nouvelle structure de données

23
2. Tableau trié
P. Tech
B. Tri en place C. Stabilité d'un tri

Stabilité d'un algorithme de tri :

 tri stable : L'algorithme ne modifie pas l'ordre initial des éléments égaux

 tri instable : L'algorithme modifie l'ordre initial des éléments égaux

24
2. Tableau trié
P. Tech
C. Stabilité d'un tri D. Tri à bulle

Principe
La stratégie de cet algorithme est :
1. Parcourir le tableau en comparant deux à deux les éléments
successifs, permuter s'ils ne sont pas dans l'ordre
2. Répéter tant que des permutations sont effectuées.
Le plus petit remonte
en surface

1 i n
t
Les i-1 premiers Les éléments
éléments déjà triés Niveau 0 non triés

25
2. Tableau trié
P. Tech
C. Stabilité d'un tri D. Tri à bulle

Exemple
On veut trier les éléments:
42, 20, 17, 13, 28, 14, 23 et 15
i=1 i=2
k=8 k=7 k=6 k=5 k=4 k=3 k=2 k=8 k=7 k=6 k=5 k=4 k=3
42 42 42 42 42 42 42 13 13 13 13 13 13 13
20 20 20 20 20 20 13 42 42 42 42 42 42 14
17 17 17 17 17 13 20 20 20 20 20 20 14 42
13 13 13 13 13 17 17 17 17 17 17 14 20 20
28 28 28 14 14 14 14 14 14 14 14 17 17 17
14 14 14 28 28 28 28 28 28 15 15 15 15 15
23 15 15 15 15 15 15 15 15 28 28 28 28 28
15 23 23 23 23 23 23 23 23 23 23 23 23 23
2. Tableau trié
P. Tech
C. Stabilité d'un triTri D. Tri à bulle

Exemple

Même exemple

i=3 i=4
k=8 k=7 k=6 k=5 k=4 k=8 k=7 k=6 k=5
13 13 13 13 13 13 13 13 13 13 13
14 14 14 14 14 14 14 14 14 14 14
42 42 42 42 42 15 15 15 15 15 15
20 20 20 20 15 42 42 42 42 42 17
17 17 17 15 20 20 20 20 20 17 42
15 15 15 17 17 17 17 17 17 20 20
28 23 23 23 23 23 23 23 23 23 23
23 28 28 28 28 28 28 28 28 28 28
2. Tableau trié
P. Tech
C. Stabilité d'un triTri D. Tri à bulle

Exemple

Même exemple

i=5 i=6 i=7


k=8 k=7 k=6 k=8 k=7 k=8
13 13 13 13 13 13 13 13 13
14 14 14 14 14 14 14 14 14
15 15 15 15 15 15 15 15 15
17 17 17 17 17 17 17 17 17
42 42 42 20 20 20 20 20 20
20 20 20 42 42 42 23 23 23
23 23 23 23 23 23 42 42 28
28 28 28 28 28 28 28 28 42
2. Tableau trié
P. Tech
C. Stabilité d’un tri D. Tri à bulle
2. Tableau trié
P. Tech
C. Stabilité d'un tri D. Tri à bulle

Implémentation

Procédure TriBulles(t : Tableau[1 .. Max]


d’entiers, nbElements : Naturel)
i, k : Naturels;
Début
Pour i=1 à nbElements-1 faire
Pour k=nbElements à i+1 faire
Si t[k]<t[k-1] alors
Echanger(t[k],t[k-1]);
Fin si
Fin Pour
Fin Pour
Fin
2. Tableau trié
P. Tech
C. Stabilité d'un tri D. Tri à bulle
Algorithme du tri à bulle optimisé
Optimisation : on s'arrête dès que le tableau est trié
Remarque : cette amélioration
n'est efficace que si le tableau
est déjà « un peu » trié et qu'il
devient trié « assez vite ».
2. Tableau trié
P. Tech
D. Tri à bulle E. Tri par Sélection

Principe

Répéter
1. chercher le plus grand (le plus petit) élément => Sélection
2. le mettre à la fin (au début)

1 i n
t
Les i-1 petits Le plus petit
éléments triés élément du reste
2. Tableau trié
P. Tech
D. Tri à bulle E. Tri par Sélection

Exemple

On veut trier les éléments:


42, 20, 17, 13, 28, 14, 23 et 15

i=1 i=2 i=3 i=4 i=5 i=6 i=7


42 13 13 13 13 13 13 13
20 20 14 14 14 14 14 14
17 17 17 15 15 15 15 15
13 42 42 42 17 17 17 17
28 28 28 28 28 20 20 20
14 14 20 20 20 28 23 23
23 23 23 23 23 23 28 28
15 15 15 17 42 42 42 42
2. Tableau trié
P. Tech
D. Tri à bulle E. Tri par Sélection
2. Tableau trié
P. Tech
D. Tri à bulle E. Tri par Sélection
Implémentation

Procédure TriSelection(t : Tableau[1 .. Max] d’entiers,


nbElements : naturel)
i, k, indMin : naturel;
temp : entier;
Début
Pour i=1 à nbElements-1 faire
/* recherche du numéro du minimum */
indMin = i;
Pour k=i+1 à nbElements faire
si (t[k] < t[indMin]) alors
indMin = k;
Fin Si
Fin Pour
/* échange des valeurs entre la case courante et le
minimum */
temp = t[i];
t[i] = t[indMin];
t[indMin] = tmp;
Fin Pour
Fin
2. Tableau trié
P. Tech
E. Tri par Sélection F. Tri par insertion

Principe

Insertion du prochain élément dans la partie qui est déjà triée


précédemment
La partie de départ qui est triée est le premier élément
Il se pourrait qu’on a à déplacer plusieurs éléments pour l’insertion

1 i n
t
Les i-1 premiers Eléments Les éléments
éléments déjà triés à insérer non triés
2. Tableau trié
P. Tech
E. Tri par Sélection F. Tri par insertion

Exemple

On veut trier les éléments:


42, 20, 17, 13, 28, 14, 23 et 15

i=1 i=2 i=3 i=4 i=5 i=6 i=7


42 20 17 13 13 13 13 13
20 42 20 17 17 14 14 14
17 17 42 20 20 17 17 15
13 13 13 42 28 20 20 17
28 28 28 28 42 28 23 20
14 14 14 14 14 42 28 23
23 23 23 23 23 23 42 28
15 15 15 15 15 15 15 42
2. Tableau trié
P. Tech
E. Tri par Sélection F. Tri par insertion
2. Tableau trié
P. Tech
E. Tri par Sélection F. Tri par insertion
Implémentation

Procedure TriInsertion(t : Tableau[1 .. Max]


d’entiers, nbElements : naturel)
i, k : naturels;
temp : entier;
Début
Pour i=2 à nbElements faire
temp = t[i];
k = i;
Tant que (k > 1 et t[k-1] > temp) faire
t[k] = t[k - 1];
k = k - 1;
Fin tant que
t[k] = temp;
Fin pour
Fin
2. Tableau trié
P. Tech
E. Tri par Sélection F. Tri par insertion

L'algorithme de tri par insertion donné ici est en place et stable (il serait
instable si on utilisait ≥ au lieu de >).
Le tri par sélection nécessite en moyenne de l'ordre de n²/2 comparaisons,
n étant la taille du tableau : on fera d'abord n-1 tours de la boucle pour,
puis n-2, et ainsi de suite jusqu'à 1.
Le tri par insertion nécessite en moyenne de l'ordre de n²/4 comparaisons
et déplacements : placer le ième élément demande en moyenne i/2
comparaisons.

 Le tri par insertion est donc environ deux fois plus rapide que le tri par
sélection.
2. Tableau trié
P. Tech
Efficacité des tris à bulle, par sélection et par insertion

Test expérimental sur des tableaux d'entiers générés aléatoirement.


2. Tableau trié
P. Tech
F. Tri par insertion H. Tri fusion

Tri fusion (merge sort, John von Neumann, 1945) : on coupe le


tableau en deux et on trie chacune des sous-parties (diviser pour
régner), puis on reconstitue le tableau entier en fusionnant les
deux parties et en respectant l’ordre.
Procedure fusion(L1 : Tableau[1 .. Max] d’entiers, L1 :
Tableau[1 .. Max] d’entiers) 2. Tableau trié
n1,n2,i1,i2,i :
P. Tech entier;
Début F. Tri par insertion H. Tri fusion
n1= taille(L1),n2=taille(L2)
Fusionner les deux sous-parties d’un tableau « en place », oblige à réaliser
L12nombreux
de : Tableau[1 .. Max]
décalages. d’entiers
Pour gagner du temps, on va consommer de
Tant que
l’espace i1<n1
mémoire en et i2<n2
utilisant un faire
tableau temporaire
si L1[i1] < L2[i2] alors
L12[i] <- L1[i1]
i1 <-i1+ 1
si i1 = n1 alors
L12[i + 1] <- L2[i2]
finsi
sinon
L12[i] <- L2[i2] L <- fusion({1, 6, 10}, {0, 7, 8, 9})
i2 <- 1
si i2 = n2 alors
L12[i + 1] <- L1[i1] [0, 1, 6, 7, 8, 9, 10]
finsi
i <- i+ 1
renvoyer L12
Fin
2. Tableau trié
P. Tech
H. Tri fusion H. Tri Rapide

Principe
Inventé en 1960 par Sir Charles Antony Richard Hoare
Consiste à:
Choisir un élément « pivot »
Diviser l’ensemble à deux sous-ensembles
Répéter la procédure récursivement
pivot
Éléments inférieurs Éléments
1 au pivot supérieurs au pivot n
t
Pivot’ Pivot’’
2. Tableau trié
P. Tech
H. Tri fusion H. Tri Rapide
Exemple

20 17 13 28 14 23 15 42

15 20 17 13 28 14 23

15 20 17 13 28 14 23

15 20 17 13 28 14 23

15 20 17 13 28 14 23

15 20 17 13 28 14 23

15 20 17 13 28 14 23

15 20 17 13 28 14 23 42
2. Tableau trié
P. Tech
H. Tri fusion H. Tri Rapide
Exemple

20 17 13 28 14 23 42 15

20 17 13 28 14 23 42

14 20 17 13 28 23 42

14 17 13 28 20 23 42

14 17 13 28 20 23 42

14 13 17 28 20 23 42

14 13 15 17 28 20 23 42
2. Tableau trié
P. Tech
H. Tri fusion H. Tri Rapide
Exemple

14 13 15 28 20 23 42 17

13 14 15 28 20 23 42

13 14 15 28 20 23 42

13 14 15 17 28 20 23 42

13 14 15 17 20 23 42 28

13 14 15 17 23 20 42

13 14 15 17 23 20 28 42
2. Tableau trié
P. Tech
H. Tri fusion H. Tri Rapide
2. Tableau trié
P. Tech
H. Tri fusion H. Tri Rapide
Implémentation
Fonction indicePivot=partitionner(tableau T, entier premier, entier dernier,
entier pivot)
échanger T[pivot] et T[dernier] // échange le pivot avec le dernier du tableau ,
le pivot devient le dernier du tableau
j := premier
pour i de premier à dernier - 1 // la boucle se termine quand i = (dernier-1).
si T[i] <= T[dernier] alors
échanger T[i] et T[j]
j := j + 1
échanger T[dernier] et T[j]
renvoyer j

tri_rapide(tableau T, entier premier, entier dernier)


si premier < dernier alors
pivot := choix_pivot(T, premier, dernier)
pivot := partitionner(T, premier, dernier, pivot)
tri_rapide(T, premier, pivot-1)
tri_rapide(T, pivot+1, dernier)
4
P. Tech Tri Rapide
4.3 Implémentation

Procedure TriRapide(t : Tableau. Max] d’entiers, debut,


fin : Naturels)
indicePivot : naturel
Début
Si fin>debut alors
indicePivot=Partition(t, debut, fin);
TriRapide(t, debut, indicePivot-1);
TriRapide(t, indicePivot+1, fin);
Fin si
Fin
/* Programme principal */
procédure CallerProgram(t : Tableau[1 .. Max]
d’entiers)
Début
TriRapide(t, 1, N);
Fin
2. Tableau trié
P. Tech

51

Vous aimerez peut-être aussi