Initiation à Informatique Licence semestre 1

Slides:



Advertisements
Présentations similaires
Introduction à la Théorie des graphes
Advertisements

Tris.
Dans cette partie Graphes Eulériens.
Algorithmes et structures de données avancées Cours 7
Algorithmes et structures de données avancés
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Introduction à la Théorie des graphes
Algorithmique Résume.
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
Initiation à l’informatique (MI-1003)
Initiation à l’informatique (MSI102)
Initiation à l’informatique (MSI102)
Initiation à linformatique (MI-1003). 2 3 Objectif et contenu Faut-il des connaissances préalables? Organisation et site web Support de cours Modalités.
Système formel Nous avons introduit : signes de variables (x, y, z, …), de constantes (0, 1), d’opérations (+, ), de relations (=, ) Axiomes : ce sont.
LES GRAPHES.
INTRODUCTION.
Programmes de calculs en 3ème
Génération de colonnes
Utilisation des tableaux
Les bases de l’Algorithmique
COURS SUR LA THEORIE DES GRAPHES
Cours de programmation
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Démarche de résolution de problèmes
Module n°3 : Initiation au raisonnement déductif
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
ALGORITHMIQUE en classe de seconde
Théorie des graphes Un peu de vocabulaire.
Espaces vectoriels Montage préparé par : S André Ross
FICHIERS : Définition : Algorithme général:
Algorithme de Bellman-Ford
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Coloration gap sommet identifiante de graphes
Introduction à l’algorithmique
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
Semaine #1 INF130 par Frédérick Henri.
Semaine #1 INF135 par Frédérick Henri.
IFT Complexité et NP-complétude
Algorithmes d ’approximation
- GRAPHES - Composantes et types
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
INTRODUCTION.
Un survol du language C.
Programmation linéaire en nombres entiers
Méthodes de tri.
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Problème de double digestion
Introduction et Généralités sur l’Algorithmique
TICE 2 ième Semestre TD6 - Récapitulatif. Mars 2006TICE 2ième Semestre - Révisions2 Evaluation La semaine prochaine Deux demi groupes, minutes d’examen.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
DPI / Pixels / Compression
Module algorithmique et programmation
Réalisation d’un logiciel de Chiffrement RSA.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Scripts et fonctions Instructions de contrôle
Chapitre 4 La représentation des nombres.
Algorithmique Tableaux de données
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
Algorithmique Boucles et Itérations
Introduction à la Théorie des graphes
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Cycle, Cocycle, Arbre et Arborescence
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Transcription de la présentation:

Initiation à Informatique Licence semestre 1 2014-15

Plan du cours Présentation et organisation Graphes : définition Degré Algorithme Programmes Manipulation d’images Introduction aux graphes Graphes : définition Degré Chaînes Connexité Graphes Eulériens Coloration

1- Présentation et organisation Objectif et contenu Faut-il des connaissances préalables? Organisation et site web Support de cours Modalités de contrôle Comptes et tutorat

Objectifs et contenu Objectif : Thèmes : Organisation : Initiation à la programmation et l'algorithmique. Thèmes : Manipulation d’images Etude d’un objet appelé graphe. Organisation : Généralités, temps de calcul Notions théorique et algorithmes Programmation : TP 4 notions abordées : Images, graphes, algorithmes, programmes, temps de calcul.

Faut-il des connaissances préalables? Non prérequis Connaissance d'un langage, d'un système d'exploitation, Connaissance de la programmation, Connaissance de logiciels destinés au grand public. Prérequis Il sera nécessaire de pouvoir comprendre un raisonnement mathématique pour les preuves des théorèmes.

Organisation et site web Responsable : Samuel Thibault. Site Web : http://dept-info.labri.fr/initinfo Support de cours. Textes des TD, TP. Annales d’examen. Planning; 14 séances de cours intégré (1h20) 14 séances de TP (1h20) dont un TP noté. Travail individuel.

Modalités de contrôle des connaissances Epreuves Durée Coeff CC (Tests) 3*20mn 0,2 1 TP noté 1h20 1 DS semaine 45 1h30 1 Examen semaine 2 0,4

Comptes sur machines - Tutorat TD/TP au CREMI Bat A28 Tutorat Kiosque pour : Activation de comptes, Prise en main de l'environnement informatique, Soutien pour les cours d'informatique, Lundi-Jeudi de 12h45 à 13h45 (Rez-de-Chaussée bât. A22 en face du guichet unique) à partir de la mi-septembre.

2- Algorithmes Qu'est-ce qu'un algorithme? Efficacité des algorithmes : structures de données et temps de calculs.

Qu'est-ce qu'un algorithme? Un algorithme est une méthode systématique (comme une recette) pour résoudre un problème donné. Il se compose d'une suite d'opérations simples à effectuer pour résoudre un problème.

Qu'est-ce qu'un algorithme? Exemple : faire n tasses de café mettre un filtre Tant que niveau_reservoir < n faire mettre une dose d’eau dans le reservoir Fin tant que nb_doses = 0 Tant que nb_doses < n faire mettre une dose de cafe dans le filtre augmenter nb_doses de 1 allumer la cafetiere

Qu'est-ce qu'un algorithme? Un algorithme est une méthode systématique (comme une recette) pour résoudre un problème donné. Il se compose d'une suite d'opérations simples à effectuer pour résoudre un problème. En informatique cette méthode doit être applicable par un ordinateur.

Qu'est-ce qu'un algorithme? Exemple : afficher les diviseurs de l’entier n si n > 0 alors pour tout entier i entre 1 et n faire si n est divisible par i alors afficher(i) finsi finpour

Importance de l'algorithmique Pour un problème donné, il y a plusieurs algorithmes. Il est facile d'écrire des algorithmes faux ou inefficaces. Une erreur peut faire la différence entre plusieurs années et quelques minutes de calculs sur une même machine. C'est souvent une question d'utilisation de structures de données ou d'algorithmes connus dans la littérature. Une structure de données est une façon particulière d'organiser les données.

