56
Algorithmes et structures de données Patrick Reuter maître de conférences http://www.labri.fr/~preuter

Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Embed Size (px)

Citation preview

Page 1: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Algorithmes et structures de données

Patrick Reutermaître de conférences

http://www.labri.fr/~preuter

Page 2: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Déroulement

• CM mardi de 11h15 à 12h15

• TD/TP en alternance- Groupe YB (Yonel Blanc) le mardi de 16h15 à 17h45

- Groupe PR (Patrick Reuter) le mercredi de 18h30 à 20h00

Page 3: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

• Niklaus Wirth, ETH Zuerich, 1976« Algorithms + Data Structures = Programs »

Page 4: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

8.168.684.336 pages

Comment ça marche ?

Page 5: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

Structure de donnée:

p.ex. fantôme- couleur - position- direction- aggressif ou pas ?

Algorithmes:

p.ex. mettre a jour lemeilleur score

Page 6: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

Structure de donnée:

- tableau a 2 dimension

Algorithmes:

- surtout I.A.

Page 7: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

Structure de donnée :

File

FIFO(First In First Out)

Aussi: File à priorité

Page 8: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

Structure de donnée :

Pile

LIFO(Last In First Out)

Page 9: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

Structure de donnée :

Arbre(pour l’éliminationdes parties cachées)

Page 10: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Motivation

Structure de donnée :

Graphe(pour plannifier destrajets)

Page 11: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

AlgorithmeDéfinition Wikipedia (12/9/2005)

L'algorithmique est la science des algorithmes, visant à étudier les opérations nécessaires à la réalisation d'un calcul.

René Descartes dans le Discours de la Méthode : • « diviser chacune des difficultés que j'examinerois, en autant de parcelles

qu'il se pourroit, et qu'il seroit requis pour les mieux résoudre. ».

• Un algorithme est une méthode de résolution de problème énoncée sous la forme d'une série d'opérations à effectuer.

• La mise en œuvre de l'algorithme consiste en l'écriture de ces opérations dans un langage de programmation et constitue alors la brique de base d'un programme informatique (implémentation, « codage »)

• L'algorithme devra être plus ou moins détaillé selon le niveau d'abstraction du langage utilisé ; autrement dit, une recette de cuisine doit être plus ou moins détaillée en fonction de l'expérience du cuisinier.

Page 12: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Structure de donnéesDéfinition Wikipedia (12/9/2005)

• une structure logique destinée à contenir des données afin de leur donner une organisation permettant de simplifier leur traitement.

• Exemple : On peut présenter des numéros de téléphone *

- par département, - par nom - par profession (pages jaunes),- par numéro téléphonique (annuaires destinés au télémarketing),- par rue et/ou - une combinaison quelconque de ces classements.

À chaque usage correspondra une structure d'annuaire appropriée.

Page 13: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Variables :

nombreyi patrick x1

• Mais non pas :3xentrée

Page 14: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Affectation

• Condition/Comparaison

• Appel de fonction

• Structure de contrôle– Branchements conditionnels (multiples)– Boucles

• Bloc d’instruction

Page 15: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Affectation

a := 7;score := 0;score := score + 100;gameover := FAUX;

- Note:- Affectation d’une seule variable avec un valeur.- La variable à affecter figure à gauche, la valeur à droite

Faux:a+b := 6;7 := c;

Page 16: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Condition/Comparaison

a = 7absent = FAUXmalade = VRAI OU vacances = VRAIscore > highscore;…

- Note:

- Le résultat d’une condition/comparaison peut être uniquement soit VRAI, soit FAUX

Page 17: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Appel de fonction, p.ex.

afficher(« Bonjour tout le monde »);

resultat := racine_carre(16);

Page 18: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Branchements conditionnels

SI <condition> ALORS<bloc d’instructions>

SINON<bloc d’instructions>

Page 19: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Branchements conditionnels

SI <condition> ALORS

<bloc d’instructions>

SINON

<bloc d’instructions>

Exemple:

SI (score>meilleur_score) ALORS

meilleur_score := score;

Page 20: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Branchements conditionnels

SI <condition> ALORS<bloc d’instructions>

SINON<bloc d’instructions>

Exemple:SI (score>meilleur_score) ALORS

meilleur_score := score;

En PASCAL :IF (score>meilleur_score) THEN

meilleur_score := score;

Page 21: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Branchements conditionnels multiples

