Algorithme

publicité
Sensibilisation à l’Algorithmique
et structure de données
Algorithme

Permet de résoudre un problème donné
ex: Trouver le salaire minimal et le salaire
maximal d’un ensemble de salariés
Trier les salariés par ordre d’arrivée dans
l’entreprise….

Procédure de calcul bien définie
Séquence d'instructions élémentaires



termine en un temps fini
prend une ou des valeur(s) en entrée
donne une ou des valeur(s) en sortie
2
Pour résoudre un problème


Identifier les données à manipuler:

Il faut donc stocker les salariés dans une structure de
données permettant leur manipulation

Il faut donc décrire un salarié avec les informations
nécessaires et suffisantes : salaire, date, nom, prénom,
service
Définir l’état initial du problème


Une liste de salariés
Définir l’état final : selon le sous problème
3
Exemple

Exemple de problème à résoudre
Trouver les salariés touchant le salaire minimal

Input: liste non triée de salariés

Output: liste des salariés correspondant au salaire minimal

Algo:
1. trouver le salaire minimal
 Parcourir la liste salarié par salarié et si le salaire est inférieur au
salaire précédent alors c’est provisoirement le salaire minimal
2. construire la liste résultat
Parcourir la liste salarié par salarié et si le salaire est égal au salaire
minimal alors ajouter le salarie à la liste résultat
4
Types de problèmes




Tris d'éléments d'une liste (trier les salariés)
Recherches d'un élément (trouver le salarié à
partir de son nom)
Calculs (calculer la moyenne des salaires par
service, ….)
Algorithmes exacts / d'approximation
5
Algorithme et Programme



Un algorithme est implémenté dans un
langage de programmation
Un même algorithme peut être implémenté
dans différents langages (Java, C, Python,
Caml, ...)
Pseudo-code
6
Structures de Données

Moyen de stocker et organiser les données
d'un algorithme


accès aux données
modification, mise à jour des données
Packages : java.lang et java.util

Tableaux


nombre max de données est connu (le tableau peut être
incomplet)
Listes

la liste contient toujours le nombre de données courant, on
ne connait pas forcément le nombre max
7
Structures de Données

Sets : notion d’ensemble


Les données n’ont pas besoin d’être retrouvées selon un
ordre
Maps : un index unique

Les données peuvent être retrouvées directement à partir
d’un index unique (nom – prénom du salarié)

Piles, files : gestion des accès aux données

Graphes, arbres, arbres binaires de recherche
8
Structures de contrôle

Structures de contrôle conditionnelles

Si cond Alors instr FinSi
 Si cond Alors instr sinon instr FinSi
(imbrications possibles)

Structures de contrôle itératives

TantQue cond Faire instr FinTantQue
 variantes
(imbrications possibles)
9
Itérations
int i = 0;
while(i<10){
System.out.println(“Coucou”);
i +=1;
}
10
Itérations
int i = 0;
do{
System.out.println(“Coucou”);
i +=1;
}while(i<10);
for (int i=0; i<10; i++)
System.out.println(“Coucou”);
11
Tableaux

Déclaration et allocation mémoire d’un
tableau de 10 entiers
int [] hauteurs = new int[10];




Accès au premier élément : hauteurs[0]
Accès au dernier élément :
hauteurs[hauteurs.length -1]
i ième élément : hauteurs[i-1]
init./modif. d'un élément: hauteurs[i] = 3;
12
Exemples d’algo sur lesTableaux





Calcul de la moyenne des valeurs stockées
dans le tableau
Recherche du (des) élément(s) vérifiant une
certaine propriété
Vérification de la présence ou l'absence d'une
certaine valeur dans le tableau
Recherche de l'indice dans le tableau d'une
valeur donné
Tri du tableau selon un certain critère
13
Exemple d’Itération
int i = 0;
int somme=0;
while(i<hauteurs.length){
somme=somme+hauteurs[i]; i++;
}
int max=hauteurs[0];
for (int i=1; i<hauteurs.length; i++){
if (max < hauteurs[i]) max=hauteurs[i];
}
14
Matrices