Représenter et organiser les données Exemple : Construire une ville de 15 maisons en évitant aux livreurs de pizzas qui suivent les rues un trajet trop long depuis la pizzeria. Organisation 1 : Linéaire. Numéros croissants. Pizzeria au numéro 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Organisation 2 : Embranchements. À l'ouest de la maison k, n° < k, et à l'est, n° > k. La pizzeria est au numéro 8. 8 1 3 5 7 9 11 13 15 14 12

Temps de calcul Dans les deux organisations, le livreur a une méthode simple pour trouver une maison en partant de la pizzeria. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 1 3 5 7 9 11 13 15 14 12 Un rectangle blanc masque une partie du texte qui apparaît en fin de diapo

Temps de calcul Dans les deux organisations, le livreur a une méthode simple pour trouver une maison en partant de la pizzeria. On suppose qu'il faut une unité de temps pour passer d'une maison à une autre (en suivant une rue). Dans le cas le pire, quel est le temps mis par un livreur pour aller jusqu'à une maison depuis la pizzeria ? Un rectangle blanc masque une partie du texte qui apparaît en fin de diapo

Temps avec organisation 1 Temps de calcul Nombre de maisons Temps avec organisation 1 Temps avec organisation 2 15 14 3 1023 1022 9 1 073 741 823  1073741822  29 n  n-1  ~log_2(n) Rq: une organisation en étoile avec la pizzeria au milieu permet des trajets très courts, mais choisir la bonne rue prend du temps. Un rectangle blanc masque une partie du texte qui apparaît en fin de diapo

Temps de calcul Le temps de calcul (ou complexité) d'un algorithme est la fonction qui à un entier n associe le nombre maximal d'instructions élémentaires que l'algorithme effectue, lorsqu‘on travaille sur des objets de taille n. En pratique, on se contente d'un ordre de grandeur. Exemples d'opérations élémentaires : additionner, soustraire, multiplier ou diviser deux nombres, tester si une valeur est égale à une autre valeur, affecter une valeur à une variable.

Temps de calcul Pour déterminer si un algorithme est efficace, on compte le nombre d'opérations nécessaires à effectuer dans le pire des cas et en fonction de la taille de la donnée. Le temps de calcul d'un algorithme est une évaluation du nombre d'opérations élémentaires (opérations arithmétiques) qu'il effectue sur une donnée de taille n. Exemple avec l'organisation 1 de la ville, de taille n maisons, l'algorithme naturel pour trouver une maison a une complexité O(n). avec l'organisation 2 d'une ville de taille n maisons, l'algorithme naturel pour trouver une maison a une complexité O(log_2(n)), ce qui est bien inférieur.

Différence entre n et log n Pour notre livreur de pizza : Si n = 106, alors log_2  20 Il fait 50 000 fois moins de déplacements si les maisons sont organisés par « embranchements ». Si n = 109, alors log_2 n  30, il fait alors 30 000 000 fois moins de déplacements.

Temps de calcul : 2ème exemple Problème : déterminer si 2 ensembles E1, E2 de n entiers ont une valeur commune. Algorithme 1 : comparer successivement chaque élément de E1 avec chaque élément de E2. Il faudra environ n² comparaisons. 237623 5234 983 83889 9 7363 19 873 111 87321 Un rectangle blanc masque une partie du texte qui apparaît en fin de diapo

Temps de calcul : 2ème exemple Problème : déterminer si 2 ensembles E1, E2 de n entiers ont une valeur commune. Algorithme 2 : Avec un structure de données adaptées, on peut résoudre le problème avec environ n*log(n) comparaisons . |E1| = |E2| Algorithme 1 Algorithme 2 n n2 n*log(n) 10 100 1000 1000000 3000 100000 10000000000 500000 Un rectangle blanc masque une partie du texte qui apparaît en fin de diapo

Différence entre O(n2) et O(n log(n)) Sur un ordinateur exécutant une instruction élémentaire en 10-9 s. Si les ensembles E1 et E2 ont n = 1 000 000 = 106 elts Exécuter n * log n instructions élémentaires nécessite 0,006s. Exécuter n2 instructions élémentaires nécessite 103s soit environ 16mn40s. Si les ensembles E1 et E2 ont n = 10 000 000 = 107 éléments Exécuter n * log n instructions élémentaires nécessite 0,07s. Exécuter n2 instructions élémentaires nécessite 105s soit plus d’une journée. En informatique, on manipule parfois des ensembles énormes Google indexe plusieurs milliards de pages web, Google reçoit près de 8 milliards 640 millions de requêtes/jour.

Représentation graphique : Structures de données

Représentation graphique : Structures de données

Représentation graphique : Structures de données

3-Qu'est-ce que l'informatique? L'informatique même pour non informaticiens. Exemples de domaines de l'informatique Challenges

Qu'est-ce que l'informatique? Dans la vie quotidienne : ordinateur avec logiciels, mais aussi… En entreprise : un outil de communication et de production. À l'université : une discipline scientifique. Une partie pratique (par exemple, autour de la programmation). Une partie théorique similaire aux maths (objets abstraits). Les objets en mathématiques : nombres, relations, fonction, transformations, etc. Les objets en informatique : algorithmes, programmes, preuves, systèmes de réécriture, images numériques, graphes, etc.

L'informatique pour non informaticiens Le travail d'un scientifique ou d'un ingénieur nécessite de plus en plus la manipulation de logiciels. Ces logiciels sont de plus en plus sophistiqués. Souvent, ces logiciels nécessitent de la programmation. Il faut des connaissances informatiques (algorithmique et programmation) pour programmer efficacement, maintenir les programmes.

Exemples de domaines en informatique Les bases de données : 2 484 915 152 internautes en 2014 +644 millions sites web en 2014. 4 milliards d’actions/ jour sur Facebook 33,9 milliards transactions VISA / an (2013) 90% des données numériques datent de moins de 2 ans. 144 milliards e-mails / jour dans le monde Actions : Trouver rapidement un billet d'avion, un trajet, une page web,... Traçabilité des transactions en agro-alimentaire, dans le domaine financier, … Croiser les informations des corps policiers au niveau européen, … Analyser des systèmes d’informations géographiques

