Programme. Pimp A - info121a. Exemple: Graphes de Réseaux. Traverse et Calculs dans Arbres. Tri Récursivité Dichotomie Arbre Graphes Examen blanc

Documents pareils
Les structures de données. Rajae El Ouazzani

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

Les arbres binaires de recherche

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Quelques Algorithmes simples

Exemples de problèmes et d applications. INF6953 Exemples de problèmes 1

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Chapitre 5 : Flot maximal dans un graphe

Programme Compte bancaire (code)

Algorithmique, Structures de données et langage C

Bases de programmation. Cours 5. Structurer les données

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

INFO-F-105 Language de programmation I Séance VI

Introduction à la programmation concurrente

Introduction à la théorie des graphes. Solutions des exercices

Introduction à MATLAB R

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Java Licence Professionnelle CISII,

Une introduction à Java

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN


Algorithmes de recherche

Algorithmes de recherche d itinéraires en transport multimodal

Génie Logiciel avec Ada. 4 février 2013

Algorithmique et Programmation, IMA

Conventions d écriture et outils de mise au point

TP : Gestion d une image au format PGM

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Resolution limit in community detection

Cours de Programmation 2

Package Java.util Classe générique

Modélisation multi-agents - Agents réactifs

4 Exemples de problèmes MapReduce incrémentaux

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

as Architecture des Systèmes d Information

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Initiation. àl algorithmique et à la programmation. en C

Cours de Master Recherche

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Temps Réel. Jérôme Pouiller Septembre 2011

Programmation en Java IUT GEII (MC-II1) 1

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours d Algorithmique et de Langage C v 3.0

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Faculté des sciences Département de mathématiques. Théorie des graphes

Quatrième partie IV. Test. Test 15 février / 71

Recherche dans un tableau

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

CHAPITRE V. Recherche et tri

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

Analyse de sécurité de logiciels système par typage statique

Arbres binaires de recherche

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Eléments de Théorie des Graphes et Programmation Linéaire

et Programmation Objet

données en connaissance et en actions?

Introduction à la Programmation Parallèle: MPI

Big Data et Graphes : Quelques pistes de recherche

Fondements de l informatique Logique, modèles, et calculs

Projet de programmation (IK3) : TP n 1 Correction

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Examen Médian - 1 heure 30

IRL : Simulation distribuée pour les systèmes embarqués

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Informatique III: Programmation en C++

Structures dynamiques Listes chaînées

COMPARAISONDESLANGAGESC, C++, JAVA ET

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Algorithmique, graphes et programmation dynamique Notes de Cours Rapport de Travaux Pratiques. Laurent Canet

Introduction aux algorithmes répartis

Sommaire. Introduction. I. Notions de routage a) Technologies actuelles b) Avantages et désavantages

Cours d initiation à la programmation en C++ Johann Cuenin

Chapitre 10. Les interfaces Comparable et Comparator 1

2. Comprendre les définitions de classes

Apprentissage statistique dans les graphes et les réseaux sociaux

Organigramme / Algorigramme Dossier élève 1 SI

TP3 : Manipulation et implantation de systèmes de fichiers 1

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Premiers Pas en Programmation Objet : les Classes et les Objets

Machines virtuelles fonctionnelles (suite) Compilation ML Java

UE C avancé cours 1: introduction et révisions

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

Par : Abdel YEZZA, Ph.D. Date : avril 2011 / mise à jour oct (ajout de la section 3 et augmentation de la section 1)

Les processus légers : threads. Système L3, /31

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Architecture des ordinateurs

Découverte de Python

Map-Reduce : un cadre de programmation parallèlle pour l analyse de grandes données. Stéphane Genaud ENSIIE

Claude Delannoy. 3 e édition C++

Transcription:

Programme Pimp A - info121a Programmation IMPérative Avancée Frédéric Vernier inspiré du cours de Burkhart Wolff Tri Récursivité Dichotomie Arbre Graphes Examen blanc xxx yyy Traverse et Calculs dans Arbres Graphes omniprésent! Exemples Représentations de graphes Parcours et Calculs etc. Exemple: Graphes de Réseaux Réseau de transport Stations (+type) Connexions Routes

Exemple: Graphes Exemple: Recherche Labyrinthe La recherche d une sortie d un labyrinthe Réseau sociaux (mais qui te like?) Exemple: Recherche Labyrinthe Exemple: Configurations en Jeux Recherche d une sortie = arbre ensemble des chemins = graphe n queens peut avoir des cycles Graphe implicite