Tableau de tableaux :
int [][] matrice = new int[10][15];

élément en ligne i et colonne j :
matrice[i][j]

Matrice carrée :
int [][] matriceCarree = new int[7][7];
15
La classe ArrayList : Liste





Déclaration et allocation mémoire
ArrayList<Integer> hauteurs;
hauteurs = new ArrayList<Integer>();
ArrayList<Salarie> lesSalaries;
lesSalaries = new ArrayList<Salarie>();
Ne peuvent contenir que des objets
Accès au premier élément : lesSalaries.get(0)
Dernier élément : lesSalaries.get(liste.size()-1)
i ième élément : lesSalaries.get(i-1)
16
La classe ArrayList : Listes

ajout d'un élt: lesSalaries.add(
new Salarie (”Dery”, ”AM”, ”RAINBOW”,2000);

modif d'un élt:
hauteurs.set(i,new Integer(4));

suppression d'un élt: lesSalaries.remove(i);

mêmes algos que sur les tableaux
17
Exemple d’Itération
int i = 0;
int somme=0;
while(i<hauteurs.size()){
somme=somme+hauteurs.get(i).value(); i++;
}
int max=hauteurs.get(0).value();
for (int i=1; i<hauteurs.size(); i++){
if (max < hauteurs.get(i).value())
max=hauteurs.get(i).value();
}
18
Validité d'un algorithme

Précondition



Postcondition



doit être vérifiée avant un traitement donné,
garantit que la possibilité de déroulement du traitement.
doit être vérifiée après le déroulement du traitement,
garantit que le traitement a bien permis de réaliser ce
pourquoi il a été réalisé.
Invariant


condition qui est toujours vraie,
caractérise l'état interne de tout ou partie d'un algo.
19
Analyse d'un algorithme

Complexité: mesure de son efficacité

Taille mémoire nécessaire à son exécution

Temps d'exécution nécessaire



dans le meilleur des cas
dans le pire des cas
en moyenne
Exemple: recherche d'un élément dans une liste?
Exemple: recherche du plus grand élément d'une liste?
20
Efficacité d'un algorithme

Temps d'exécution

fonction de la taille des données en entrée
choix du bon paramètre





taille d'une liste, degré d'un polynôme
taille d'une matrice?
nombre de noeuds, profondeur, largeur d'un graphe?
nombre de mots d'un fichier ou nombre de caractères?
fonction du nombre de fois où une opération de
base est répétée dans l'algorithme
21
Efficacité d'un algorithme

Temps d'exécution: T(n) = C(n) * t



C(n) nombre de fois où l'opération de base de
l'algorithme est exécutée
t temps d'exécution de cette opération de base
Ordre de grandeur: C(n) n2
Complexité : 1 log n n n log n
2n n!
n2
n3
22
Validité d'une boucle

Invariant de boucle

Initialisation


Conservation


Montrer que I est vrai avant d'entrer dans la boucle
Montrer que si C et I sont vrais, alors après la liste
d'instructions, I est encore vrai.
Terminaison

On en déduit que (I et non C) est vrai à la sortie de la
boucle (si la boucle termine).
23
Fact(n)
i ← 1; fact ← 1
{ Invariant: fact = i ! et i ≤ n }
TantQue i < n Faire
i←i+1
fact ← fact * i
{ Invariant: fact = i ! et i ≤ n }
FinTantQue
(fact = i ! et i ≤ n ) et non(i<n)
retourner fact
24
Calcul du pgcd
PGCD(a,b)
n <- a; m <- b;
TantQue m != 0 Faire
r <- n mod m
n <- m
m <- r
FinTantQue
retourner n
25
PGCD(a, b)
n <- a; m <- b;
{ Invariant : pgcd(a,b)=pgcd(n,m) et n>=0 et m>=0 }
TantQue m != 0 Faire
r <- n mod m
n <- m
m <- r
{ pgcd(a,b)=pgcd(m,n) et m>=0 et n>0 }
FinTantQue
// pgcd(a,b)=pgcd(n,m) et n>=0 et m=0
// Donc n=pgcd(a,b)
26
Téléchargement