Exemples de domaines en informatique La sécurité Transports, Médecine, Finance, Communications, Énergie, Systèmes embarqués, Y2K, bug célèbres, piratage, etc.

Exemples de domaines en informatique Simulation numérique Météorologie Crash-test Conception numérique. Etc.

Exemples de domaines en informatique Les logiciels Navigateurs internet Anti-virus Pare-feu ou passerelle Clients de messagerie (mail) Jeux  ...

Exemples de domaines en informatique Les langages de programmation Les langages de programmation sont souvent utilisés dans des domaines spécifiques. HTML, php, javascript pour la création de pages web, SQL pour les bases de données, Java pour les applications embarquées, les serveurs, + ... C pour les systèmes d'exploitation (Windows, Unix), +... Python pour... demandez à

Exemples de domaines en informatique Image et son MP3, JPEG, MPEG : codage et compression. Voix par IP, numérisation et transformation. Image 3D, jeux vidéos... Impression 3D

Challenges Que faire des algorithmes des années 60 ? Que change l’informatique nomade ? Qu’implique la limitation physique des processeurs ? ??? Informatique CPBx 1ère année

Challenges : exemple 1977 : Console Atari 2600 Calcul parallèle (R.Namyst) 1977 : Console Atari 2600 1,19 MHz

La PS3 calcule des millions de fois plus vite ! Challenges : exemple Calcul parallèle (R.Namyst) 2006 : Sony PS3 Processeur Cell 3.2 GHz Processeur graphique Nvidia RSX La PS3 calcule des millions de fois plus vite ! Informatique CPBx 1ère année 39 Une trentaine d’années entre ces deux consoles… A priori, on a gagné un facteur x3000 sur la cadence du processeur

Un prophète 1975 Gordon Moore, co-fondateur d’Intel « Le nombre de transistors par unité de surface double tous les 2 ans »

Toujours sur la surface d'un opéra... Loi de moore Si les transistors étaient des personnes 2300 ~Opéra 134000 ~ Stade de foot 32 millions ~ Pop. de Tokyo 1,3 milliards ~ Pop. Chine Toujours sur la surface d'un opéra...

Challenges : exemple On ne peut plus augmenter la fréquence La dissipation thermique et la consommation deviennent problématiques Mais avec la finesse de la gravure il y a de la place pour continuer à rajouter des circuits -> Les processeurs multicœurs Conséquences ? Pendant longtemps, l’évolution des microprocesseurs a permis d’accélérer les calculs sans effort de la part des programmeurs Aujourd’hui, le matériel demande des efforts énormes aux programmeurs (qui n’y sont pas habitués :-)

Challenges : exemple Une trentaine d’années entre ces deux consoles… Calcul parallèle (R.Namyst) TITAN: 17,6.1015 opérations flottantes par seconde; Installée au Oak Ridge Leadership Computing Facility (USA) Informatique CPBx 1ère année 43 Une trentaine d’années entre ces deux consoles… A priori, on a gagné un facteur x3000 sur la cadence du processeur

Challenges : exemple Calcul parallèle (R.Namyst) Curie: 1,3.1015 opérations flottantes par seconde. « Très Grand Centre de Calcul », Paris (TGCC) Informatique CPBx 1ère année

Challenges : exemple 1012 flops 1,5.1012 flops Calcul parallèle (R.Namyst) Accélérateurs pour le calcul parallèle 1012 flops 1,5.1012 flops Informatique CPBx 1ère année

3-Programmation Notion de programme Quelques instructions du langage Python.

Qu'est-ce qu'un programme? C'est une suite d'instructions écrites dans un langage de programmation « compréhensible » par l'ordinateur. Cela permet à l'ordinateur d'appliquer un algorithme. Dans un programme l'ordinateur effectue les instructions dans l'ordre. L'ordre des instructions est donc très important

Qu'est-ce qu'un programme? Exemple : afficher les diviseurs de n Algorithme : si n > 0 alors pour tout entier i entre 1 et n faire si n est divisible par i alors afficher i finsi finpour Programme : if n > 0: for i in range(1, n+1): if n % i == 0: print (i) Rq : n % i donne le reste de la division de n par i

Variables et affectation Une variable désigne un emplacement mémoire dans lequel on peut stocker (sauvegarder) une valeur. Une variable a toujours un nom. Pour changer la valeur d’une variable on utilise l’affectation représentée par le symbole = en python. Ce symbole n'a pas la même signification qu'en mathématique. Il signifie calculer la valeur à droite du symbole = et la ranger dans la variable dont le nom se trouve à gauche.

Variables et affectation Exemples : i = 1 x = 2*i+1 i = x+2 1 1 3 ? i i i x x

Variables et affectation Exercices : Que contiennent les variables x ,y et z après les instructions suivantes ? x=6 y=7 z=x z=x+y Même question : b=3 b=a+2 L’instruction i=i+1 a-t-elle un sens ? Si oui lequel ? Et i+1 = i ?

Division entière a = bq+r avec 0<=r<b Le quotient entier q de deux entiers a et b positifs et le reste r sont définis par : a = bq+r avec 0<=r<b En python : Quotient entier de a par b : a//b Reste ou modulo : a%b Exemple : 19//5 donne 3 19%5 donne 4 Exercice : Comment caractériser les entiers pairs ?

Expression booléenne Une expression booléenne est une expression qui n’a que 2 valeurs possibles : True (Vrai) False (False) Les tests sont des expressions booléennes égalité x==y inégalité x!=y comparaison x<=y x>y etc. On peut les combiner avec des opérateurs : and, or et not

Expression booléenne and V F or V F V F not or and not

Expression booléenne x>=-5 and x<=5 vaut True si x[-5,5] Exercices : Ecrire une expression booléenne qui vaut True si x[-5,5]. Ecrire une expression booléenne qui vaut True si i est un nombre pair inférieur à 6. On considère deux variables n et p. Ecrire une expression booléenne qui vaut True si n divise p. Evaluation paresseuse

