sensibilisation à lalgorithmique et structure de données

Post on 03-Apr-2015

109 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Sensibilisation à l’Algorithmique

et structure de données

2

Algorithme

Permet de résoudre un problème donnéex: Trouver le salaire minimal et le salaire maximal

d’un ensemble de salariésTrier 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

3

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

4

Exemple

Exemple de problème à résoudreTrouver 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ésultatParcourir la liste salarié par salarié et si le salaire est égal au salaire minimal alors ajouter le salarie à la liste résultat

5

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

6

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

7

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

8

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

9

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)

10

Itérations

int i = 0;

while(i<10){

System.out.println(“Coucou”);

i +=1;

}

11

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”);

12

Tableaux

Déclaration et allocation mémoire d’un tableau de 10 entiersint [] 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;

13

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

14

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];

}

15

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];

16

La classe ArrayList : Liste

Déclaration et allocation mémoireArrayList<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)

17

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

18

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();}

19

Validité d'un algorithme

Précondition doit être vérifiée avant un traitement donné, garantit que la possibilité de déroulement du traitement.

Postcondition 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.

20

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?

21

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

22

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 n2 n3 2n n!

23

Validité d'une boucle

Invariant de boucle Initialisation

Montrer que I est vrai avant d'entrer dans la boucle

Conservation 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).

24

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

25

Calcul du pgcd

PGCD(a,b)n <- a; m <- b;TantQue m != 0 Faire r <- n mod m n <- m m <- rFinTantQueretourner n

26

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)

top related