Algorithmes et structures de données

Slides:



Advertisements
Présentations similaires
Algorithmes et structures de données (avancées) Cours 1+2
Advertisements

Tris.
Chapitre annexe. Récursivité
Cours Algorithmique et Analyse : Introduction
Initiation à la programmation et algorithmique cours 2
Algorithmes et structures de données avancées Cours 4
Algorithmes et structures de données avancées 6ème cours Patrick Reuter
Algorithmes et structures de données avancées 5ème cours Patrick Reuter
Algorithmes et structures de données avancées Cours 6 Patrick Reuter
Algorithmes et structures de données 7ème cours
Algorithmes et structures de données avancés
Algorithmes et structures de données 3ème cours Patrick Reuter
Patrick Reuter maître de conférences
Algorithmes et structures de données Cours 8
Algorithmes et structures de données Cours 3
Algorithmes et structures de données Cours 10 Patrick Reuter
Algorithmes et structures de données Cours 7
Algorithmes et structures de données 4ème cours
Algorithmes et structures de données 5ème cours
Algorithmes et structures de données Cours 9 Patrick Reuter
Algorithmes et structures de données avancées Cours 1+2+3
Algorithmes et structures de données Cours 2
Structures de données et complexité
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Algorithmique Résume.
Niveau: 4ème Math Prof: Donia JEBALI Année Scolaire 2007/2008
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Exercices Algorithmiques
INTRODUCTION.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Algorithmique et Structures de données
Initiation à la programmation et algorithmique cours 3
Qu’est-ce qu’un ordinateur ?
Les bases de l’Algorithmique
Semaine #1 INF155 par Frédérick Henri.
La structure conditionnelle simple
Calcul et programmation au lycée avec Scilab
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Introduction à l’algorithmique
Les éléments de base de l’algorithmique
ALGORITHMIQUE Plan du cours Généralités -définition -importance
II. Chaînage, SDD séquentielles
Structures de contrôle de l’exécution
Les structures de contrôle conditionnelles
Les algorithmes: complexité et notation asymptotique
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Introduction à l’algorithmique
Semaine #1 INF135 par Frédérick Henri.
I&G- chapitre 11-La logique Logarithmique -Mme Roulaud
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
L’essentiel du langage C
Animateur : Med HAIJOUBI
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Ch. PAUL - Piles et Files à l'aide de listes chainées
Algorithmique Les structures Rappel L'enchaînement séquentiel
Septembre Semaines du 2 au 13 septembre DATECOURSEXERCICESEXERCICES à fairePOUR le Jeudi 5 Vendredi 6 Lundi 9 Prise de contacts. Programme ISN. Déroulement.
INTRODUCTION.
Un survol du language C.
Les tests.
1 1 Huitième journée Quelques algorithmes. 2 Définition Description des tâches pour que celles-ci soient aisément programmables Différent d’une méthode.
Algorithmique : Introduction
Initiation à l’Algorithmique
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Algorithmique Boucles et Itérations
Algorithmique et programmation
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Transcription de la présentation:

Algorithmes et structures de données Patrick Reuter maître de conférences http://www.labri.fr/~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

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

Motivation 8.168.684.336 pages Comment ça marche ?

Motivation Structure de donnée: p.ex. fantôme couleur position direction aggressif ou pas ? Algorithmes: p.ex. mettre a jour le meilleur score p. ex. / ex:

Motivation Structure de donnée: - tableau a 2 dimension Algorithmes: - surtout I.A. a / à

Motivation Structure de donnée : File FIFO (First In First Out) Aussi: File à priorité

Motivation Structure de donnée : Pile LIFO (Last In First Out)

Motivation Structure de donnée : Arbre (pour l’élimination des parties cachées)

Motivation Structure de donnée : Graphe (pour plannifier des trajets) plannifier / planifier

Algorithme Dé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. examinerois, pourroit, seroit, / examine, peut, est, (ici « autant que » est une comparaison donc pas de subjonctif, différent des phrases du type « quitte à s’être levé, autant que ce soit pour aller en cours) ; pour les mieux résoudre / pour mieux les résoudre ; problème / problèmes

Structure de données Dé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.

Ingrédients d’algorithmes Variables : nombre y i patrick x1 Mais non pas : 3x entrée

Ingrédients d’algorithmes Affectation Condition/Comparaison Appel de fonction Structure de contrôle Branchements conditionnels (multiples) Boucles Bloc d’instruction

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; un valeur / une valeur

Ingrédients d’algorithmes Condition/Comparaison a = 7 absent = FAUX malade = VRAI OU vacances = VRAI score > highscore; … Note: Le résultat d’une condition/comparaison peut être uniquement soit VRAI, soit FAUX

Ingrédients d’algorithmes Appel de fonction, p.ex. afficher(« Bonjour tout le monde »); resultat := racine_carre(16);

Ingrédients d’algorithmes Structure de contrôle Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON

Ingrédients d’algorithmes Structure de contrôle Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON Exemple: SI (score>meilleur_score) ALORS meilleur_score := score;

Ingrédients d’algorithmes Structure de contrôle Branchements conditionnels SI <condition> ALORS <bloc d’instructions> SINON Exemple: SI (score>meilleur_score) ALORS meilleur_score := score; En PASCAL : IF (score>meilleur_score) THEN meilleur_score := score;

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;

Ingrédients d’algorithmes Structure de contrôle Boucle Définition : Suite d’instructions qui peut être exécuté plusieurs fois (itération) exécuté / exécutée

Ingrédients d’algorithmes Structure de contrôle Boucle TANT QUE <condition> FAIRE <bloc d’instructions> FIN TANT QUE ou FAIRE TANT QUE <condition>

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;

Faire tourner un algorithme

nombrecarre := nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre := nombre + 1; FIN TANT QUE Chaque variable une colonne nombre nombrecarre

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre := nombre + 1; nombrecarre := nombre * nombre; FIN TANT QUE Chaque instruction une ligne nombre 1 nombrecarre

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre 1 nombrecarre 1

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre 1 nombrecarre 1

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 nombrecarre 1

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 2 nombrecarre 1

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 2 nombrecarre 1 4

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE 1 nombre 1 2 nombrecarre 1 4

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre nombrecarre

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre nombrecarre

nombrecarre = nombre * nombre; TANT QUE (nombrecarre<100) FAIRE afficher(nombre); nombre = nombre + 1; FIN TANT QUE nombre nombrecarre

Ingrédients d’algorithmes Structure de contrôle Boucle FAIRE <bloc d’instructions> TANT QUE <condition>

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

Ingrédients d’algorithmes Structure de contrôle Boucle POUR POUR variable de valeur à valeur FAIRE <bloc d’instructions> FIN POUR

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 FAIRE afficher(i); afficher(i*i);

« 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) ALORS estPremier := FAUX; FIN TANT QUE FIN FONCTION jusqu’à on a trouvé / jusqu’à ce qu’on ait trouvé (subjonctif)

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre estPremier Diviseur resultat

EXEMPLE: resultat := testSiPremier(9); 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 EXEMPLE: resultat := testSiPremier(9); Nombre 9 estPremier Diviseur resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI FAUX Diviseur 2 3 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 4 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 4 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI FAUX Diviseur 2 3 4 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 4 resultat

EXEMPLE: resultat = testSiPremier(9); 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 EXEMPLE: resultat = testSiPremier(9); Nombre 9 estPremier VRAI Diviseur 2 3 FAUX resultat