– CAS mois DE     ‘1': nom := « Janvier » ;     ‘2': nom := « Février » ;     ‘3': nom := « Mars » ;     ‘4': nom := « Avril » ;     ‘5': nom := « Mai » ;

….     ‘12': nom := « Décembre » ;

   AUTREMENT     afficher('Erreur dans le mois') ; FIN CAS;

Page 22: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle

Définition :

Suite d’instructions qui peut être exécuté plusieurs fois (itération)

Page 23: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle

TANT QUE <condition> FAIRE<bloc d’instructions>

FIN TANT QUE

ou

FAIRE<bloc d’instructions>

TANT QUE <condition>

Page 24: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle

TANT QUE <condition> FAIRE<bloc d’instructions>

FIN TANT QUE

Exemple :Afficher les nombres entiers dont le carré est inférieur à

100.

nombre := 1;TANT QUE (nombre*nombre<100) FAIRE

afficher(nombre);nombre := nombre + 1;

FIN TANT QUE

Page 25: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

• Faire tourner un algorithme

Page 26: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre := 1;nombrecarre := nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre := nombre + 1;nombrecarre := nombre * nombre;

FIN TANT QUE

nombre nombrecarre

Chaque variable une colonne

Page 27: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre := 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre := nombre + 1;nombrecarre := nombre * nombre;

FIN TANT QUE

nombre

1

nombrecarre

Chaque instruction une ligne

Page 28: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre

1

nombrecarre

1

Page 29: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre

1

nombrecarre

1

Page 30: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre

1

nombrecarre

1

1

Page 31: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre

1

2

nombrecarre

1

1

Page 32: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre

1

2

nombrecarre

1

4

1

Page 33: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre

1

2

nombrecarre

1

4

1

Page 34: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre nombrecarre

Page 35: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre nombrecarre

Page 36: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

nombre = 1;nombrecarre = nombre * nombre;

TANT QUE (nombrecarre<100) FAIREafficher(nombre);nombre = nombre + 1;nombrecarre = nombre * nombre;

FIN TANT QUE

nombre nombrecarre

Page 37: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle

FAIRE

<bloc d’instructions>

TANT QUE <condition>

Page 38: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle

FAIRE

jouer();

afficher(« Voulez vous rejouer (O/N) ? »);

prendreDuClavier(charactere);

TANT QUE (caractere= "O" OU caractere = "o");

Page 39: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle POUR

POUR variable de valeur à valeur FAIRE

<bloc d’instructions>

FIN POUR

Page 40: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

Ingrédients d’algorithmes

• Structure de contrôle– Boucle POUR

POUR variable de valeur à valeur FAIRE<bloc d’instructions>

FIN POUR

Exemple

POUR i:=1 à 10 FAIREafficher(i);afficher(i*i);

FIN POUR

Page 41: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

« FAIRE TOURNER » un algorithme

• Exemple: Tester si un nombre est premier

Stratégie: Supposer que le nombre est premier jusqu’à on a trouvé un diviseur.

FONCTION estPremier(nombre)estPremier := VRAI;Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORSestPremier := FAUX;

FIN TANT QUEFIN FONCTION

Page 42: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

DiviseurestPremier

EXEMPLE: resultat = testSiPremier(9);

resultatNombre

Page 43: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

DiviseurestPremier

EXEMPLE: resultat := testSiPremier(9);

resultatNombre

9

Page 44: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

DiviseurestPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 45: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre % diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

2

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 46: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

2

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 47: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

2

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 48: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

23

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 49: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

23

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 50: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier := VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

23

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 51: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

23

estPremier

VRAI

FAUX

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 52: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

234

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 53: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

234

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 54: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre) : boolean;

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

234

estPremier

VRAI

FAUX

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 55: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre)

estPremier := VRAI;

Diviseur := 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier := FAUX;

diviseur := diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

234

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat

Page 56: Algorithmes et structures de données Patrick Reuter maître de conférences preuter

FONCTION testSiPremier(nombre)

estPremier = VRAI;

Diviseur = 2;TANT QUE diviseur<nombre ET estPremier = VRAI FAIRE

SI (nombre MOD diviseur = 0) ALORS

estPremier = FAUX;

diviseur = diviseur + 1;FIN TANT QUE

RETOURNER estPremier;FIN FONCTION

Diviseur

234

FAUX

estPremier

VRAI

Nombre

9

EXEMPLE: resultat = testSiPremier(9);

resultat