Notion de fonction paramètre Définition Utilisations argument En mathématique une fonction f : x  2x2 + 1 décrit la façon de calculer f(x) à partir de la donnée x En Python : def f(x) : return 2 * x * x + 1 # exemples d’appel de la fonction y = 2 * f(2) print (f(5)) paramètre Définition argument Utilisations Analogie machine café. Fonctions à plusieurs variables

Notion de fonction Définition f Analogie machine café En Python : def f(x) : return 2 * x * x + 1 Définition f x 2*x*x+1 f(x) Analogie machine café

Instruction conditionnelle if…: else :… Instruction conditionnelle si… alors… sinon… Test Faux Vrai Instructions_V Instructions_F

Instruction conditionnelle if…: else :… Instruction conditionnelle si… alors… sinon… if Test : Instructions_V else : Instructions_F

Instruction conditionnelle if…: else :… Instruction conditionnelle si… alors… sinon… Exemple i=10 x=6 if i > x : print ("test VRAI" ) print (i, "est supérieur à", x) else : print ("test FAUX") print (i, "n'est pas supérieur à", x) Attention à l’indentation !

Instruction conditionnelle if…: elif…: else :… On peut « imbriquer » les if… :else… Vrai Faux Test1 Test2 Faux Vrai Instructions_F1V2 Instructions_F1F2 Instructions_V1

Instruction conditionnelle if…: elif…: else :… On peut « imbriquer » les if… :else… if x<0 : print ("negatif") else : if x%2 ==0: print ("pair"  )   print ("impair" ) if x<0 : print( "negatif" )   elif x%2 ==0: print( "pair " ) else : print( "impair" )

Listes d’éléments On peut manipuler des listes d’éléments : Exemples : [3,7,4,1] [‘‘d’’,‘‘f’’,‘‘e’’] 6 in [3,7,4,1] => False 4 in [3,7,4,1] => True La fonction len retourne la taille de la liste. Len([3,7,4,1]) => 4

Listes d’éléments La fonction range permet de construire des listes d’éléments consécutifs # liste des entiers [a,b[ par pas de c range(a,b,c): Debut Fin Pas Remarque: range(a,b)  range(a,b,1) #c=1 range(b)  range(0,b,1) #a=0,c=1 Exemple : list ( range(1,9,1)) =>[1,2,3,4,5,6,7,8] list ( range(1, 9, 2)) => [1,3,5,7]

Répétition : for … in … : Répétition : pour… parcourant la liste …. La boucle for permet de parcourir les éléments d’une liste # parcourir et afficher les entiers de 0 à 9 for i in range(10) : print (i) On peut imbriquer les boucles : for i in range(10): for j in range(3): print(i,j)

Répétition : while… : Ou : while i > 0 : i = i – 1 print (i) Répétition : tant que … faire… i=10 while i > 0 : print (i) i = i - 1 Ou : while i > 0 : i = i – 1 print (i) Attention à l’ordre des instructions !

Quelques pièges à éviter ! Affichage ou sortie (print ou return) Position du return (dans la boucle ou après la boucle) def f(x): for i in range(x): print (i) Quel sera le résultat de : f, g et h pour x=3 ? def g(x): for i in range(x): return (i) def h(x): for i in range(x): print (i) return (i)

Images Numériques Quelques notions

Qu’est-ce qu’une image numérique ? Une matrice de n*m Pixels (picture element) m

Qu’est-ce qu’une image numérique ? Une image en informatique est un tableau à 2 dimensions de points associés à une couleur. On appelle ces points des Pixels (picture elements) Les coordonnées (x,y) d’un pixel expriment sa position dans le repère de l’image. longueur (0,0) (longueur-1,0) hauteur (0,hauteur-1) (longueur-1,hauteur-1)

Qu’est-ce qu’une image numérique ? Ecran Mémoire 1 bit / pixel Bit-map

Qu’est-ce qu’une image numérique ? 0111111000 0100001000 Ecran Mémoire

Qu’est-ce qu’une image numérique ? Bit-map : quelques exemples

Qu’est-ce qu’une image numérique ? Bit-map : quelques exemples

Qu’est-ce qu’une image numérique ?

Qu’est-ce qu’une image numérique ? Mémoire 1 octet / pixel 256 niveaux de gris

Qu’est-ce qu’une image numérique ? 24 - plans Mémoire 3 octets / pixel … 16 Millions de Couleurs. Vraies couleurs

Qu’est-ce qu’une image numérique ? A chaque pixel est associée une couleur RGB (par exemple) : R : Red G : Green B : Blue Chaque canal est codé par une valeur entière entre 0 et 255. Exemple : (0,0,0) : noir (255,255,255) : blanc (255,0,0) : rouge

Qu’est-ce qu’une image numérique ? Cyan Axe de gris Blanc Magenta Bleu Jaune Noir (0,0,0) Vert Rouge

Qu’est-ce qu’une image numérique ?

Quantification des couleurs : RGB vs NGris NGris = 0.2999*R +0.587*G + 0.114*B Les coefficients sont issus de la sensibilité de l’œil humain Les niveaux de gris (NGris) sont invariants par cette transformation. Exemple : Si R = G = B = x dans [0, 255] alors NGris = (0.2999 + 0.587 + 0.114) x = x

Graphes non orientés = Graphes Dans la suite du cours

Exemple de graphe : les cousins Ensemble : toutes les personnes assistant à un repas de Noël. Relation : l'ensemble des couples de personnes (p1,p2) tels que p1 est un cousin de p2 (relation symétrique). Représentation graphique (relation symétrique, graphe non orienté) Jacques Isabelle Jean Luc Anne Olivier Marie Pierre

Exemple de graphe : molécule Ensemble : les atomes de la molécule de caféine. Relation : l'ensemble des couples d'atomes partageant au moins un électron (liaison covalente, relation symétrique)

Changement d’échelle : Internet