Graphes : Définition Graphs : Definitions consistent d un ensemble de sommets (noeuds) V et de liens entre eux, des arêtes (arcs) E entre eux, i.e. un ensemble de paires entre les V. peuvent être orientés (E non-symétrique) ou non-orientés (E symétrique) peuvent avoir (en plus des arbres): boucles ([4,5,2,3]), peuvent avoir: cas: orientés - in-degré (example: 2) - out-degré (example: 2) cas non-orientés - degré (example: 2) des attributs sur des sommets (ex.: graph coloré ) des attributs sur des arêtes (ex.: graph pondéré ) sommets avec plusieurs pères (2) Graphe : Représentation Graphe : Représentation Représentation de Graphes: G = (V,E) ou V = {1,2,3,4,5,6 E = {(6,4),(4,3),(4,5),(5,2),(5,1),(2,1), (4,6),(3,4),(5,4),(2,5),(1,5),(1,2) Et, bien sur, une représentation par référence (position dans tableaux): [[2,5], [5,1], [2,4], [3,5,6], [1,2,4], [4]] ou par une fonction: vector<ref> voisins(<ref>)

Exemple de problème Différentes formes de graphes et de problèmes [Wikipedia] Route problems!!hamiltonian path and cycle problems!!minimum spanning tree!!route inspection problem (also called the "Chinese Postman Problem")!!Seven Bridges of Königsberg!!Shortest path problem!!steiner tree!!three-cottage problem!!traveling salesman problem (NP-hard) Exemple de problème Problème du chemin Hamiltonien: (pour des graphes orientés et non-orientés): trouver un chemin qui passe par tous les sommets exactement une fois. n existe pas dans tous les graphes. Certaines Graph-Problèmes Problème du voyageur de commerce: pour un graphe pondéré G = (V, A,!) typiquement non-orienté, mais visiter chaque sommet qu une seule fois (sauf le départ et fin, qui sont égaux) minimiser le cout du chemin problème d optimisation récurrent et complexe (NP) graphe pondéré: Arbre couvrant de poids minimal (angl: Minimum spanning tree) sommets tous liés poids minimal Autre exemple

Graphes & Arbres Graphs vs. Arbres: Marquages Arbres faciles à explorer par des algorithmes récursives Idée: explorer les graphes par construction de sous-arbres marquer les sommets déjà visitées marquer(a) de-marquer(a) est-marqué(a) Explicites et implicites Graphs Comme dans le cas des arbres, les sommets et les arrêtes peuvent être explicitement représentés (métro, shortest path navigation ) implicitement représentés: (jeux, labyrinthes ) vector<ref> voisins(sommets S) visiter(s, op) Schéma de parcours d arbres Parcours en profondeur (depth-first) Variante: Parcours Postfixe. (Variantes infixe et prefixe analog arbres) void visitergraph(sommet A){ marquer(a) foreach(sommet S : voisins(a)) if(nonmarque(s)) visitergraph(s); visiter(a); de-marquer(a);

Schema evaluation de graphes code C++ Parcours en profondeur (depth-first) Variante : Parcours Postfixe. (Variantes infixe et prefixe analogue aux arbres) <Res> evalgraph(sommet A){ marquer(a); foreach(sommet S : voisins(a)) if(nonmarque(a)) vector<res> res=evalarete(a,s,evalgraph(s)); de-marquer(a); return eval(a, res); /* Rappel d un algorithme de recherche: */ char MUR = '#'; char VIDE = ' '; char EN_CONSTR = '?'; char IMPASSE = '@'; char CHEMIN = 'o'; typedef vector<vector<char> > Labyrinthe; Labyrinthe laby; code C++ code C++ /* Rappel d un algorithme de recherche: */ bool chemin1_r(int x, int y){ //cout << x << "," << y << endl; laby[y][x] = EN_COURS; bool trouve = false; if (x==laby[laby.size()-2].size()-2 && y==laby.size()-2){ laby[y][x] = CHEMIN; return true; if (laby[y][x+1]==vide) trouve=chemin1_r(x+1, y); if (! trouve && laby[y+1][x]==vide) trouve=chemin1_r(x,y+1); if (! trouve && laby[y][x-1]==vide) trouve=chemin1_r(x-1,y); if (! trouve && laby[y-1][x]==vide) trouve=chemin1_r(x,y-1); /* Rappel d un algorithme de recherche: */ bool chemin1_r(int x, int y){ laby[y][x] = EN_COURS; bool trouve = false; if (x==laby[laby.size()-2].size()-2 && y==laby.size()-2){ laby[y][x] = CHEMIN; return true; marquer(x,y) le résultat donc voisin pas marqué if (laby[y][x+1]==vide) trouve=chemin1_r(x+1, y); if (! trouve && laby[y+1][x]==vide) trouve=chemin1_r(x,y+1); if (! trouve && laby[y][x-1]==vide) trouve=chemin1_r(x-1,y); if (! trouve && laby[y-1][x]==vide) trouve=chemin1_r(x,y-1); if (trouve)laby[y][x] = CHEMIN return trouve; if (trouve)laby[y][x] = CHEMIN; return trouve; de-marquer(x,y)

Parcours Labyrinthe Parcours de graphes Les Sommets: une configuration, i.e. un pair de: l état du labyrinthe, avec ses murs, ses cases encore vides, ses cases déjà visités la position actuelle: x et y calculer les voisins de (x,y) : trouver positions voisins qui sont ni déjà visité ni mur! Graph implicite!!! Intérêt particulier: Parcours en largeur (breadth first) Rappel: Structure de donné auxiliaire: File <X> (angl: Queue) First-in-first-out principle (FIFO) elements clé: operations File<X> FileVide Parcours de graphes Calculs dans graphes Schéma d un parcours en largeur (breadth first) ParcoursLargeur(Sommet A){ f = FileVide; enfiler(a, f); while (f!= FileVide) { nœud = defiler(f); marquer(nœud); Visiter(nœud); //On choisit de faire une opération foreach(s:voisins(nœud) if (non_marque(s)) enfiler(s, f) de-marquer(nœud) Schéma pour évaluation en largeur <res> evallargeur(sommet A){ File<Pair<Sommet, res_tmp>> f = FileVide; <res> res = initres() enfiler(a, f); while (f!= FileVide) { nœud = defiler(f); marquer(nœud) foreach(s:voisins(nœud) if (non_marque(s)) <res_tmp> res_tmp = eval(nœud, S, res, f) res = update(nœud, S, res, res_tmp) enfiler((s, res_tmp),f) de-marquer(nœud) return res

Parcours de graphes Résumé Quelle stratégie de parcours est meilleur pour find_shortest_path - parcours en profondeur parcours en largeur??? Graphes sont une structure de donnée (récurrente :-) en informatique Algorithmes efficaces de grand intérêt une approche de leur parcours et utilisation : réduction en arbre (via marqueur) et exploration avec des stratégies connues