2014-15 1. Présentation et organisation 2. Algorithme 3. Programmes 4. Manipulation d images 5. Introduction aux graphes 6. Graphes : définition 7. Degré 8. Chaînes 9. Connexité 10. Graphes Eulériens 11. Coloration Objectif et contenu Faut-il des connaissances préalables? Organisation et site web Support de cours Modalités de contrôle Comptes et tutorat Objectif : 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. 1
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. 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. Epreuves Durée Coeff CC (Tests) 3*20mn 0,2 1 TP noté 1h20 0,2 1 DS semaine 47 1h30 0,3 1 DST janvier 1h30 0,3 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
Qu'est-ce qu'un algorithme? Efficacité des algorithmes : structures de données et temps de calculs. 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. 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 Fin tant que allumer la cafetiere 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. 3
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 finsi 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. 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 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 Organisation 2 : Embranchements. À l'ouest de la maison k, n < k, et à l'est, n > k. La pizzeria est au numéro 8. 8 12 14 8 12 14 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 4
Dans les deux organisations, le livreur a une méthode simple pour trouver une maison en partant de la pizzeria. Nombre de maisons Temps avec organisation 1 Temps avec organisation 2 15 14 3 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? 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. 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. 5
Pour notre livreur de pizza : Si n = 10 6, alors log_2 20 Il fait 50 000 fois moins de déplacements si les maisons sont organisés par «embranchements». Si n = 10 9, alors log_2 n 30, il fait alors 30 000 000 fois moins de déplacements. 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 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 n 2 n*log(n) 10 100 10 1000 1000000 3000 100000 10000000000 500000 Sur un ordinateur exécutant une instruction élémentaire en 10-9 s. Si les ensembles E1 et E2 ont n = 1 000 000 = 10 6 elts Exécuter n * log n instructions élémentaires nécessite. Exécuter n 2 instructions élémentaires nécessite... soit environ. Si les ensembles E1 et E2 ont n = 10 000 000 = 10 7 éléments Exécuter n * log n instructions élémentaires nécessite.. Exécuter n 2 instructions élémentaires nécessite soit plus d une.. 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. 6
L'informatique même pour non informaticiens. Exemples de domaines de l'informatique Challenges 7
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. 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. 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 La sécurité Transports, Médecine, Finance, Communications, Énergie, Systèmes embarqués, 8
Simulation numérique Météorologie Crash-test Conception numérique. Etc. Les logiciels Navigateurs internet Anti-virus Pare-feu ou passerelle Clients de messagerie (mail) Jeux... 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 à Image et son MP3, JPEG, MPEG : codage et compression. Voix par IP, numérisation et transformation. Image 3D, jeux vidéos... Impression 3D 9
Que faire des algorithmes des années 60? Calcul parallèle (R.Namyst ( R.Namyst) Que change l informatique nomade? 1,19 MHz Qu implique la limitation physique des processeurs???? Calcul parallèle (R.Namyst ( R.Namyst) 2006 : Sony PS3 Processeur Cell 3.2 GHz Processeur graphique Nvidia RSX La PS3 calcule des millions de fois plus vite! «Le nombre de transistors par unité de surface double tous les 2 ans» 39 10
Si les transistors étaient des personnes On ne peut plus augmenter la fréquence La dissipation thermique et la consommation deviennent problématiques 2300 ~Opéra 134000 ~ Stade de foot 32 millions ~ Pop. de Tokyo 1,3 milliards ~ Pop. Chine Mais avec la finesse de la gravure il y a de la place pour continuer à rajouter des circuits -> Les processeurs multicœurs Toujours sur la surface d'un opéra... 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 :-) Calcul parallèle (R.Namyst ( R.Namyst) TITAN: 17,6.10 15 opérations flottantes par seconde; Installée au Oak Ridge Leadership Computing Facility (USA) Calcul parallèle (R.Namyst ( R.Namyst) Curie: 1,3.10 15 opérations flottantes par seconde. «Très Grand Centre de Calcul», Paris (TGCC) 43 11
Calcul parallèle (R.Namyst ( R.Namyst) Accélérateurs pour le calcul parallèle 10 12 flops Notion de programme Quelques instructions du langage Python. 1,5.10 12 flops 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 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 finsi 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 12
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. Exemples : i = 1 x = 2*i+1 i = x+2 i 1 i 1 i? 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. x 3 x? Exercices : 1. Que contiennent les variables x,y et z après les instructions suivantes? x=6 x=7 z=x z=x+y 2. Même question : b=3 b=a+2 3. L instruction i=i+1 a-t-elle un sens? Si oui lequel? Et i+1 = i? 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? 13
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 and V F V V F F F F or V F V V V F V F V F or and not F V not and or x>=-5 and x<=5 vaut True si x [-5,5] Exercices : 1. Ecrire une expression booléenne qui vaut True si x [-5,5]. En mathématique une fonction f : x 2x 2 + 1 décrit la façon de calculer f(x) à partir de la donnée x En Python : paramètre 2. Ecrire une expression booléenne qui vaut True si i est un nombre pair inférieur à 6. 3. On considère deux variables n et p. Ecrire une expression booléenne qui vaut True si n divise p. def f(x) : return 2 * x * x + 1 # exemples d appel de la fonction y = 2 * f(2) print (f(5)) argument Définition Utilisations 14
En Python : def f(x) : return 2 * x * x + 1 f Définition Instruction conditionnelle si alors sinon Vrai Faux Test x 2*x*x+1 f(x) Instructions_V Instructions_F Instruction conditionnelle si alors sinon if Test : Instructions_V else : Instructions_F 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! 15
On peut «imbriquer» les if :else On peut «imbriquer» les if :else Vrai Instructions_V1 Faux Test1 Vrai Faux Test2 Instructions_F1V2 Instructions_F1F2 if x<0 : print ("negatif") else : if x%2 ==0: print ("pair" ) else : print ("impair" ) if x<0 : print( "negatif" ) elif x%2 ==0: print( "pair " ) else : print( "impair" ) 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 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] 16
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 : 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! 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) def g(x): for i in range(x): return (i) Quel sera le résultat de : f, g et h pour x=3? def g(x): for i in range(x): return (i) 17