Modélisation de problèmes par des graphes Les graphes sont des objets permettant de représenter plusieurs situations de la vie courante. Des problèmes de la vie courante se traduisent en questions à résoudre sur les graphes. Le développement d'algorithmes sur les graphes permet donc de répondre à des problèmes concrets et pratiques. Cela permet aussi de reléguer la résolution de ces problèmes à des systèmes informatisés.

Exemple : Organisation d'examens Des étudiants passent des examens de Maths (M), Informatique (I), Chimie (C), Physique (P), Anglais (A) et Sport (S) de 2h. Des étudiants passent M, I, C, d'autres C, P, A et d'autres A, S, P Question : Quel est le temps le plus court pour organiser les examens?

Exemple : Organisation d'examens On fait un graphe avec comme sommets M,I,C,P,S,A. Si un étudiant doit passer deux des examens, les sommets correspondants sont incompatibles: les épreuves ne peuvent avoir lieu en même temps. On forme le graphe en reliant 2 sommets s'ils sont incompatibles. 1. Dessiner le graphe.

Exemple : Organisation d'examens On cherche à attribuer à chaque examen un créneau horaire. On colorie des sommets adjacents avec des couleurs différentes. On souhaite utiliser un nombre minimum de couleurs ( de créneaux). 16h 18h 8h 10h 12h 14h 2.1 Colorier le graphe solution 2.2 Quel est le temps le plus court pour organiser les examens ?

Organisation d'examens 2 sommets sont reliés si (au moins) un étudiant passe les deux examens. Chaque couleur représente un créneau différent. I S Solution : Ici 3 couleurs sont nécessaires  on peut organiser tout en 3 x 2h C P M A

Organisation d'examens 2 sommets sont reliés si (au moins) un étudiant passe les deux examens. Chaque couleur représente un créneau différent.

Coloration de carte géographique 1852 Guthrie colorie la carte des cantons anglais avec 4 couleurs sans que 2 cantons adjacents n'aient la même couleur. 4 couleurs suffisent-elles pour colorier n'importe quelle carte? 1976 : Oui (Appel & Haken). Résultat obtenu en partie par ordinateur. Carte géograhique ~> graphe. Les sommets représentent les pays, et 2 sommets sont reliés par une arête si les pays correspondants partagent une frontière. But : montrer qu'on peut colorier le graphe avec 4 couleurs, sans que 2 sommets adjacents n'aient la même couleur.

Coloration de carte géographique

Coloration de carte géographique Solution

Coloration de graphes Partant d'un graphe quelconque (ne représentant pas une carte), on peut avoir besoin de plus de 4 couleurs. Tester si on peut colorier avec seulement 3 couleurs est difficile. Pour ce dernier problème, trouver un algorithme avec une complexité polynomiale, ou prouver qu'un tel algorithme n'existe pas est équivalent à l'un des problèmes ouverts les plus difficiles, sélectionné par le Clay Mathematical Institute (1 000 000$).

Problèmes de parcours Les graphes permettent de modéliser des voies de communication : les sommets représentent des villes, les arêtes représentent des routes. On peut associer à chaque arête d'un tel graphe un nombre représentant la distance entre les deux sommets reliés. Deux questions naturelles Peut-on trouver un algorithme efficace pour calculer un trajet le plus court possible entre deux villes données? Peut-on trouver un algorithme efficace pour calculer un trajet le plus court possible reliant toutes les villes? Réponses Oui pour le 1er problème, (il y a des algorithmes efficaces). ? ? pour le 2ème, sélectionné par le Clay Math Institute (1 M $).

Graphe : programmation Python from bibV3 import * #Mes fonctions sur les graphes from graphV3 import * #Ensemble de graphes bibV3.py Fonctions manipulation graphes graphV3.py

Graphe : programmation Python from bibV3 import * Mes fonctions sur les graphes

Graphe : programmation Python Sommet est défini par : Son Nom ou étiquette : 'Bordeaux' Sa couleur : 'white' Son état : marqué ou non-marqué : True ou False sommetNom(G, etiquette) Retourne le sommet de G désigné par son étiquette >>> sommetNom(tgv2005,'Bordeaux') <sommet: 'Bordeaux', 'white', False>

Graphe : programmation Python >>> print(tgv2005) <graphe: 'tgv2005'> >>> Bordeaux Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> Bordeaux NameError: name 'Bordeaux' is not defined >>> listeSommets(tgv2005) [<sommet: 'Lille', 'white', False>, <sommet: 'Paris', 'white', False>, <sommet: 'Nantes', 'white', False>, <sommet: 'Lyon', 'white', False>, <sommet: 'Bordeaux', 'white', False>, … ]

Graphe : programmation Python >>> maVille = sommetNom(tgv2005,'Bordeaux') >>> maVille <sommet: 'Bordeaux', 'white', False> listeSommets(G) Retourne la liste des sommets de G nbSommets(G) Retourne le nombre de sommets de G colorierSommet(s,c) Colorie le sommet s avec la couleur c couleurSommet(s) Retourne la couleur du sommet s dessiner(G) Dessine le graphe G

Graphe : programmation Python Attention : Respecter les noms des fonctions >>>dessine(tgv2005) … dessine(tgv2005) NameError: name 'dessine' is not defined Passer aux fonctions les arguments attendus >>> couleurSommet(tgv2005) … graphV3.ErreurParametre: <graphe: 'tgv2005'> n'est pas un sommet

Graphe Voisins Degré

Graphe : Sommets Voisins Deux sommets s et t sont appelés voisins s’il existe une arête a ayant s et t comme extrémité. On dit que l’arête a est incidente à chacun des sommets s et t Exemple : A et B sont voisins. A et C sont voisins. Il peut exister plusieurs arêtes entre 2 sommets : A et B (arête multiple) Un sommet peut être voisin de lui-même : B ou D (boucle) Un sommet peut aussi être voisin de lui-même : on dit que l’arête est une boucle

Graphe : Sommets Voisins listeVoisins(s) Retourne la liste des voisins de s >>> listeSommets(fig22) [<sommet: 'A', 'white', False>, <sommet: 'B', 'white', False>, <sommet: 'C', 'white', False>, <sommet: 'D', 'white', False>] >>> MonA= sommetNom(fig22, 'A') >>> MonA <sommet: 'A', 'white', False> >>> listeVoisins(MonA) [<sommet: 'B', 'white', False>, <sommet: 'B', 'white', False>, <sommet: 'C', 'white', False>]

Graphe : Sommets Voisins listeVoisins(s) Retourne la liste des voisins de s >>>listeVoisins(sommetNom(fig22,'B')) [<sommet: 'A', 'white', False>, <sommet: 'A', 'white', False>, <sommet: 'B', 'white', False>, <sommet: 'B', 'white', False>]

Graphe : degré Le degré d’un sommet s est le nombre d’incidences d’arêtes C’est aussi le nombre brins issus de s lorsqu’on regarde le dessin d’un graphe. degre(s) Retourne le degré de s >>> degre(monA) 3 >>> degre(sommetNom(fig22,’B’) 4 #jamais d’accent dans le nom #d’une fonction

Graphe : degré listeVoisins(s) Retourne la liste des voisins de s degre(s) Retourne le degré de s qui est aussi la taille de la liste précédente. Utilisation : >>>for v in listeVoisins(monA): print(v)

Graphe : sommets, voisins Utilisation : Tous les sommets d’un graphe. >>>for s in listeSommets(fig22): print(s) <sommet: 'A', 'white', False> <sommet: 'B', 'white', False> <sommet: 'C', 'white', False> <sommet: 'D', 'white', False> Tous les voisins de tous les sommets d’un graphe. >>>for s in listeSommets(G): for v in listeVoisins(s): …instructions…

Graphe Simple Définition : Un graphe est dit simple s’il n’a ni boucle ni arête multiple. Dans un graphe simple les extrémités d’une arête sont toujours distinctes et il existe au plus une arête qui relie 2 sommets s et t distincts. Dans un graphe simple la liste des voisins d’un sommet s ne comporte jamais de répétition. Contre exemple : fig22 n’est pas simple

Exercice Voici la liste des incompatibilités de six produits chimiques : p1 est incompatible avec p2 et p4; p2 est incompatible avec p1,p3 et p5; p3 est incompatible avec p2 et p4; p4 est incompatible avec p1 et p3; p5 est incompatible avec p2 et p6; p6 est incompatible avec p5. Dessinez le graphe modélisant ces incompatibilités. Quel est le nombre minimum de wagons nécessaires au transport de ces produits ? Informatique CPBx 1ère année

Exercice Démontrez que dans un groupe de personnes il y a au moins 2 personnes qui ont le même nombre d’amis présents. Informatique CPBx 1ère année

Exercice Pour tous les sommets du graphe G faire… for s in listeSommets(G): … Existe-t-il un sommet de G qui… if s: « sortie » Pour tous les voisins d’un sommet s faire : for v in listeVoisins(s): Double boucle imbriquée : Informatique CPBx 1ère année

Exercice Pour tous les sommets du graphe G faire… def mystere1 (G, c): for s in listeSommets (G): colorierSommet (s, c) Existe-t-il un sommet de G qui… def mystere2 (G, c): if couleurSommet (s) == c: return True return False Informatique CPBx 1ère année

Chaines et Connexité Chaînes dans un graphe Cycle dans un graphe

La notion de chaîne Il est souvent nécessaire de savoir si l'on peut aller d'un sommet à un autre en suivant des arêtes. Exemple d'utilité : Est-il possible de prendre le train pour aller De Bordeaux à Rome? De Bordeaux à Oslo? De Bordeaux à Reykjavik? La notion de chaîne exprime cette idée. On peut citer aussi d’autres exemples. Parmi les membres d’une assemblée, ont-ils tous eu l’occasion de déjeuner l’un avec l’autre à un moment ou à un autre (détection de réseau d’influence dans les instances gouvernantes, etc.) ?

Définition de chaîne C = s0, a1, s1, a2, s2 … , an, sn Une chaîne dans un graphe est une suite alternée de n + 1 sommets et n arêtes : les extrémités d’une arête ai sont les sommets si-1 et si. On dit alors que C relie s0 à sn ou encore que C est un chemin entre s0 à sn Remarques : Si n = 0, on obtient une chaîne sans arête C = s0. Pour définir une chaîne, se donner seulement la suite des arêtes, ou seulement la suite des sommets ne suffit pas (pourquoi ?). C = s0, a1, s1, a2, s2 … , an, sn

Définition d’un cycle Un cycle est une chaîne dont les deux extrémités coïncident (s0 = sn ) On peut choisir n’importe quel sommet du cycle comme sommet de départ. Exemple :

Chaîne, cycle : quelques caractéristiques Une chaîne est élémentaire si ses sommets et ses arêtes sont distincts deux à deux sauf les sommets extrémités qui peuvent être égaux. Dans ce cas il s’agit d’un cycle élémentaire La longueur d’une chaîne ou d’un cycle est le nombre n d’arêtes qui composent la chaine ou le cycle. Une chaîne peut-être réduite à un seul sommet, elle est alors de longueur nulle. Cette chaine est aussi un cycle de longueur nulle.

Connexité La connexité exprime la possibilité d'aller de n'importe quel sommet du graphe à n'importe quel autre sommet du graphe. Informellement, un graphe est connexe s'il est en un seul morceau. Connexe Non connexe

Connexe : 1 composante connexe Connexité Un graphe G est connexe si pour tous sommets s et t de G il existe une chaîne qui relie s à t. Une composante connexe d’un graphe G est un sous ensemble maximal de sommets de G tels que deux quelconques d’entre eux soient reliés par une chaîne.. Connexe : 1 composante connexe 2 composantes connexes

Théorème Dans un graphe G, s'il existe une chaîne entre deux sommets s et t, alors il existe une chaîne simple entre s et t. La preuve est constructive. On prend une chaîne non simple et on en supprime les cycles pour construire une chaîne simple.

Preuve Soit C = s1, a1, s2, … , sk, ak, sk+1 la chaîne. Si C est simple, le travail est terminé. Sinon, il y a deux sommets si et sj pour lesquels i < j et si = sj [où i et j sont choisis parmi les entiers de 1 à k+1]. On écrit donc : C = s1, a1,..., si, ai,..., sj, aj,... ,sk, ak , sk+1

Preuve On construit une chaîne C' plus courte en supprimant de C la partie ai,..., sj On obtient alors : C' = s1, a1,..., si, aj, ..., sk, ak, sk+1. Reste à vérifier que C' est bien une chaîne (cela vient de ce que si est bien une extrémité de l’arête aj). On observe que la chaîne C‘ ainsi obtenue est plus courte, ce qui permet de conclure en invoquant le principe d’induction (appliqué à la longueur des chaînes).

Existence d'une chaîne Vérifier s'il existe une chaîne entre un sommet s et un sommet t n'est pas forcément simple. Pour y arriver, nous allons utiliser une technique pour marquer et démarquer les sommets. Les marques laissées sur les sommets agissent en quelque sorte comme une mémoire d’un parcours effectué dans le graphe. Il peut être nécessaire de motiver le besoin d’établir une procédure pour effectuer ce travail. J’aime bien présenter aux étudiants un fichier (Tulip ?) décrivant un graphe pour qu’ils mesurent d’eux-mêmes la complexité de la tâche et surtout, la nécessité de confier ce travail à une machine ...

Existence d'une chaîne entre s et t Algorithme : 1. démarquer tous les sommets 2. marquer s 3. tant que t n'est pas marqué, 3.1 chercher une arête dont un sommet extrémité est marqué et l'autre ne l'est pas 3.2 si une telle arête n'existe pas, renvoyer la valeur "faux" 3.3 sinon marquer l'extrémité non encore marquée 4. renvoyer la valeur "vrai"

Quelques remarques sur l’algorithme La première phase consiste à se mettre dans un état de départ adéquat afin d’assurer le bon fonctionnement de l’algorithme. L’action « renvoyer » correspond à la réponse attendu et donné par l’algorithme, l’action « renvoyer » implique que l’algorithme est arrivé à sa conclusion et s’arête. On suppose ici que la recherche d’une arête qui satisfait la condition se fait en suivant une procédure connue. On suppose aussi que l’on a une façon facile de vérifier si un sommet est marqué et de le marquer ou de le démarquer le cas échéant. On peut ici faire un parallèle avec la primitive « return » de python et insister que tout algorithme est destiné à « renvoyer » quelque chose (même s’il ne s’agit que de signaler qu’il a fini de faire ce qu’on attendait de lui – modifier une valeur, afficher un résultat à l’écran, etc.). La procédure qui cherche une arête « bicolore » est un bon exerccie à inscrire au programme de l’un des TD? Ce qui permettrait de faire programmer cet algo quasi tel quel.

Quelques remarques sur l’algorithme Resterait encore à prouver que l’algorithme fait bien le travail que l’on attend de lui. C’est-à- dire: Que l’on obtient éventuellement et à chaque fois une réponse de sa part, Et que cette réponse est bien la bonne (!). Faut-il aller jusqu’à ce niveau de détail ? Certainement pas à ce stade du cours, mais il est bien de le souligner et de le faire réaliser. On peut faire remarquer lors du calcul sur des exemples, qu’alors qu’on est tenté de travailler de manière ordonné en visitant les voisins des sommets déjà marqués par exemple, que l’algorithme ne l’exige pas du tout et qu’on peut « piocher » comme bon nous semble.

Existence d'une chaîne entre s et t L’algorithme visite d’abord le voisin u de s qui se trouve au bas du graphe puis remonte vers le haut à droite. Il sélectionne ensuite voisin de u à gauche et en bas de s avant de « trouver » t. L’algorithme visite d’abord le voisin u de s qui se trouve au bas du graphe puis remonte vers le haut à droite. Il sélectionne ensuite le voisin de u à gauche et en bas de s avant de « trouver » t. On peut aussi produire une séquence où on ne trouve pas de chaîne en choisissant s parmi les quatre sommets bleus non visités au cours de cet exemple.

Complexité de l’algorithme Étape 1 : Étape 2 : Étape 3.1 : Étapes 3.2 et 3.3 : Cette diapositive est destinée aux étudiants qui pourront noter la « démonstration » faite en cours/TD.

Complexité de l’algorithme Étape 1 : |S| unités de temps. Étape 2 : 1 unité de temps. Étape 3.1 : au pire, pour chercher une arête « bicolore » , on passe d(s) + 1 unité de temps par sommet s, ce qui coûte: Ss (d(s) + 1) = 2|A| + |S| = O(|A| + |S|) unités de temps. Étapes 3.2 et 3.3 : 1 unité de temps. Au pire, on recommence l'étape 3 pour chaque sommet, donc |S| fois au total. La complexité de l'algorithme est donc au pire de l'ordre de |S|(|A| + |S|) [en négligeant les étapes 1, 2, 3.2, 3.3 et un facteur 2] Rq Il existe un algorithme de complexité O(|A| + |S|). L’animation est supprimé et est destinée au responsable de cours seulement (voir prochaine diapositive).

Graphes Eulériens

Les ponts de Königsberg La ville de Königsberg (maintenant Kaliningrad en Russie) est traversée par la rivière Pregolya, et comporte deux îles. Ces îles sont reliées entre elles et aux berges par des ponts, comme sur la figure ci-dessous.

Promenade Peut-on : commencer une promenade sur une île ou une rive,  terminer la promenade sur n'importe quelle autre (ou la même) île ou rive en passant exactement une fois sur chacun des ponts ? C'est le mathématicien Euler qui en 1735 a trouvé la réponse (d'où le nom "eulérien").

Dessiner une enveloppe Est-ce possible de dessiner cette enveloppe sans lever le crayon, sans passer deux fois sur le même trait ?

C'est un problème de graphe Dans un graphe G, est-il possible de trouver une chaîne C qui contient tous les sommets de G et toutes les arêtes de G une et une seule fois ? A B C E D a1 a2 Donner une solution pour le graphe ci-contre a3 a6 a7 a4 a5 a8

Définition de Chaine Eulérienne Une chaine est Eulérienne si elle passe par chaque arête une et une seule fois et parcourt tous les sommets du graphe C = s1, a1, s2, a2,..., sm, am, sm+1 telle que : S(G) = {s1,s2,...,sm+1} , A(G) = {a1,a2,...,am} et |A(G)| = m. Si s1= sm+1 c’est un cycle eulérien.

Définition de Chaine Eulérienne Remarque 1 : Dans la suite de sommets s1, s2,...,sm+1, certains sommets peuvent apparaître plusieurs fois mais tous les sommets du graphe sont présents. Remarque 2 : Dans la suite d'arêtes a1, a2,..., am, chaque arête du graphe apparaît exactement une fois.

Graphe Eulérien Définitions : Théorème Un graphe est Eulérien s’il possède une chaîne eulérienne. Un sommet est pair si son degré est pair. Un sommet est impair si son degré est impair. Théorème Un graphe G est eulérien si et seulement si G est connexe et le nombre de sommets impairs de G est 0 ou 2.

Graphe Eulérien Théorème. Un graphe G est Eulérien si et seulement si G est connexe et le nombre de sommets impairs de G est 0 ou 2. Dans le premier cas G possède un cycle Eulérien Dans le deuxième cas G possède une chaîne Eulérienne qui relie les deux sommets de degré impair.

Propriétés Théorème : Un graphe Eulérien est nécessairement connexe. D'autres façons de dire la même chose : Tout graphe Eulérien est connexe, Si un graphe est Eulérien, alors il est connexe, G Eulérien  G connexe, Si un graphe n'est pas connexe, alors il n'est pas Eulérien, G est connexe est une condition nécessaire pour que G soit Eulérien.

Coloration graphe

Coloration Définition. Une coloration d'un graphe G en k couleurs est une fonction c : S(G)  {1,..., k} telle que si x et y sont deux sommets voisins dans G alors c(x) ≠ c(y). -Si on arrive à produire une telle fonction de coloration le graphe est dit bien colorié. - Un graphe qui a une coloration en k couleurs est dit k-coloriable. - La valeur minimum de k est son nombre chromatique.

Coloration 2-coloriable Non 2-coloriable

Graphes 2-coloriables et longueurs des cycles Soit C = s1, a1,..., am, sm+1 une chaîne. La longueur de C est son nombre m d'arêtes. Rappel : C est un cycle si les arêtes a1,..., am sont toutes différentes, et si s1 = sm+1. (La chaîne C = s1 est donc un cycle de longueur 0). Théorème. G est 2-coloriable si et seulement si G n'a pas de cycle de longueur impaire. Un tel graphe est aussi appelé : biparti On peut partitionner l’ensemble des sommets de G en 2 sous ensembles S1 et S2 tels que les arêtes de G relient toujours un sommet de S1 à un sommet de S2

Graphes 2-coloriables et longueurs des cycles Étape 1 : si G contient un cycle de longueur impaire, alors on ne peut pas le colorier avec 2 couleurs. Étape 2 : si G ne contient pas de tel cycle, alors il est 2-coloriable. Pour le montrer, on va construire un algorithme de 2-coloration de G.

Algorithme de 2-coloration On essaie de colorier en deux couleurs, ou bien de trouver un cycle de longueur impaire. Quitte à travailler indépendamment sur chaque partie connexe du graphe, on peut supposer G connexe.

Algorithme de 2-coloration 1.  Colorier en couleur 1 un sommet arbitraire s0 2.  Tant qu'il existe un sommet s non colorié ayant au moins un voisin colorié : 2.1   si la couleur de tous les voisins coloriés de s est 1, colorier s en 2. 2.2   si la couleur de tous les voisins coloriés de s est 2, colorier s en 1. 2.3  sinon, deux voisins de s ont des couleurs différentes, et on a un cycle de longueur impaire.

Pourquoi l'algorithme est-il correct ? À chaque fois qu'on colorie un sommet, on s'assure qu'il sera de couleur différente de celle de ses voisins déjà coloriés. Donc, si l'algorithme colorie tous les sommets, il produit une 2-coloration.

Pourquoi l'algorithme est-il correct ? Pourquoi y a-t-il un cycle de longueur impaire si l'algorithme détecte que 2 voisins x et y du sommet à colorier s sont déjà coloriés avec 2 couleurs différentes ? On a détecté : (a)   une chaîne C1 de s0 à x de sommets coloriés, (b)   une chaîne C2 de s0 à y de sommets coloriés, (c)   des arêtes Par (a) et (b), on a une chaîne simple entre x et y, de longueur impaire car x et y ont des couleurs différentes. En fermant cette chaîne par les arêtes (c), on obtient un cycle de longueur impaire. x y s

Arbre Définition. Un arbre est un graphe connexe sans cycle. Exemple : Corollaire : Tout arbre a une coloration en deux couleurs. Preuve.

Arbre Définition. Un arbre est un graphe connexe sans cycle. Exemple : Corollaire. Tout arbre a une coloration en deux couleurs. Preuve. Il n'y a aucun cycle, donc pas de cycle de longueur impaire !

Colorier un graphe en 3 couleurs? Question : Existe-t-il un algorithme "efficace" permettant de savoir si un graphe peut être colorié en trois couleurs? Existe-t-il un critère simple, facilement vérifiable ? Réponse : on ne sait pas faire beaucoup mieux que de tester toutes les façons possibles de colorier en trois couleurs chacun des sommets et de vérifier que c'est une coloration. Malheureusement, ce n'est pas efficace, il y a 3n colorations possibles pour un graphe à n sommets! Challenge : Il est offert une prime de 1 million de $ à qui trouvera un algorithme de complexité nc (c constante), ou bien démontrera qu'il n'existe pas d'algorithme de complexité polynomiale.